使用 Interop.Excel 将 excel 个单元格与 C# 合并
Merge excel cells with C# using Interop.Excel
我想合并几个单元格序列以形成 table header 组。
我保留有关合并单元格值的信息及其在
中的列跨度
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,结果仍然不是我所期望的。
因为我看不到 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;
}
我想合并几个单元格序列以形成 table header 组。
我保留有关合并单元格值的信息及其在
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,结果仍然不是我所期望的。
因为我看不到 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;
}