从Open XML中的行中选择时包含空格

时间:2015-06-25 11:23:39

标签: vb.net openxml

我的Excel看起来像这样

 A    B    C    D
      1    2    3

我用这个,

Dim row As DocumentFormat.OpenXml.Spreadsheet.Row = sheetData.Descendants(Of DocumentFormat.OpenXml.Spreadsheet.Row)().FirstOrDefault(Function(y) y.RowIndex.Value = 1)

我的结果中只有3个单元格(B,C,D)。我如何包含空格?

1 个答案:

答案 0 :(得分:0)

Excel文件仅包含填充了其地址的单元格。空单元格是虚拟的"。

您可以通过地址单元格检查"缺少"细胞是。 要将地址(在" A1"样式中)转换为数字索引,您可以使用此功能(credit:codeproject Article: Read and Write Microsoft Excel with Open XML SDK):

dim regexColName = New Regex("[A-Za-z]+", RegexOptions.Compiled)

Private Function ConvertCellReferenceToNumber(cellReference As String) As Integer
    Dim colLetters = regexColName.Match(cellReference).Value.ToCharArray()
    Array.Reverse(colLetters)

    Dim convertedValue = Asc(colLetters(0)) - 65

    For i = 1 To colLetters.Length - 1
        Dim current = Asc(colLetters(i)) - 64
        convertedValue += current * Math.Pow(26, i)
    Next

    Return convertedValue
End Function

使用此功能可以模拟空单元格:

Dim row As Row = SheetData.Descendants(Of Row)().FirstOrDefault(Function(y) y.RowIndex.Value = 2)

Dim cells = row.Descendants(Of Cell).ToDictionary(
    Function(cell) ConvertCellReferenceToNumber(cell.CellReference),
    function(cell) cell)

For i = 0 To cells.Keys.Max()
    Dim c As Cell
    If (cells.TryGetValue(i, c)) Then
        Console.WriteLine(c.CellValue) 'need hanle for special values 
    Else
        Console.WriteLine("empty")
    End If
Next