找回密码
 立即注册

QQ登录

只需一步,快速开始

今晚打老虎

注册会员

1

主题

3

帖子

6

积分

注册会员

积分
6
  • 30

    金币

  • 1

    主题

  • 3

    帖子

最新发帖
今晚打老虎
注册会员   /  发表于:2022-11-18 15:57  /   查看:1814  /  回复:5
1金币
桌面上有两个Excel文件,A文件中存储学生数据,B文件为报表模板。

假设A文件中第一个表名为学生表,A列1至5行的数据为分别为:男、男、女、女、女。
假设B文件中第一个表名为计算表,A1的公式为:=COUNTIF('C:\Users\Administrator\Desktop\[a.xlsx]学生表'!$A$1A$5,"女"),此时公式计算值为3
                                                     A2的公式为:=COUNTIF('C:\Users\Administrator\Desktop\[a.xlsx]学生表'!$A$1A$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本身基本就是一个东西,其实和你手工解决的效果是一样的

5 个回复

倒序浏览
最佳答案
最佳答案
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-11-18 15:57:23
来自 6#
目前spread没有办法

Interop.Excel毕竟和excel本身基本就是一个东西,其实和你手工解决的效果是一样的
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-11-18 16:51:35
2#
本帖最后由 Richard.Ma 于 2022-11-18 17:12 编辑

可以参考一下这里设置看看

https://www.grapecity.com/spread ... in-externalref.html

设置公式后设置下面的代码
fpSpread1.AllowUserFormulas = true;
回复 使用道具 举报
今晚打老虎
注册会员   /  发表于:2022-11-18 17:46:17
3#
试过了,还是不行。这个应该不是控件的问题,而是Excel跨文件引用公式计算的问题。现在看了一些资料,还没找到代码解决的方法。


手工解决倒是弄明白了。需要手工打开B文件,点击【数据】——【编辑链接】——【更新值】。

然后上面的代码,加载B文件,跨文件引用公式计算的值就是正确的了。
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-11-18 18:13:17
4#
嗯,那这个确实就没有办法通过控件层面来解决了。
回复 使用道具 举报
今晚打老虎
注册会员   /  发表于:2022-11-18 18:15:21
5#
目前用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 源的链接。

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部