C# 缺少使用OpenXml解析Excel文件的列

C# 缺少使用OpenXml解析Excel文件的列,c#,openxml,C#,Openxml,我发现使用OpenXml时,我的列并不总是排成一行。例如,看看这个例子 这是标题行 第37列=仅交换 第38列=现有数量 第39列=成本法 第40列=成本法金额 现在,在下一行中,在37和38中都有实际数据的那一行是空的,但它省略了第38列。我的数据是这样的 第37列=应为空 第38列=设置金额应为空,因为它应与“现有数量”对齐 第39列=0 注意,它去掉了真正的列/单元格38,现在我的解析器不再对齐。37和38都是空的,但不会丢失37 下面是一些代码来说明我是如何使用字符串数组的——它实际上只

我发现使用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...
         }
    }

你可以看到我的意思是,如果它是null,就让它成为string.empty是的-那个疯狂的linq语句在某个时候会被重构。

因为其他人已经回答了这个问题。看见我使用了一种更为野蛮和无知的方法,尽管一旦有机会从另一个答案对代码进行单元测试,我可能会进行重构。不过,这满足了我目前的需要

private int GetIndexFromCellRef(Cell cell)
        {
            var colname = cell.CellReference.Value;
            colname = Regex.Replace(colname, "[0-9]", "");
            var indexList = new Dictionary<string, int>
                {
                    {"A", 0},
                    {"B", 1},
                    {"C", 2},
                    {"D", 3},
                    {"E", 4},
                    {"F", 5},
                    {"G", 6},
                    {"H", 7},
                    {"I", 8},
                    {"J", 9},
                    {"K", 10},
                    {"L", 11},
                    {"M", 12},
                    {"N", 13},
                    {"O", 14},
                    {"P", 15},
                    {"Q", 16},
                    {"R", 17},
                    {"S", 18},
                    {"T", 19},
                    {"U", 20},
                    {"V", 21},
                    {"W", 22},
                    {"X", 23},
                    {"Y", 24},
                    {"Z", 25},
                    {"AA", 26},
                    {"AB", 27},
                    {"AC", 28},
                    {"AD", 29},
                    {"AE", 30},
                    {"AF", 31},
                    {"AG", 32},
                    {"AH", 33},
                    {"AI", 34},
                    {"AJ", 35},
                    {"AK", 36},
                    {"AL", 37},
                    {"AM", 38},
                    {"AN", 39},
                    {"AO", 40},
                    {"AP", 41},
                    {"AQ", 42},
                    {"AR", 43},
                    {"AS", 44},
                    {"AT", 45},
                    {"AU", 46},
                    {"AV", 47},
                    {"AW", 48},
                    {"AX", 49},
                    {"AY", 50},
                    {"AZ", 51},
                    {"BA", 52},
                    {"BB", 53},
                    {"BC", 54},
                    {"BD", 55},
                    {"BE", 56},
                    {"BF", 57},
                    {"BG", 58},
                    {"BH", 59},
                    {"BI", 60},
                    {"BJ", 61},
                    {"BK", 62},
                    {"BL", 63},
                    {"BM", 64},
                    {"BN", 65},
                    {"BO", 66},
                    {"BP", 67},
                    {"BQ", 68}
                };

            if (indexList.ContainsKey(colname))
                return indexList.First(x => x.Key.Equals(colname)).Value;
            return -1;
        }