使用 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;
}