在没有Interop.Excel的情况下通过C#修改Excel工作表

我知道像这样的问题在堆栈中,有第三部分库来做的伎俩,但他们都没有正在解决我的问题。 所以这个问题。

我有一个Excel工作簿(.xlsx)与另一个系统生成的多个工作表。 我必须通过SSIS读取数据并将其转储到SQL DB。

现在的问题是,尽pipeExcel工作表包含数据,当我手动打开它打开没有任何错误,并且数据显示当我使用脚本任务和使用OLEDB连接连接到Excel并打开它的连接成功,但是当读取数据的列名不被挑选(我得到F1,F2同样),没有数据行被读取。 我只是得到一个空白的行,这是关于它。 我尝试过使用HDR = YES和NO,IMEX = 1和0,但总是得到相同的结果。

有趣的是,如果我打开Excel表做一些修改(如更改工作表名称保存,并更改回工作表名称并保存并closures),之后,我尝试运行包数据被挑选没有任何问题(也注意到文件大小从164KB增加到196KB)。 现在正因为如此,试图做的是修改文件一点,并通过代码保存。

所以我尝试的第一步是通过使用Office.Interop.Excel,它在我的机器上像一个魅力,但在服务器上没有办公室,所以它没有任何工作。 而且,IT人员永远不会安装访问引擎或excel或任何东西。

然后,我尝试通过OpenXML和第三方库,如NPOI,甚至通过OLEDB连接来修改文件。 在NPOI和OLEDB方法中,文件被改变了,但仍然没有被SSIS包正确拾取(我注意到文件大小没有改变,保持在164kb)。 在OpenXML中,它无法打开文件,并抛出一个错误,指出“文档无法打开,因为存在意外的内容types,而且无效的部分”。

所以现在我被卡在没有适当的方法在眼前,并希望任何帮助,通过C#代码或任何其他可用的SSIS方法解决这个问题。 我使用的SSIS版本是2008年。

编辑1

所以我注意到脚本任务能够从第一张纸上读取多张纸上的数据,但是其他纸张是问题。 所以这些表单的XML被破坏了。 无论如何,我可以复制第一张表的xmlconfiguration到其他的? 只是一个想法…

编辑2因此,第一张是ContentType“application / vnd.openxmlformats-officedocument.spreadsheetml.worksheet + xml”,而所有其他工作表都是ContentType“application / xml”

最终结束了使用这两个库。 使用exceldatareader( http://exceldatareader.codeplex.com/ )读取数据时没有问题。 使用这个数据很容易读入数据集,然后使用epplus( http://epplus.codeplex.com/ )将其写入新的Excel文件。 之后,当新的Excel文件通过SSIS包读取数据被挑选没有问题。 希望这会帮助那里的人。