Excel.Worksheet.Cells 配列を操作しているときに、転置された動作が発生しています。
最初のセルは[row = 10, column = 3]
にある必要があります 2 番目のセルは[row = 11, column = 17]にある必要があります
次に、これら 2 つのセルを境界として使用して、範囲を作成し、結合します。上記の値からわかるように、範囲はほぼ水平である必要があります。そこで、私を助けるために、セルをマージする簡単なヘルパー関数を作成しました。
public static void MergeRange(Excel.Worksheet worksheet, int startRowIdx,
int startColIdx, int endRowIdx, int endColIdx, bool across = false)
{ //Get range boundaries.
Excel.Range cells = worksheet.Cells;
//commented out, resolved code is directly below - N. Miller, 9-24-2013
//Excel.Range topleftCell = cells[startColIdx][startRowIdx];
//Excel.Range bottomrightCell = cells[endColIdx][endRowIdx];
Excel.Range topleftCell = cells[startRowIdx, startColIdx];
Excel.Range bottomrightCell = cells[endRowIdx, endColIdx];
//Merge range.
Debug.WriteLine(String.Format("({0}, {1}) to ({2}, {3}).", startRowIdx, startColIdx, endRowIdx, endColIdx));
Excel.Range range = worksheet.get_Range(topleftCell, bottomrightCell);
Excel.Interior interior = range.Interior;
interior.ColorIndex = XLColor.PERIWINKLE; //JUST HIGHLIGHTS RANGE FOR NOW.
//range.Merge(across);
//Cleanup
Marshal.ReleaseComObject(interior);
Marshal.ReleaseComObject(range);
Marshal.ReleaseComObject(bottomrightCell);
Marshal.ReleaseComObject(topleftCell);
Marshal.ReleaseComObject(cells);
}
上記のコードでは、列と行を入れ替えて必要なセルを選択しています。これは、予想に反して、望ましい動作をもたらしますが、MSDN のドキュメントと矛盾しています。
MSDNのドキュメントでは、行が最初にリストされ、次に列が続く例が示されています。
だから私の質問はこれです...どれが正しいですか?行を最初にする必要がありますか、それとも列を最初にする必要がありますか ? MSDN ドキュメントと一致するようにコードを変更すると、強調表示されたセルが転置されます。