むとファイルの構文解析の列がありませんので、私は私のOpenXml列を使用すると、常に並ばないことを発見しました。例えばこれは、ヘッダ行 カラム37 =「交換のみ」 カラムでは、ExcelがのOpenXml
この例を見て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...
}
}
あなたが、私はそれがnullだ場合だけString.Emptyのそれを作ると言っています見ることができます(ええ - その狂気のLINQ文がある時点でリファクタリングされます)。
うまくいけば、誰かが前にこれを見ている、それは巨大なバリケードです! YIKES!
おかげ