2016-04-29 23 views
0

我想將Excel數據添加到數據庫。我可以使用工作表名稱來完成工作,但它限制了用戶使用應用程序,所以我希望該用戶可以使用任何工作表名稱上傳Excel文件。C#Excel到沒有工作表名稱的OleDB

這是我的代碼:

public static DataSet ReadExcelFile(string sheetName, string path) 
{ 
    using (OleDbConnection conn = new OleDbConnection()) 
    { 
     DataSet ds = new DataSet(); 
     string Import_FileName = path; 
     string fileExtension = Path.GetExtension(Import_FileName); 

     if (fileExtension == ".xls") 
      conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Import_FileName + ";" + "Extended Properties='Excel 8.0;HDR=YES;'"; 

     if (fileExtension == ".xlsx") 
      conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Import_FileName + ";" + "Extended Properties='Excel 12.0 Xml;HDR=YES;'"; 

     using (OleDbCommand comm = new OleDbCommand()) 
     { 
      comm.CommandText = "Select * from [" + sheetName + "$]"; 
      comm.Connection = conn; 

      using (OleDbDataAdapter da = new OleDbDataAdapter()) 
      { 
       da.SelectCommand = comm; 
       da.Fill(ds, "Table"); 
       return ds; 
      } 
     } 
    } 
} 

我怎樣才能加載Excel數據到數據庫中的任何表的名稱?

在此先感謝

+0

對我來說你的要求不清楚,Excel文件總是有工作表,你想做什麼?只從第一張表中獲取數據?迭代每張紙? –

+0

我的意思是我有兩個excel文件,其中一個人的工作表名稱爲sheet1 onether一個工作表名稱sheet2,在我的代碼中,我可以將兩個xml數據添加到數據庫 –

+0

comm.CommandText =「Select * from [」+ sheetName +「$]」; sheetName可以是任何字符串 –

回答

0

在我的情況下使用的Microsoft.Office.Interop.Excel命名空間來讀取SHEETNAME形成Excel的第一個文件。

Excel.Application MyApp = new Excel.Application(); 
MyApp.Visible = false; 

Excel.Workbooks MyBooks = MyApp.Workbooks; 
Excel.Workbook MyBook = MyBooks.Open(excelFilePath); 
Excel.Worksheet XlsDb = MyBook.Sheets[1] as Excel.Worksheet; 

string sheetName = XlsDb.Name; 
DataSet excelDataSet = ReadExcelFile(sheetname, path); 

你有SHEETNAME後,不要忘記關閉Excel,你已經通過上面的代碼打開(你可以看到,他們將不得不在任務管理器的Excel的任務,如果你不關閉它。即使你的程序已經關閉)。

MyBook.Close(0); 
MyApp.Quit(); 
Marshal.ReleaseComObject(XlsDb); 
Marshal.ReleaseComObject(MyBook); 
Marshal.ReleaseComObject(MyBooks); 
Marshal.ReleaseComObject(MyApp); 
GC.Collect(); 
GC.WaitForPendingFinalizers(); 
相關問題