c# - 如何在电子表格中包含 Open XML 电子表格 "uncollapse"单元格?

标签 c# excel openxml-sdk openxml

我在服务器端使用 C# 处理 xslx Excel 文件。在电子表格中,假设总共有 15 列(单元格)。在单元格行中,缺少一些值。所以第一行是我的标题将正确包含 15 个单元格。但是我的数据行,一些单元格可能有空值,所以 Open XML 有一组“参差不齐”的单元格值。第 1 行将包含完整的 15 个单元格,第 2 行可能包含 13 个单元格,因为其中两个值是空的。什么!如何正确映射这些数据?它基本上将所有内容都向左移动,我的单元格值是错误的。我错过了什么?看起来它们在 Open XML 术语中被“折叠”了。

WorkbookPart workbookPart = spreadSheetDocument.WorkbookPart;
                IEnumerable<Sheet> sheets = spreadSheetDocument.WorkbookPart.Workbook.GetFirstChild<Sheets>().Elements<Sheet>();
                string relationshipId = sheets.First().Id.Value;
                WorksheetPart worksheetPart = (WorksheetPart)spreadSheetDocument.WorkbookPart.GetPartById(relationshipId);
                Worksheet workSheet = worksheetPart.Worksheet;
                SheetData sheetData = workSheet.GetFirstChild<SheetData>();
                IEnumerable<Row> rows = sheetData.Descendants<Row>();

澄清:这是提出这个问题的另一种方式。如果我想将 Excel 文件中的内容放入 DataTable 中怎么办?我希望所有数据列都正确排列。我怎样才能做到这一点?

这个问题比我在这里问得更好:reading Excel Open XML is ignoring blank cells

最佳答案

据我了解,您正在连续遍历单元格并假设您读取的第一个单元格在 A 列中,第二个单元格在 B 列中,依此类推?

我建议您(解析?)正则表达式中的列位置/引用

DocumentFormat.OpenXml.Spreadsheet.Cell currentcell
currentcell.CellReference

CellReference 以“A1”表示法为您提供单元格引用。提取列部分(“A、B、CC 等)

您必须对一行中的每个单元格执行此操作。然后,如果缺少列的单元格,只需填写一个占位符值。可能是 Null 还是 DbNull?

我不知道是否有另一种方法可以找出单元格属于哪一列。

关于c# - 如何在电子表格中包含 Open XML 电子表格 "uncollapse"单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4923359/

相关文章:

C# - 使用反射比较两个 .net dll

xml - 使用 Perl 和 LibXML 处理 Excel XML 文件

c# - 我可以在没有 VS 的情况下创建自定义 Excel 文档级功能区吗

c# - 使用现有范围名称从电子表格中读取或检索值

c# - C#.NET 中有没有办法将字符串分解为固定长度的子字符串?

c# - 使用 C# 在远程计算机上设置日期、时间和时区

c# - 使用 OpenXML 2.5 将数据写入 docx 文档中的 TextInput 元素

C# Open Xml SDK 2.0 电子表格设置单元格日期时间格式

c# - ServiceStack 和非数据库对象

Excel 2010选择一行中的每个单元格,逐个激活它们