我想合并几个单元格序列以形成表头分组 我保留了有关合并单元格值和它的列跨度的信息
List<Tuple<string, int>>
这是我到目前为止所做的:
appExcel.DisplayAlerts = false;
int columnCellIndex = 1;
foreach(var captionGroupInfo in extraCaptionGroupings)
{
Microsoft.Office.Interop.Excel.Range currRange = newWorksheet.Range[newWorksheet.Cells[1, columnCellIndex],
newWorksheet.Cells[1, columnCellIndex + captionGroupInfo.Item2]];
currRange.Value2 = captionGroupInfo.Item1;
currRange.Select();
currRange.Merge(Missing.Value);
columnCellIndex += captionGroupInfo.Item2;
}
}
所以而不是:
| || Dog 1 || Dog 2 || Cat || Hamster 1 || Hamster 2 ||
--------------------------------------------------------------------------------------
| Id ||Name|Owner|Age||Name|Owner|Age||Name|Owner|Age||Nam|Owner|Age||Name|Owner|Age||
我得到了
| Dogs |
| Id ||Name|Owner|Age|Name|Owner|Age||Name|Owner|Age||Nam|Owner|Age|Name|Owner|Age||
似乎合并了所有单元格.1 我有什么想法我做错了吗?即使我将columnCellIndex仅增加1,结果仍然不是我所期望的。
答案 0 :(得分:1)
由于我无法看到来自captionGroupInfo.Item2
的值是什么,我在这里猜测。从您显示的输出,我猜你不是要合并第一列。它看起来像一个非合并列。所以当你设置columnCellIndex = 1时;然后你从第一列开始。所以我将起始列索引更改为2,因为这似乎是您要开始合并单元格的位置。然后,在获取合并范围时,我将结束列索引值减1。否则范围将是一对多,因为我们从第2列开始而不是第1列。通过这些更改,当我测试来自captionGroupInfo.Item2
的返回值时它工作正常,其中3个单元合并,3个单元合并,5个单元合并,5,等等。这些变化与预期一致。希望这会有所帮助。
int columnCellIndex = 2;
foreach (var captionGroupInfo in extraCaptionGroupings)
{
Microsoft.Office.Interop.Excel.Range currRange = newWorksheet.Range[newWorksheet.Cells[1, columnCellIndex],
newWorksheet.Cells[1, columnCellIndex + captionGroupInfo.Item2 - 1]];
currRange.Value2 = captionGroupInfo.Item1;
currRange.Select();
currRange.Merge(Missing.Value);
columnCellIndex += captionGroupInfo.Item2;
}