2016-04-29 5 views
0

データベースにExcelデータを追加しようとしています。私はシート名でそれを行うことができますが、それはユーザーがアプリケーションを使用することを制限するので、そのユーザーは任意のシート名でExcelファイルをアップロードすることができます。C#シート名のないOleDBへのExcel

これは私のコードです:

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

私は2つのExcelファイルを持っていると思います。そのうちの1つはsheet1としてシート名を持ちます。シート名はsheet2です。私のコードでは、両方のXMLデータをデータベースに追加できます。 –

+0

comm.CommandText = "[* sheetName + "$]"; sheetNameは任意の文字列にすることができます –

答えて

0

おかげで、シート名はExcelが最初のファイルを形成するために読んMicrosoft.Office.Interop.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); 

、あなたは上記のコードで開いたそのExcelを閉じることを忘れないでください(あなたはそれを閉じていない場合、彼らも。タスクマネージャでExcelのタスクを持っていることを見ることができますあなたのプログラムは既に閉鎖されています)。

MyBook.Close(0); 
MyApp.Quit(); 
Marshal.ReleaseComObject(XlsDb); 
Marshal.ReleaseComObject(MyBook); 
Marshal.ReleaseComObject(MyBooks); 
Marshal.ReleaseComObject(MyApp); 
GC.Collect(); 
GC.WaitForPendingFinalizers(); 
関連する問題