Yikes, поэтому я обнаружил, что использование 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 получит переработан в какой-то момент).
Надеюсь, кто-то видел это раньше, это огромный блокпост! YIKES!
Благодаря