我正在使用OpenXML生成Excel文件,该文件打开后在安装了Excel 2016的桌面上没有任何问题。该文件还通过了Open XML Productivity Tool 2.5的验证。
问题是该文件被SQL Server集成服务(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提供程序很重要吗?