找回密码
 立即注册

QQ登录

只需一步,快速开始

seasky083

银牌会员

7

主题

39

帖子

2360

积分

银牌会员

积分
2360

活字格认证微信认证勋章元老葡萄

[已处理] 跨sheet计算cell值

seasky083
银牌会员   /  发表于:2015-3-17 16:26  /   查看:10940  /  回复:17
在处理多个sheet之间的计算时,发现使用FpSpread_Report.Sheets[0].SetFormula(x, y, "sheet2!A1"); 这样的公式赋值时,刚出来的结果是空,需要切换到sheet2,然后再到sheet1对应的cell里面才有数据
有什么办法能在加载之后不用切换到sheet2,直接就能在sheet1上看到数据

自己尝试过使用FpSpread_Report.Sheets[0].AutoCalculation = true;
FpSpread_Report.Sheets[0].RecalculateAll();
FpSpread_Report.ClientAutoCalculation = true;
这些都不起作用

评分

参与人数 1金币 +300 收起 理由
iceman + 300 提交产品问题

查看全部评分

17 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2015-3-17 16:42:00
沙发
回复 1楼seasky083的帖子

根据您当前的信息我并没有重现问题。以下是 Spread 8重现代码,比较简单,新建工程拖拽 spread,添加以下代码即可重现:

  1.         protected void Page_Load(object sender, EventArgs e)
  2.         {
  3.             if (IsPostBack)
  4.             {
  5.                 return;
  6.             }
  7.             FpSpread1.Sheets.Count = 2;
  8.             FpSpread1.Sheets[1].Cells[0, 0].Value = 1;
  9.             FpSpread1.Sheets[0].SetFormula(0, 0, "sheet2!A1");
  10.         }
复制代码


如果没能解决问题,请发送重现问题 Demo 到论坛调试。
谢谢
回复 使用道具 举报
seasky083
银牌会员   /  发表于:2015-3-17 17:07:00
板凳
test.Sheets[0].SetFormula(1, 0, "需关闭帖子!A1");//值为“模块”

第一次进去,确实为空值
1.jpg (36.29 KB, 下载次数: 469)
回复 使用道具 举报
seasky083
银牌会员   /  发表于:2015-3-18 10:38:00
地板
没人回答么,急用
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-3-18 12:11:00
5#
回复 3楼seasky083的帖子

问题重现了,感谢您的反馈,接下来我会反馈给产品组,在收到反馈后第一时间通知你。谢谢

为了感谢您反馈产品问题,给您分发 300 金币。可以用于兑换论坛奖品。
金币规则:点击进入
礼品列表:点击进入
回复 使用道具 举报
seasky083
银牌会员   /  发表于:2015-3-23 10:01:00
6#
你好,这个东西大概什么时候有个结果,我现在应该是你们的金牌服务了,麻烦尽快解决下
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-3-23 11:07:00
7#
回复 6楼seasky083的帖子

由于产品组在美国受到时差和问题处理先后顺序影响,问题预计明后天后有进一步结果,我这边已经发送了确认邮件。

请问您的公司信息是?我这边在确认您的用户信息后可以把您升级到金牌服务权限。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-3-26 11:58:00
8#
回复 6楼seasky083的帖子

请尝试以下代码,在设置公式前后关闭和开启 EnableCrossSheetReference  属性:

  1. public ActionResult Index([FarPoint.Mvc.Spread.MvcSpread(true)]FarPoint.Mvc.Spread.FpSpread test)
  2.         {
  3.             test.Sheets.Clear();

  4.             FpSpread book = new FpSpread();

  5.             book.OpenExcel(this.Server.MapPath("test.xlsx"));
  6.             int i = 0;
  7.             test.EnableCrossSheetReference = false;//turn off this flag before open excel
  8.             foreach (FarPoint.Web.Spread.SheetView sheet in book.Sheets)
  9.             {
  10.                 FpSpread bookIn = new FpSpread();
  11.                 bookIn.Sheets.Add(sheet);
  12.                 MemoryStream ms = new MemoryStream();
  13.                 bookIn.SaveExcel(ms);

  14.                 byte[] b = ms.ToArray();

  15.                 FarPoint.Web.Spread.SheetView sv = new FarPoint.Web.Spread.SheetView();
  16.                 sv.SheetName = sheet.SheetName;
  17.                 test.Sheets.Add(sv);

  18.                 sv.OpenExcel(new MemoryStream(b), 0);

  19.                 i++;
  20.             }
  21.             test.Sheets[0].Protect = true;
  22.             test.Sheets[0].PageSize = 50;
  23.             test.Width = 1200;
  24.             test.EnableCrossSheetReference = true;

  25.             //test.Sheets[0].SetFormula(1, 0, "需关闭帖子!A1");//值为“模块”
  26.             test.Sheets[0].Cells[1, 0].Formula = "需关闭帖子!A1";
  27.             test.ClientAutoCalculation = true;
  28.             test.Sheets[0].RecalculateAll();
  29.             test.Sheets[1].RecalculateAll();
  30.             test.Sheets[0].AutoCalculation = true;
  31.             test.Sheets[1].AutoCalculation = true;
  32.             return View();
  33.         }
复制代码
回复 使用道具 举报
seasky083
银牌会员   /  发表于:2015-3-30 09:33:00
9#
单独运行demo可以使用,但是我这边的情况是从数据库取出多个sheet,然后用sheetview添加到spread

                FpSpread_Report.EnableCrossSheetReference = false;

                FarPoint.Web.Spread.SheetView sheetView = new FarPoint.Web.Spread.SheetView();
                sheetView.SheetName = _ReportTemplate_En.FileName;
                FpSpread_Report.Sheets.Add(sheetView);
                sheetView.OpenExcel(new MemoryStream(_ReportTemplate_En.TemplateFile), 0);

在这个之前使用了你的EnableCrossSheetReference = false

然后sheet加载完成之后,对其中一个单元格做Formula(sheet1!A1)的赋值操作,就会找不到对应源(找不到sheet1),但是spread中是有两个sheet的,sheet1也是存在的
不清楚这是为什么,能说明下情况么
回复 使用道具 举报
seasky083
银牌会员   /  发表于:2015-3-30 09:38:00
10#
EnableCrossSheetReference 默认值应该是为true的吧,如果前面没设置为true,对应的源是可以找到的,只要设置了false就不行了,但是不设置又会出现开始加载出来的公式结果为空的现象,只有切换sheet之后才有结果
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部