2016-11-03
取得 Excel 的 活頁簿(Book) 中所有 工作表 (Sheet, WorkSheet) 的名稱,及儲存格 (Cell) 內容
Visual Studio 2015 with Update 3 + Windows Server 2012 R2 + IIS + Excel 2010
Form1.cs
using System; using System.Data; using System.Data.OleDb; using System.Windows.Forms; namespace ExcelSheet { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { OleDbConnection oleDbConn = null; DataTable dataTable = null; try { // Microsoft.ACE.OLEDB.12.0' 提供者並未登錄於本機電腦上。 // 原因是Server上沒有安裝Access Database Engine 2010 的驅動程式。 // http://www.microsoft.com/downloads/zh-tw/details.aspx?familyid=C06B8369-60DD-4B64-A44B-84B371EDE16D&displaylang=zh-tw // 連接字串語法 // https://msdn.microsoft.com/zh-tw/library/ms254500(v=vs.110).aspx string Hdr = "Yes"; // Yes 表示第一列是欄位名稱 string IMEX = "0"; String connString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + @"D:\\Excel.xlsx" + ";Extended Properties=\"Excel 8.0; HDR=YES; IMEX=0\""; oleDbConn = new OleDbConnection(connString); oleDbConn.Open(); dataTable = oleDbConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); if (dataTable == null) { richTextBox1.AppendText("No table\r\n"); } foreach (DataRow row in dataTable.Rows) { richTextBox1.AppendText(row["TABLE_NAME"].ToString() + "\r\n"); } // ---------- string SheetName = "工作表1"; using (OleDbConnection oldDbConn = new OleDbConnection(connString)) { oldDbConn.Open(); string qs = "select * from[" + SheetName + "$]"; try { using (OleDbDataAdapter dr = new OleDbDataAdapter(qs, oldDbConn)) { DataTable dt = new DataTable(); dr.Fill(dt); foreach (DataRow item in dt.Rows) { richTextBox1.AppendText(item[1].ToString() + "\r\n"); } } } catch (Exception) { throw; } } // ----- richTextBox1.AppendText("欄位\r\n"); OleDbCommand oleDbCommand = new OleDbCommand("SELECT * FROM [" + SheetName + "$]", oleDbConn); OleDbDataAdapter objAdapter1 = new OleDbDataAdapter(); objAdapter1.SelectCommand = oleDbCommand; DataSet dataSet1 = new DataSet(); objAdapter1.Fill(dataSet1); foreach (DataTable table in dataSet1.Tables) { foreach (DataColumn column in table.Columns) { richTextBox1.AppendText(column.ColumnName + "\r\n"); } } } catch (Exception ex) { richTextBox1.AppendText(ex.ToString() + "\r\n"); } finally { if (oleDbConn != null) { oleDbConn.Close(); oleDbConn.Dispose(); } if (dataTable != null) { dataTable.Dispose(); } } } } } |
D:\Excel.xlsx
(下圖) 執行結果
因為第一列被當作欄位名稱,所以資料列第一列是 a2, b2, c2, d2
第一個 Cell 的索引編號是 0,所以第一列 item[1] 抓到 b2,第二列 item[1] 抓到 b3
(完)
相關
[研究] 'Microsoft.ACE.OLEDB.12.0' 提供者並未登錄於本機電腦上。
http://shaurong.blogspot.tw/2016/11/microsoftaceoledb120.html
[研究][C#][ASP.NET] GridView 匯出成 .xls (使用 Excel )
http://shaurong.blogspot.tw/2016/03/caspnet-gridview-xls-excel.html
Read and Write Excel Documents Using OLEDB
https://www.codeproject.com/Tips/705470/Read-and-Write-Excel-Documents-Using-OLEDB
使用 Access 2010 進行資料程式設計
https://msdn.microsoft.com/zh-tw/library/office/ff965871(v=office.14).aspx
沒有留言:
張貼留言