C#實戰020:OleDb操作-獲取Excel中的sheet工作表
阿新 • • 發佈:2018-11-24
前面用Excel元件寫了一個程式,用來計算市場部的刀具使用明細,但是 發現整個計算過程頻繁的操作Excel表,導致計算時間較長,資料不怎麼多 卻話費了3-4分鐘的計算時間,所以效率太低了。
所以接下來準備用 OleDb操作來實現這同樣的功能,首先我們來獲取Excel中的所有sheet的工作表,連結資料庫之後通過GetOleDbSchemaTable來獲取Excel中的所有sheet的工作表,然後再將表單進行過濾下存入集合中。之後在遍歷集合就可以得到我們的sheet明細了。
DataTable dt = myCon.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //獲取所有sheet的工作表 foreach (DataRow row in dt.Rows) { string SheetTableName = row["TABLE_NAME"].ToString(); if (SheetTableName.Contains("$") && SheetTableName.Replace("'", "").EndsWith("$")) //過濾無效SheetName { SheetTableName = SheetTableName.Replace("'", ""); SheetTableName = SheetTableName.Substring(0, SheetTableName.Length - 1); tableName.Add(SheetTableName); } } foreach (string sheet in tableName) //迴圈所有的sheet { Console.WriteLine(sheet); }
下面是完整的程式碼:
public string ExcelName = @"C:\Users\敏\Desktop\test.xlsx"; public void getExcel() { string strConn = ""; List<string> tableName = new List<string>(); if (File.Exists(ExcelName))//判斷檔案是否存在 { FileInfo file = new FileInfo(ExcelName);//讀取excel檔名 string fileType = file.Extension;//提取excel檔名字尾,判斷檔名型別 //----------------------------獲取Excel表格資料--------------------------- if (fileType == ".xls") //讀取“.xls”時使用"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ExcelPath + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'" Office 07及以上版本 不能出現多餘的空格 而且分號注意 strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source =" + ExcelName + @";Extended Properties='Excel 8.0;HDR=Yes;IMEX=0'"; else //讀取“.xlsx”時使用 "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ExcelPath + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1;'"Office 07以下版本 strConn = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source =" + ExcelName + @";Extended Properties='Excel 8.0;HDR=Yes;IMEX=0'"; } OleDbConnection myCon = new OleDbConnection(strConn); //連線資料庫 myCon.Open();//開啟資料庫 DataTable dt = myCon.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //獲取所有sheet的工作表 foreach (DataRow row in dt.Rows) { string SheetTableName = row["TABLE_NAME"].ToString(); if (SheetTableName.Contains("$") && SheetTableName.Replace("'", "").EndsWith("$")) //過濾無效SheetName { SheetTableName = SheetTableName.Replace("'", ""); SheetTableName = SheetTableName.Substring(0, SheetTableName.Length - 1); tableName.Add(SheetTableName); } } foreach (string sheet in tableName) //迴圈所有的sheet { Console.WriteLine(sheet); } }