哎呀,所以我發現使用OpenXml我的列並不總是排隊。例如看這個例子缺少列解析Excel文件與OpenXml
這是標題行 柱37 =「僅交換」 塔38 =「數量手頭」 塔39 =「成本法」 欄40 =「成本法金額」
現在,在下一行 - 在37和38中都有實際數據的是空白的,但是它省略了第38列。所以我的數據看起來像這樣。
柱37 =「」(應該是空白的) 塔38 =「設定量」(應該是空白的原因,應該以「數量手頭」排隊) 塔39 = 0
注意到它退出真正的列/單元格38,現在我的解析器不再排隊。 37和38都是空白的,但它不會丟失37.
這裏是一些代碼,顯示我如何獲得字符串數組 - 它實際上只是一個來自MSDN的修改示例。
public InventoryItemLoadProxy CreateInventoryItemFromSpreadsheetRow(Row row, SharedStringTable sharedStrings)
{
var invItem = new InventoryItemLoadProxy();
var theCells = row.Descendants<Cell>();
var textValues =
from cell in row.Descendants<Cell>()
select(cell.CellValue == null ? string.Empty : ((cell.DataType != null
&& cell.DataType.HasValue
&& cell.DataType == CellValues.SharedString) ? sharedStrings.ChildElements[int.Parse(cell.CellValue.InnerText)].InnerText : cell.CellValue.InnerText));
if(textValues.Any(x => x != string.Empty))
{
var textArray = textValues.ToArray();
invItem.PartNumber = textArray[0].ToStrippedPartNumber();
invItem.DisplayPartNumber = textArray[0];
//More parsing...
}
}
你可以看到我說的,如果它是空只是使它的String.Empty(是的 - 那個瘋狂的LINQ聲明會得到一些點重構)。
希望有人看到過這個,這是一個巨大的障礙!哎呀!
謝謝