【问题标题】:Opening an Excel (created with EPPLUS) with OleDB使用 OleDB 打开 Excel(使用 EPPLUS 创建)
【发布时间】:2015-09-15 04:43:58
【问题描述】:

我有一个同事的代码,这段代码用 Epplus 创建了一些 excel 表。使用我的代码,我想添加一个数据库提取 10k+/- 行。由于数据量大,Epplus 耗时太长,因为你需要写每个单元格。使用 OleDB 只需几秒钟。但我无法用 OleDB 打开 Epplus 以前创建的 excel。即使使用不同的连接字符串。

如果您将两个代码块分开,我的代码可以完美运行。

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

我尝试了以下连接字符串,但它们都给出了相同的错误:

OleDbException 未处理,外部表不在预期中 格式。

我尝试过的不同连接字符串:

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';";

我在这里做错了什么?

【问题讨论】:

  • 我也面临同样的问题。你能解决这个问题吗?

标签: c# excel oledb epplus


【解决方案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
}

【讨论】:

  • 我仍然收到同样的错误,看起来它本身的 excel 格式不同,OleDB 无法读取这种格式...感谢您的努力!
【解决方案2】:

在使用 EPPlus 4.0.4 创建的 .xlsx 文件时,我一直收到此错误。我记得这是在升级到 EPPlus 4.x 之前工作的。我已降级到 3.1.3.3,我不再收到此错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 2016-03-08
    相关资源
    最近更新 更多