excel - Excel OpenXML、OleDB 和“外部表不是预期格式”错误
问题描述
我正在使用 OpenXML 生成 Excel 文件,该文件在安装了 Excel 2016 的桌面上打开时没有任何问题。该文件还通过使用 Open XML Productivity Tool 2.5 的验证。
问题是该文件被 SQL Server Integration Services (SSIS) 处理拒绝。错误是“外部表不是预期的格式”
据我所知,SSIS 正在使用 OLEDB 来处理文件。我尝试使用以下代码在本地读取文件,并且能够重现相同的错误。
代码如下:
var fileName = "C:\\Temp\\myExcel.xlsx";
var connectionString = String.Empty;
if (Path.GetExtension(fileName) == ".xlsx")
{
connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0;HDR=YES;\"", fileName);
}
else //.xls
{
connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1;\"", fileName);
}
using (OleDbConnection conn = new OleDbConnection(connectionString))
{
conn.Open();
var adapter = new OleDbDataAdapter("select * from [test$]", conn);
var excelDataSet = new DataSet();
adapter.Fill(excelDataSet, "anyNameHere");
var data = excelDataSet.Tables["anyNameHere"];
foreach (DataRow row in data.Rows)
{
Console.Out.WriteLine(row[NAME].ToString());
}
}
我只能在网上找到这个错误是由于错误的连接字符串(Microsoft.Jet.OLEDB.4.0 和 Excel 8.0 而不是 Microsoft.ACE.OLEDB.12.0 和 Excel 12.0)造成的,但我已经有了这个。
这绝对是文件本身的问题。如果我在 Excel 中打开文件并使用另存为,问题就会消失。
我试图解压缩原始文件和重新保存的文件并比较内容,但差异很大,保存 excel 时会添加许多样式、主题和 xmls 引用。我真的不想走那条路。
你知道在阅读 Excel 时哪些部分对 OleDB 提供者很重要吗?