使用 OfficeOpenXml 合并 excel 中的单元格

Merge cells in excel using OfficeOpenXml

我正在通过 x++ 使用 OfficeOpenXml Api 创建一个 excel 文档,但我不知道如何合并单元格(特别是列)。我已经找到了如何使用 COM 来完成它,有一种方法可以使用提到的 Api?

如果使用 Merge cells using EPPlus? 中的解决方案,则会显示 Invalid token '.'. 编译器错误:

CustTableWorksheet.Cells["B1:D1"].Merge = true;

在 x++ 中使用 .NET 库有时会很棘手,这就是为什么有关于差异的文档:.NET Interop from X++X++ and C# comparison 也可能感兴趣)。

查看其他示例如何在 , e.g. in class CustCollectionsExcelStatement, I noticed that instead of the Cells["address"] syntax to determine a cell range, method get_Item is used instead. This is because .NET arrays have restricted support in x++ (see How to: Use X++ Syntax for CLR Arrays 中使用 EEPlus 库以获取更多信息)。

所以我将语句重写为

CustTableWorksheet.get_Item("B1:D1").Merge = true;

不幸的是,这会导致其他编译器错误。经过进一步的试验和错误后,我得到了以下结果:

ExcelRange cells = worksheet.Cells.get_Item("B1:D1");
cells.Merge = true;

我没有这方面的来源,但我认为这是因为链接 .NET 对象的多个表达式会导致 x++ 出现问题。

这是我的完整测试示例代码:

using OfficeOpenXml;

class CreateExcelWithMergedCells
{
    public static void main(Args _args)
    {
        using (System.IO.MemoryStream stream = new System.IO.MemoryStream())
        {
            using (var package = new ExcelPackage(stream))
            {
                ExcelWorksheet worksheet = package.Workbook.Worksheets.Add('Merged cells');
            
                ExcelRange cell = worksheet.Cells.get_Item('B1');
                cell.Value = 'Hello World';

                ExcelRange cells = worksheet.Cells.get_Item('B1:D1');
                cells.Merge = true;
            
                package.Save();
            }
            File::SendFileToUser(stream, 'Merged cells demo.xlsx');
        }
    }
}

这就是生成的 Excel 文件的样子: