【问题标题】:Excel formula is displayed as text upon exporting using SpreadsheetGearExcel 公式在使用 SpreadsheetGear 导出时显示为文本
【发布时间】:2017-08-05 01:31:31
【问题描述】:

我有一个模板,我需要将数据填充到动态生成的范围中,每个范围包含 23 列。 另外我正在使用数据表将数据填充到范围中。

公式也是为每一列和每一行动态生成的:

"=IF(COUNT(" + prefix + "J" + rowNum + ":" + prefix + "L" + rowNum + ")>0," + prefix + "J" + rowNum + "+" + prefix + "K" + rowNum + "+" + prefix + "L" + rowNum + ",\"\")";

当值被动态应用时,上面的公式将如下所示:

=IF(COUNT(J12:L12)>0,J12+K12+L12,"")

在上面的公式中,prefix 是我将动态确定和替换的列名,rowNum 是每一行的迭代值,也是确定和替换的。

我在这里面临的问题是公式是动态生成的,并放置在 excel 中的所需列中,但作为文本放置。如果我按“F2”然后按 Enter,则会应用公式。

注意:我已经检查并验证=

之前没有空格

之前:

之后:

我什么都没做,我只是按 F2 进入公式,然后按 Enter 键,公式就会被应用

我尝试了各种选择,例如

R1C1
R1C1local
ShowFormulas
Ctrl + ' issue

由于我有超过 100 列和无限行要计算,我无法转到每个范围并将范围设置为公式然后计算。

我已经应用了一个宏代码 OnWorkbookOpen 来应用公式,我只是想知道有没有什么方法可以使用 SpreadsheetGear 而无需宏代码来实现。

【问题讨论】:

    标签: c# excel spreadsheetgear


    【解决方案1】:

    如果您提供与 SpreadsheetGear 相关的例程以查看该代码中是否存在任何问题,将会有所帮助。

    既然您提到使用 DataTables,我猜您正在使用 IRange.CopyFromDataTable(...) 方法。鉴于公式被视为文本,我还猜测您正在传递 SetDataFlags.AllText 选项。

    如果是这种情况,您将看到此 AllText 标志的预期行为,因为您的 DataTable 中的 所有 值将被视为文本,包括公式。您需要停止使用AllText 选项来防止这种情况发生。

    【讨论】:

    • 感谢您提供的回复。值得一提的是,是的,我使用过 IRange.CopyFromDataTable 和 SetDataFlags.AllText。如果我使用 SetDataFlags.InsertCells 那么它坚持我只使用 2 列。但是我在每个范围中有 13 个公式列,其中包含 42 列。请为此提供解决方案。
    • SetDataFlags.InsertCells 没有要求使用 2 列,所以我不知道你从哪里得到这个。 InsertCells 确实需要 2 行(如果您还使用标题行,可能需要 3 行)。这些行应预先格式化(即指定样式/ NumberFormat / 等),以便 CopyFromDataTable(...) 可以使用这些格式将 DataTable 内容复制到源自您指定的 2 行的新行中。您是否阅读过 IRange.CopyFromDataTable(...) 和 SetDataFlags 的文档(参见上面的链接)?它应该详细解释所有这些。
    • 它起作用了@Tim Andersen,AllText 导致了这个问题。而且由于我使用的是 Guid,当我从 AllText 更改为 InsertCells/NoColumnHeader/None 等时,它在数据表中造成了麻烦。我将 Guid 转换为字符串,瞧!有效。谢谢你的回答。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 2018-11-21
    • 1970-01-01
    • 2023-02-02
    相关资源
    最近更新 更多