5

OpenXml仕様によると、CellReferenceはオプションです。しかし、セルの位置を取得する別の方法はありますか?

たとえば、次のような方法で行のセルを取得できます。

foreach (Row r in sheetData.Elements<Row>())
{
    foreach (Cell c in r.Elements<Cell>())
    {
        Console.WriteLine(c.CellReference);
    }
} 

しかし、CellReferenceがないと、セルの位置をどのように知ることができますか?

私はいくつかの調査を行いましたが、すべてのソリューションは、セルのCellReferenceを特定の文字列と比較することに依存しているようです。

4

1 に答える 1

10

CellReferenceが欠落している場合、Excelは「先着順」の原則を使用するため、CellReferenceはオプションです(ちなみに、これは正式な用語ではありません)。

すべてのCellクラスにCellReferenceプロパティがない場合は、ExcelがRowクラスとCellクラスに遭遇した順序に基づいて解析します。

SheetDataクラスにある1番目のRowクラス(RowIndexもオプションのプロパティであることに注意してください)は、行インデックス1を持っていると見なされます。また、その行の1番目のCellクラスは、CellReference "A1"を持っていると見なされます(セルにはCellReferenceが割り当てられていません)。また、その行の2番目のCellクラスには、CellReference"B1"があると見なされます。などなど。

次のRowクラス(RowIndexプロパティも割り当てられていない場合)は2番目の行と見なされます。

基本的に、すべてのRowIndexプロパティとCellReferenceプロパティが欠落している場合、すべてのCellクラスがワークシートの左上隅にまとめられます。

仮に、3つの未割り当てのRowIndex-ed Rowクラスがあり、次のRowクラスのRowIndexが8の場合、これは有効なワークシートです。ワークシートの最初の3行に最初の3行のデータがあり(予想どおり)、ワークシートの8行目に「4番目」の行クラス(RowIndexが8)があります。

于 2012-11-02T13:05:44.430 に答える