【问题标题】:Merge cells in excel using OfficeOpenXml使用 OfficeOpenXml 合并 Excel 中的单元格
【发布时间】:2021-11-02 12:36:40
【问题描述】:

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

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

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

【问题讨论】:

标签: excel microsoft-dynamics epplus x++


【解决方案1】:

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

查看其他一些如何在 中使用 EEPlus 库的示例,例如在CustCollectionsExcelStatement 类中,我注意到不是使用Cells["address"] 语法来确定单元格范围,而是使用方法get_Item。这是因为 .NET 数组在 x++ 中的支持受到限制(有关详细信息,请参阅 How to: Use X++ Syntax for CLR Arrays)。

所以我把语句改写为

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 文件的样子:

【讨论】:

  • 解决了!谢谢你,很有帮助
猜你喜欢
  • 1970-01-01
  • 2010-10-06
  • 2015-10-12
  • 2015-07-02
  • 1970-01-01
  • 2018-03-30
  • 2013-11-23
  • 1970-01-01
相关资源
最近更新 更多