0

私はOpenXML説明できない奇妙な問題を学び、実行しています。フォーラムの誰かがそれを説明し、解決策を提供できるかもしれません。

次のようなコードを使用して、個々の Excel セルで情報を収集するコードをテストしてきました。

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

workbookすべてのパーツやsheetsなどを既に呼び出したと想定しても問題ありません。

このルーチンを呼び出すと、最近ExcelCell.InnerTextを開いていなくても呼び出すことができ、予期した値が返されます。

しかし、スプレッドシートをExcelで開き、変更を加えてからスプレッドシートを閉じると、Cell.InnerText「29」や「33」などの奇妙な数値が返されます。

誰かが理由を知っていますか?または、OpenXML で Excel からセル値を取得するための別の方法がありますか?

4

2 に答える 2

1

セルには、変更を加えた後、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 に答える