当Excel中有跨文件计算公式时,请问公式的刷新问题。
桌面上有两个Excel文件,A文件中存储学生数据,B文件为报表模板。假设A文件中第一个表名为学生表,A列1至5行的数据为分别为:男、男、女、女、女。
假设B文件中第一个表名为计算表,A1的公式为:=COUNTIF('C:\Users\Administrator\Desktop\学生表'!$A$1:$A$5,"女"),此时公式计算值为3
A2的公式为:=COUNTIF('C:\Users\Administrator\Desktop\学生表'!$A$1:$A$5,"男"),此时公式计算值为2
if (ofdComputationSheetFile.ShowDialog() == DialogResult.OK)
{
pathComputationSheet = ofdComputationSheetFile.FileName; //此处选择桌面上的B.xlsx文件
spreadComputationSheet.OpenExcel(pathComputationSheet, ExcelOpenFlags.TruncateEmptyRowsAndColumns);
}
当A文件中学生表A列的值发生变化时,如修改为:男、男、男、女、女。
此时,B文件中计算表,A1的公式计算值没有发生变化,仍为3。(正确应为2)
A2的公式计算值没有发生变化,仍为2。(正确应为3)
请问程序中如何能刷新加载到Spread控件中的公式计算。
目前spread没有办法
Interop.Excel毕竟和excel本身基本就是一个东西,其实和你手工解决的效果是一样的 本帖最后由 Richard.Ma 于 2022-11-18 17:12 编辑
可以参考一下这里设置看看
https://www.grapecity.com/spread ... in-externalref.html
设置公式后设置下面的代码
fpSpread1.AllowUserFormulas = true; 试过了,还是不行。这个应该不是控件的问题,而是Excel跨文件引用公式计算的问题。现在看了一些资料,还没找到代码解决的方法。
手工解决倒是弄明白了。需要手工打开B文件,点击【数据】——【编辑链接】——【更新值】。
然后上面的代码,加载B文件,跨文件引用公式计算的值就是正确的了。
嗯,那这个确实就没有办法通过控件层面来解决了。 目前用COM组件Microsoft.Office.Interop.Excel,可以代码刷新跨文件引用公式计算的问题了。
// using Microsoft.Office.Interop.Excel;
Application excelComputationSheet = new Application();
Workbook bookComputationSheet = excelComputationSheet.Workbooks.Open(pathComputationSheet);
excelComputationSheet.Visible = true;
excelComputationSheet.AskToUpdateLinks = true;
excelComputationSheet.ScreenUpdating = true;
bookComputationSheet.UpdateRemoteReferences = true;
Array links = bookComputationSheet.LinkSources(XlLink.xlExcelLinks) as Array;
if (links != null)
{
foreach (string strName in links)
{
bookComputationSheet.UpdateLink(strName, XlLinkType.xlLinkTypeExcelLinks);
}
}
bookComputationSheet.RefreshAll();
bookComputationSheet.Save();
bookComputationSheet.Close();
excelComputationSheet.Quit();
spreadComputationSheet.OpenExcel(pathComputationSheet, ExcelOpenFlags.TruncateEmptyRowsAndColumns);
不知道Spread.Net有没有类似的代码刷新机制?原理其实是刷新Microsoft Excel 源的链接。
页:
[1]