gpt4 book ai didi

excel - 我们如何在从 .rdlc 导出到 Excel 时包含单元格公式

转载 作者:行者123 更新时间:2023-12-02 16:38:55 25 4
gpt4 key购买 nike

在我的 rdlc 报告中,有以下列

SlNo, Item, Uom, Qty, Rate, Amount

这里的Amount字段是一个公式(Rate*Qty)

该报告工作正常,当我导出到 Excel 时,也显示正确的值。但我的问题是,导出到 Excel 后,当我更改 Excel 文件中的 QtyRate 列时,Amount 不会自动更改,因为excel单元格中缺少公式。当从 .rdlc 导出到 Excel 时,如何在 Amount 列中包含公式?

最佳答案

恐怕仅仅使用 rdlc 渲染就不可能实现这种所需的行为。

在我的搜索中,我偶然发现了 QHarr 发布的相同链接:https://social.msdn.microsoft.com/Forums/en-US/3ddf11bf-e10f-4a3e-bd6a-d666eacb5ce4/report-viewer-export-ms-report-data-to-excel-with-formula?forum=vsreportcontrols
我还没有尝试过他们建议的项目,但如果它有效的话,这可能是您最好的解决方案。不幸的是,我没有时间亲自测试它,所以如果您对此进行测试,请分享您的结果。

<小时/>

我想到了以下解决方法,它似乎在大多数情况下都有效,但实际上并不那么可靠,因为公式有时会显示为全文而不是被计算。但我想这可以通过在导出后编辑 Excel 文件并更改包含公式的该列的单元格属性或仅触发计算来解决。

使用内置字段Globals!RenderFormat.Name您可以确定呈现模式,这样当报表呈现为不同于 Excel 的内容时,您可以正确显示结果。导出到 Excel 时,您可以将单元格的值更改为实际公式。
要形成它自己的公式,您需要自己解决这个问题,但是 RowNumber(Scope as String)此处可以使用函数来确定单元格的行号。

以下是金额列的表达式值的可能示例

=IIF(Globals!RenderFormat.Name LIKE "EXCEL*", "=E" & Cstr(RowNumber("DataSet1")+2) & "*F" & Cstr(RowNumber("DataSet1")+2) ,Fields!Rate.Value * Fields!Qty.Value )

现在考虑到此公式有时会显示为全文,您可能必须在渲染后编辑文件。如果确定单元格位于哪一行/哪列太复杂,您也可以进行此后渲染。但我相信上面的表达式应该足够容易使用来获得你想要的结果,而无需在渲染后做太多事情。

<小时/>

更新:以下代码可用于强制计算公式(渲染后)

var fpath = @"C:\MyReport.xlsx";
using (var fs = File.Create(fpath))
{
var lr = new LocalReport();
//Initializing your reporter
lr.ReportEmbeddedResource = "MyReport.rdlc";

//Rendering to excel
var fbytes = lr.Render("Excel");
fs.Write(fbytes, 0, fbytes.Length);
}

var xlApp = new Microsoft.Office.Interop.Excel.Application() { Visible = false };
var wb = xlApp.Workbooks.Open(fpath);
var ws = wb.Worksheets[1];
var range = ws.UsedRange;
foreach (var cell in range.Cells)
{
var cellv = cell.Text as string;
if (!string.IsNullOrWhiteSpace(cellv) && cellv.StartsWith("="))
{
cell.Formula = cellv;
}
}
wb.Save();
wb.Close(0);
xlApp.Quit();

关于excel - 我们如何在从 .rdlc 导出到 Excel 时包含单元格公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48199936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com