Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(C#)OpenXML使用正确的列数据类型将xlsx导入数据表_C#_Excel_Datatable_Openxml_Xlsx - Fatal编程技术网

(C#)OpenXML使用正确的列数据类型将xlsx导入数据表

(C#)OpenXML使用正确的列数据类型将xlsx导入数据表,c#,excel,datatable,openxml,xlsx,C#,Excel,Datatable,Openxml,Xlsx,我正在使用OpenXML库使用C#将excelsheet(.xslx)导入数据表 xlsx的第一行包含列名,因此我开始在DataTable中添加该列: foreach (Cell cell in row.Descendants<Cell>()) { dt.Columns.Add(GetXlsxCellValue(sharedStringTableList, cell)); } foreach(行中的单元格。子体()) { Add(GetXlsxCellValue(share

我正在使用OpenXML库使用C#将excelsheet(.xslx)导入数据表

xlsx的第一行包含列名,因此我开始在DataTable中添加该列:

foreach (Cell cell in row.Descendants<Cell>())
{
    dt.Columns.Add(GetXlsxCellValue(sharedStringTableList, cell));
}
foreach(行中的单元格。子体())
{
Add(GetXlsxCellValue(sharedStringTableList,cell));
}
然后,我循环所有其他行,并通过使用当前行中的任何单元格以类似的方式将任何一行添加到我的数据表来填充数据表

现在,假设我的excel有两列,如下所示

第一行包含列名,因此第一个单元格的数据类型为string(文本存储在sharedStringTableList中)

所有其他行在第一列中只包含数字(在excel中,整个列的格式也是“数字”)

最后,在我的数据表中,第一列有正确的名称(“编号”),但列数据类型是字符串

问题是:如何在开始时使用xlsx中设置的正确列数据类型创建数据表? 方法“Columns.Add()”允许您指定列数据类型,但在第一行中,所有单元格的数据类型都为dataType=string,因此我需要以其他方式检查列数据类型

提前感谢,

安德烈

有一个名为的库,它是OpenXML的友好包装器,我发现它比纯OpenXML更容易使用。有一个枚举(XLCellValues)告诉您excel数据类型是什么。这可以帮助您构建正确的数据列类型

是一个如何使用封闭xml导航并将行和列解析为一个简单类的示例,与您的示例非常类似(但对于类而不是数据表)。该链接/示例中还有一种方法将C#sharp类型映射到excel列类型,您可以反向使用这些列类型(XLCellValues enum)。如果您不信任给定的excel数据类型,它会变得更加复杂

如果您有一个简单的目标类,您正试图从excel中提取,这可能是开箱即用的,但我认为您需要一个DataTable输出


希望这有帮助。

要将整列数据类型设置为文本,您必须查看以下内容:

Worksheet.Column(9).Style.NumberFormat.Format = "@";

您使用OpenXML的动机是什么?为什么不使用旧的好的Microsoft.Jet.OLEDB提供程序呢?嗨,克斯特亚,我的动机是规范项目:)可能我需要使用OpenXML来导入数据,而无需在每台机器上安装excel。实际上,使用前面提到的OLEDB提供程序不需要安装MS Office或excel。你确定克斯特亚吗?我刚在我的电脑上尝试过(未安装excel in),但收到错误消息:“Microsoft.ACE.OLEDB.12.0”提供程序未在本地计算机上注册。您仍然需要安装旧的B驱动程序,但我记得不是excel。ClosedXML用于从.net类型创建excel,因此减少了类型。这篇文章所要求的是从少数几个开放XML枚举(只有少数几个,如Number,以涵盖所有数字类型)到.net类型,如int、double等。