使用Interop.Excel

时间:2016-11-25 07:53:39

标签: c# excel excel-interop

我想合并几个单元格序列以形成表头分组 我保留了有关合并单元格值和它的列跨度的信息

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,结果仍然不是我所期望的。

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