7

我希望有人可以帮助我使用 ClosedXML,因为我是 Excel 导出的新手,而且从我对 ClosedXML 的了解来看,文档在某些领域相当有限。

目前我正在将数据放入数据表中,将行格式化为正确的类型并使用正确的布局导出。

当我尝试在每个单元格中导出包含重复公式的一行时,就会出现问题。

我试图将公式简单地添加为一个字符串,然后我可以在导出文件时突出显示和转换,这显然不是理想的。我在 XML 中找到了一个类,XLFormula它完全没有文档,但假设我应该对此做些什么。

目前我有(注释掉的是我使用的方式XLFormula,试图将XLFormula公式作为字符串传递并设置为每单位的总出价):

dt.Columns.Add("Qty", typeof(int));
dt.Columns.Add("Bid Per Unit GBP", typeof(double));
dt.Columns.Add("Total Bid GBP"); //typeof(XLFormula)
foreach (DataRow dr in dt.Rows)
{
    //XLFormula totalBidFormula = new XLFormula();

    dr["Qty"] = 1;
    dr["Bid Per Unit GBP"] = 0.00;
    dr["Total Bid GBP"] = "=[@Qty]*[@[Bid Per Unit GBP]]";

任何帮助将不胜感激。如果我想用 ClosedXML 做的事情是不可能的,请告诉我,如果你能建议一个替代的 XML 导出器(即使它是付费的),这会有所帮助!

4

3 回答 3

16

以防万一任何与我处于相同位置的人偶然发现,closedXML 中的公式非常简单。

据我了解,添加值后,公式必须直接应用于单元格。

在处理工作表时,我使用了一个简单的 for 循环来获取当前单元格,因为我需要一整列来保存公式

//get all rows in my datatable 
int totalRows = dt.Rows.Count;

//set the first that will be filled with data
int currentRow = 1;

//loop through each row.
for(int i = 0; i < totalRows; i++){

//the current cell will be whatever column you wish to format + the current row
string currentCell = "F" + currentRow;

//create your formula
string AdjustedPriceFormula = "=C" + currentRow + "*" + "D" + currentRow;

//apply your formula to the cell.
theSheet.Cells(currentCell).FormulaA1 = AdjustedPriceFormula;

//increment your counters to apply the same data to the following row
currentRow++

从那以后,这对我有用多次,并将多个公式添加到多个列/单元格。

希望这可以帮助某人!

于 2015-10-05T14:01:13.587 回答
1

对@Lovethenakedgun 引用的引用的附加评论:

尚不支持表列引用。请使用正常的 A1 样式参考。

. 据我了解,这仍然是正确的,但有一个解决方法。如果您查看包含表格的 sheet.xml 文件,您将看到表格样式引用被转换为类似的内容:

"Table1[[#This Row],[testedName]]"

现在,您实际上可以在 FormulaA1 属性的代码中使用它,就像我在下面所做的那样(在 F# 中,tb只是一个表对象......):

tb.Name <- "Table1"
tb.Field(0).Name <- "testedName"
tb.Row(2).Cell(2).FormulaA1 <- "Table1[[#This Row],[testedName]]"
tb.Row(3).Cell(2).FormulaA1 <- "Table1[[#This Row],[testedName]]"
tb.Row(4).Cell(2).FormulaA1 <- "Table1[[#This Row],[testedName]]"

这将被翻译成工作簿中的 [@testedName]。不过,你必须像我一样在每一行单独做。

于 2020-08-05T21:32:08.827 回答
1

我在调试您遇到的相同问题时遇到了这篇文章。浏览了有关 ClosedXML Github 问题跟踪器的一些评论,并在此线程上看到了评论

尚不支持表列引用。请使用正常的A1样式参考。

如果您愿意,您也可以使用较旧的“R1C1”样式引用,但要实现您想要的,您将使用类似于:

dr["Total Bid GBP"].FormulaR1C1 = "=RC[-2]*RC[-1]";

于 2018-09-24T10:00:58.117 回答