c# - EPPlus 创建的 Excel 表不会将公式传播到新行

标签 c# .net excel epplus

我正在使用 EPPlus 4.5.3.1 创建 Excel 工作簿。它包含一个工作表和一个包含数据的 Excel 表。

要求用户能够向表中添加新行(在 Excel 中,可以通过右键单击行并选择“插入”>“新行”,或按右下单元格中的 Tab 键来完成)表)。

我似乎无法让 EPPlus 生成的工作簿将列中的公式传播到 Excel 表格中生成的新行。如果我手动创建相同的工作簿,则会传播公式。

我尝试通过多种方式将公式分配给列的范围,如下面的示例所示。

这是一个最小的示例(控制台应用程序)。这将创建工作簿。在 Excel 中打开时,当用户在表中创建新行时,最右列中的公式不会传播到新行。

我的问题是,这是 EPPlus 的限制,还是我错过了一些会表现出表列中的公式传播到该表中创建的新行的行为?

using System.Collections.Generic;
using System.IO;
using System.Linq;
using OfficeOpenXml;
using OfficeOpenXml.Table;

namespace EPPlusTests
{
    class Program
    {
        static void Main(string[] args)
        {
            List<ExampleData> exampleDatas = new List<ExampleData>();
            exampleDatas.Add(new ExampleData() { PersonName = "Tom", PersonAge = 44 });
            exampleDatas.Add(new ExampleData() { PersonName = "Richard", PersonAge = 37 });
            exampleDatas.Add(new ExampleData() { PersonName = "Harry", PersonAge = 41 });

            ExcelPackage package = new ExcelPackage();
            ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Testing");
            worksheet.Cells.LoadFromCollection(exampleDatas, true, TableStyles.Dark1);

            var col = worksheet.Cells.First(x => x.Value.ToString() == "TheFormula").Start.Column;
            //worksheet.Cells[2, col, worksheet.Dimension.End.Row, col].FormulaR1C1 = "2*RC[-1]"; // nope
            worksheet.Cells["C2:C4"].FormulaR1C1 = "2*RC[-1]"; // nope

            package.SaveAs(new FileInfo("C:\\Temp\\EPPlusTestFormula.xlsx"));
        }
    }

    class ExampleData
    {
        public string PersonName { get; set; }
        public int PersonAge { get; set; }
        public string TheFormula { get; set; }
        public ExampleData() { }
    }
}

最佳答案

好吧,结果非常简单。解决方案不是寻址单元格区域,而是寻址表中的列对象,并使用 .CalculatedColumnFormula 分配公式。我不知道您是否可以使用 R1C1 来实现此目的,您可能需要使用特定于表的公式语法。

以下是适用于上面示例的内容:

ExcelTable table = worksheet.Tables[0];
table.Columns[2].CalculatedColumnFormula = "2*Table1[[#This Row],[PersonAge]]";

也许一些更协调一致的谷歌搜索最初会让我到达那里。我在代码here中找到了答案.

关于c# - EPPlus 创建的 Excel 表不会将公式传播到新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55931043/

相关文章:

c# - 您如何验证对象的内部状态?

c# - 如何在EntityFramework中建立一对一关系?

c# - 是否可以将 FolderBrowserDialog.RootFolder 设置为字符串中的任意路径?

php - 如何将SQL中的第一列更改为文本格式到XLS?

c# - EPPlus 显示系统参数异常

c# - ASP.NET MVC 中的动态路由操作名称

c# - 通过遍历数组创建 KeyValuePair 列表

c# - 如何在列表和字典之间进行左连接?

.net - D8045 : cannot compile C file 'serialcommands.c' with the/clr option

php - 如何解决 "Allowed memory size exhausted"错误?