将Excel工作表导入DataTable

时间:2011-02-12 16:56:06

标签: excel interop

我需要将excel文件的内容导入DataTable,其中第一行excel表现为标题行。 我不能使用OleDB,因为它在导入时改变了数据,所以最好是使用Excel Interop进行导入(我在机器上安装了excel),但我不想导入单元格的值但是单元格的文本属性。 原因是我在excel文件中有类似“543523564537567457657567345”的代码,它们没有格式化为特定类型,如果我导入该值,则可能会转换为指数数字。

另一件事是我想要尽可能快。 (在我之前的互操作中,这比oleDB导入慢得多)

我可以使用的任何想法,建议或代码示例?

非常感谢!

1 个答案:

答案 0 :(得分:0)

根据Excel 2003规范page,最大数字精度为15位数。如果输入Excel时值543523564537567457657567345未被视为文本,则您能够检索的最佳值为5.43523564537567E + 26。 Text属性显示参考当前数字格式的单元格的显示值,而Value属性显示实际存储的值。这些都不能用于恢复超过15位数限制的丢失精度。

如果该值最初未被Excel视为Text,则您将无法检索丢失的精度。要在通过UI输入时作为文本处理,必须在输入值之前将值添加到具有文本格式的单元格,或者必须将值添加到通用格式单元格,其值前面带有单引号。要在通过VBA输入时作为文本处理,该值必须用双引号括起来。

查看从电子表格生成的XML中的存储值还将显示基础数据。在这个例子中,我在A1和A2中存储了相同的值,但A1被视为一个数字而A2被视为文本,您可以在下面的XML片段中看到差异(同时查看ss:Type和{{ 1}}参数 - 请参阅here):

x:Ticked

请在Excel中为特定<Worksheet ss:Name="Sheet2"> <Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="2"> <Row> <Cell><Data ss:Type="Number">5.4352356453756703E+26</Data></Cell> </Row> <Row> <Cell><Data ss:Type="String" x:Ticked="1">543523564537567457657567345</Data></Cell> </Row> </Table> </Worksheet> 快速生成XML,像往常一样访问Range属性,但传递参数Value或其整数相当于11

相关问题