用OleDB打开Excel(用EPPLUS创build)

我有一位同事的代码,这段代码用Epplus创build了一些Excel表格。 用我的代码,我想添加一个数据库提取10K +/-线。 由于数据量较大,Epplus需要花费很长时间,因为您需要编写每个单元格。 OleDB只需要几秒钟。 但是我不能用OleDB打开以前创build的Epplus的excel。 即使有不同的连接string。

如果你分开两个代码块,这个代码是完美的。

var excelPath = "C:\\test_" + DateTime.Today.ToString("yyyyMMdd_") + DateTime.Now.ToString("hh") + DateTime.Now.Minute.ToString() + ".xlsx"; using (ExcelPackage xlPackage = new ExcelPackage(new FileInfo(excelPath))) { ExcelWorksheet worksheet = xlPackage.Workbook.Worksheets.Add("Schedule V"); worksheet.Cell(1, 1).Value = "test"; xlPackage.Save(); xlPackage.Dispose(); } var strCn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelPath + ";Extended Properties='Excel 12.0 Xml';"; using (OleDbConnection conn = new OleDbConnection(strCn)) { conn.Open(); OleDbCommand cmd = new OleDbCommand(); cmd.Connection = conn; cmd.CommandText = "CREATE TABLE [table1] (id INT, name VARCHAR, datecol DATE );"; cmd.ExecuteNonQuery(); cmd.CommandText = "INSERT INTO [table1](id,name,datecol) VALUES(1,'AAAA','2014-01-01');"; cmd.ExecuteNonQuery(); conn.Close(); } 

我尝试了以下连接string,但他们都给出了相同的错误:

OleDbException未处理,外部表格不是预期的格式。

我不同的连接string我试过了:

 var strCn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelPath + ";Extended Properties='Excel 12.0';"; var strCn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelPath + ";Extended Properties='Excel 12.0 Xml';"; var strCn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelPath + ";Extended Properties='Excel 12.0 Xml;HDR=YES';"; var strCn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelPath + ";Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1';"; var strCn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelPath + ";Extended Properties='Excel 8.0;HDR=YES';"; var strCn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelPath + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1';"; 

我在这里做错了什么?

我想,应该是这样的,而不是硬编码,你应该使用OleDbConnectionStringBuilder类

 OleDbConnectionStringBuilder connectionStringBuilder = new OleDbConnectionStringBuilder(); connectionStringBuilder.Provider = "Microsoft.ACE.OLEDB.12.0"; connectionStringBuilder.DataSource = excelPath; // This is your Excel File Full Path connectionStringBuilder.Add("Mode", "Read"); const string extendedProperties = "Excel 12.0;IMEX=1;HDR=YES"; connectionStringBuilder.Add("Extended Properties", extendedProperties); String connectionString = connectionStringBuilder.ToString(); // Create connection object by using the preceding connection string. using (var objConn = new OleDbConnection(connectionString)) { // Open connection with the database. objConn.Open(); // Do operations with your File here } 

我一直在用EPPlus 4.0.4创build的.xlsx文件中得到这个错误。 我记得这是在升级到EPPlus 4.x之前的工作。 我降级到3.1.3.3,我不再得到这个错误。