跨sheet计算cell值
在处理多个sheet之间的计算时,发现使用FpSpread_Report.Sheets.SetFormula(x, y, "sheet2!A1"); 这样的公式赋值时,刚出来的结果是空,需要切换到sheet2,然后再到sheet1对应的cell里面才有数据有什么办法能在加载之后不用切换到sheet2,直接就能在sheet1上看到数据
自己尝试过使用FpSpread_Report.Sheets.AutoCalculation = true;
FpSpread_Report.Sheets.RecalculateAll();
FpSpread_Report.ClientAutoCalculation = true;
这些都不起作用 回复 1楼seasky083的帖子
根据您当前的信息我并没有重现问题。以下是 Spread 8重现代码,比较简单,新建工程拖拽 spread,添加以下代码即可重现:
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
return;
}
FpSpread1.Sheets.Count = 2;
FpSpread1.Sheets.Cells.Value = 1;
FpSpread1.Sheets.SetFormula(0, 0, "sheet2!A1");
}
如果没能解决问题,请发送重现问题 Demo 到论坛调试。
谢谢 test.Sheets.SetFormula(1, 0, "需关闭帖子!A1");//值为“模块”
第一次进去,确实为空值
demo
切换后才有值 没人回答么,急用 回复 3楼seasky083的帖子
问题重现了,感谢您的反馈,接下来我会反馈给产品组,在收到反馈后第一时间通知你。谢谢
为了感谢您反馈产品问题,给您分发 300 金币。可以用于兑换论坛奖品。
金币规则:点击进入
礼品列表:点击进入 你好,这个东西大概什么时候有个结果,我现在应该是你们的金牌服务了,麻烦尽快解决下 回复 6楼seasky083的帖子
由于产品组在美国受到时差和问题处理先后顺序影响,问题预计明后天后有进一步结果,我这边已经发送了确认邮件。
请问您的公司信息是?我这边在确认您的用户信息后可以把您升级到金牌服务权限。 回复 6楼seasky083的帖子
请尝试以下代码,在设置公式前后关闭和开启 EnableCrossSheetReference属性:
public ActionResult Index(FarPoint.Mvc.Spread.FpSpread test)
{
test.Sheets.Clear();
FpSpread book = new FpSpread();
book.OpenExcel(this.Server.MapPath("test.xlsx"));
int i = 0;
test.EnableCrossSheetReference = false;//turn off this flag before open excel
foreach (FarPoint.Web.Spread.SheetView sheet in book.Sheets)
{
FpSpread bookIn = new FpSpread();
bookIn.Sheets.Add(sheet);
MemoryStream ms = new MemoryStream();
bookIn.SaveExcel(ms);
byte[] b = ms.ToArray();
FarPoint.Web.Spread.SheetView sv = new FarPoint.Web.Spread.SheetView();
sv.SheetName = sheet.SheetName;
test.Sheets.Add(sv);
sv.OpenExcel(new MemoryStream(b), 0);
i++;
}
test.Sheets.Protect = true;
test.Sheets.PageSize = 50;
test.Width = 1200;
test.EnableCrossSheetReference = true;
//test.Sheets.SetFormula(1, 0, "需关闭帖子!A1");//值为“模块”
test.Sheets.Cells.Formula = "需关闭帖子!A1";
test.ClientAutoCalculation = true;
test.Sheets.RecalculateAll();
test.Sheets.RecalculateAll();
test.Sheets.AutoCalculation = true;
test.Sheets.AutoCalculation = true;
return View();
}
单独运行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也是存在的
不清楚这是为什么,能说明下情况么 EnableCrossSheetReference 默认值应该是为true的吧,如果前面没设置为true,对应的源是可以找到的,只要设置了false就不行了,但是不设置又会出现开始加载出来的公式结果为空的现象,只有切换sheet之后才有结果
页:
[1]
2