如何在电子表格中使用Open XML电子表格"取消折叠"单元格?

Sha*_*ane 4 c# excel openxml openxml-sdk

我在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>();
Run Code Online (Sandbox Code Playgroud)

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

这个问题比我在这里要好: 阅读Excel Open XML忽略了空白单元格

小智 5

根据我的理解,你正在连续迭代单元格并假设你读取的第一个单元格在A列中,第二个单元格在B列中,依此类推?

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

DocumentFormat.OpenXml.Spreadsheet.Cell currentcell
currentcell.CellReference
Run Code Online (Sandbox Code Playgroud)

CellReference以"A1"表示法为您提供单元格引用.提取列部分("A,B,CC等)"

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

我不知道是否有另一种方法可以找出细胞所属的列.