C#Excel到OleDB没有工作表名称

时间:2016-04-29 09:05:23

标签: c# excel oledb

我正在尝试将Excel数据添加到数据库中。我可以使用工作表名称来完成它,但它限制用户使用app,所以我希望该用户可以使用任何工作表名称上传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数据加载到数据库中?

提前致谢

1 个答案:

答案 0 :(得分:0)

在我的情况下,首先使用Microsoft.Office.Interop.Excel命名空间从Excel文件中读取sheetname。

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();