0

我正在学习OpenXML并遇到一个我无法解释的奇怪问题,也许论坛上的某个人可以解释它并提供解决方案。

我一直在测试一些代码来收集单个 Excel 单元格中的信息,使用如下所示的一些代码:

Cell theCell = wsPart.Worksheet.Descendants<Cell>().
            Where(c => c.CellReference == "F4").FirstOrDefault();
            if (theCell != null)
            {
                cellvalue = theCell.InnerText;
                ....

可以安全地假设我已经调用了我所有的workbook部分和sheets等。

当我调用这个例程并且我最近没有打开Excel时,我可以调用Cell.InnerText它并返回我期望的值。

但是,如果我用Excel打开电子表格,进行更改,然后关闭电子表格,调用Cell.InnerText会返回一些奇怪的东西,比如“29”或“33”之类的数字。

有谁知道为什么?或者也许有不同的选择来从 OpenXML 中的 Excel 获取单元格值?

4

2 回答 2

1

我猜在您进行更改后,您在 Cell 中输入了 CellValues.SharedString (theCell.DataType)。SharedStringTable 的该类型返回索引。要阅读 SharedStringTable 使用该代码:

Dim stringTablePart As SharedStringTablePart = WorkbookPart.GetPartsOfType(Of SharedStringTablePart).FirstOrDefault()
If stringTablePart IsNot Nothing Then
    For Each item As SharedStringItem In stringTablePart.SharedStringTable.Elements(Of SharedStringItem)()
        Dim text as string = item.InnerText
    Next
End If

我希望这对你有帮助。

于 2014-07-11T05:25:22.370 回答
0

“或者,在 OpenXML 中从 Excel 获取单元格值可能有不同的选择?” 是的。单元格具有值标签:<v>。此标签包含整数。如果您的单元格包含整数,则此标记包含此值。但是,如果您的单元格包含字符串,则此标记包含来自 xl\sharedStrings.xml 部分的字符串索引,这里存储的是原始单元格值,因此该值包含与您的单元格值不同的值。我猜当您使用 Excel 重新保存电子表格时,它会重组您的文档,并且只要字符串在 xl\sharedStrings.xml 部分中更改了索引,就可以更改值。

于 2012-11-15T14:27:57.693 回答