繁体   English   中英

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

[英](C#) OpenXML import xlsx into DataTable with correct column data type

我正在使用OpenXML库使用C#将excelsheet(.xslx)导入到DataTable中。

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

foreach (Cell cell in row.Descendants<Cell>())
{
    dt.Columns.Add(GetXlsxCellValue(sharedStringTableList, cell));
}

然后,我循环所有其他行,并通过以与当前行中任何单元格相似的方式将任何一行添加到我的DataTable中来填充DataTable。

现在,假设我的excel有两个这样的列

excel示例

第一行包含列名,因此第一单元格的DataType =字符串(文本存储在sharedStringTableList中)。

所有其他行在第一列中仅包含Number(在excel中,整列也将其格式设置为“ number”)。

最后,在我的DataTable中,第一列具有正确的名称(“ Number”),但DataType列为STRING

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

提前致谢,

安德里亚

...

好了,您将必须确定单元格类型,然后基于该单元格创建列。 尝试看看这篇文章。 之后,您应该能够根据单元格类型创建列 (将其转换为.NET类型之后)。 但是,如果您知道高级的类型,并且希望将数据作为T的列表,则建议您查看ClassToExcel.OpenXml之类的东西或类似的包装器库,从而省去编写代码的麻烦。

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

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

如果您有一个简单的目标类,则尝试从excel中提取该nuget可以直接使用,但我认为您需要DataTable输出。

希望这可以帮助。

您必须查看以下内容,才能将整个列数据类型设置为text:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM