大家好,我在使用 Excel.Worksheet.Cells 数组时遇到了转置行为。
我的第一个单元格需要位于[row = 10, column = 3]
我的第二个单元格需要位于[row = 11, column = 17]
然后使用这两个单元格作为边界,我创建一个范围并合并它。从上面提到的值可以看出,范围应该大部分是水平的。因此,为了帮助我,我创建了一个简单的辅助函数来合并单元格:
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 文档一致时,突出显示的单元格被转置。