seasky083 发表于 2015-3-30 09:44:00

$(function () {
   setTimeout(function () {
         document.getElementById('FpSpread_Report').Update();
   }, 90);
});
现在没办法,只能前台加载完成之后刷新一次,但是会影响效果和效率

iceman 发表于 2015-3-30 14:16:00

回复 11楼seasky083的帖子

经产品组确认,该问题是 Spread 产品bug,在后续版本中会修复。
您9#中描述的问题我这边没有重现,能否提供Demo过来,我们这边重现后看能否提供给您 work around 暂时解决使用问题。

seasky083 发表于 2015-3-30 15:18:00


附件如上,麻烦尽快解决问题,急用,已是金牌客户

iceman 发表于 2015-3-30 17:42:00

回复 13楼seasky083的帖子

抱歉,当前这个代码逻辑不是十分清楚,目前运行起来后Sheet1 的Cell【0,0】中仅仅设置了文本,并没有公式?请问如何重现问题?

seasky083 发表于 2015-3-31 08:23:00

如果你跟代码的话就可以看到,我里面用了try catch,代码逻辑是这样的,把excel中单元格的内容先放到dictionary中(我这里需要分解公式,到数据库中提取数据
这边没有提取数据,直接复制到Formula中了),然后在
//将对应!公式替换掉
            for (int k = 0; k < _SheetListNon.Count; k++)
            {
               
                foreach (KeyValuePair<string, string> cellNon in _SheetListNon)
                {
                  string[] key = cellNon.Key.Split('-');
                  int x = int.Parse(key);
                  int y = int.Parse(key);

                  try
                  {
                      //判断能否找到对应的数据
                        //就是这个地方找不到对应的源-错误消息:无效的源名称 Error offset: 0
                        test.Sheets.Cells.Formula = cellNon.Value.Substring(1);
                  }
                  catch
                  {
                        //找不到直接将公式赋值给单元格
                        test.Sheets.Cells.Text = cellNon.Value.Substring(1);
                  }

                }
            }
红色部分出错了,你可以看一下

iceman 发表于 2015-3-31 10:48:00

回复 15楼seasky083的帖子

问题已经清楚了,感谢详细讲解。已经提高优先级,并且发送给产品组。

由于产品使用问题给您带来不便,抱歉。

iceman 发表于 2015-3-31 13:56:00

回复 15楼seasky083的帖子

请使用以下代码测试,在设置公式之前把 EnableCrossSheetReference设置为 true:

public ActionResult Index(FarPoint.Mvc.Spread.FpSpread test)
      {
            //string str = "'需关闭''帖子'!A19+需解决帖子!A19";
            //Regex r = new Regex(@"('([^']|'')+'|(?<=^|[+\-*\/^&amp;%]).+(?=\!\w+(?:$|[+\-*\/^&amp;%])))");//@"(?<=^|[+\-*\/^&amp;%])('([^']|'')+'|.+?(?=\!\w+(?:$|[+\-*\/^&amp;%])))"
            //MatchCollection ma = r.Matches(str);

            test.Sheets.Clear();

            FpSpread book = new FpSpread();

            book.OpenExcel(this.Server.MapPath("aa.xlsx"));
            int i = 0;
            test.EnableCrossSheetReference = false;//turn off this flag before open excel

            List<Dictionary<string, string>> _SheetListNon = new List<Dictionary<string, string>>();

            foreach (FarPoint.Web.Spread.SheetView sheet in book.Sheets)
            {
                Dictionary<string, string> dicSheetNon = new Dictionary<string, string>();

                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);

                int maxrow = sv.RowCount;
                int maxcol = sv.ColumnCount;
                //这里将对应的excel单元格内容提取出来(以!号开头的)

                for (int k = 0; i < maxrow; i++)
                {
                  for (int j = 0; j < maxcol; j++)
                  {
                        string s = sv.Cells.Text;
                        string formula = sv.Cells.Formula;
                        if (!string.IsNullOrEmpty(s) &amp;&amp; string.IsNullOrEmpty(formula))
                        {
                            if (s == '!')
                            {
                              dicSheetNon.Add(k + "-" + j, s);
                            }
                        }
                  }
                }
                _SheetListNon.Add(dicSheetNon);
                i++;
            }

            //将对应!公式替换掉
            test.EnableCrossSheetReference = true;//turn off this flag before open excel
            for (int k = 0; k < _SheetListNon.Count; k++)
            {
               
                foreach (KeyValuePair<string, string> cellNon in _SheetListNon)
                {
                  string[] key = cellNon.Key.Split('-');
                  int x = int.Parse(key);
                  int y = int.Parse(key);

                  try
                  {
                        //判断能否找到对应的数据
                        //就是这个地方找不到对应的源-错误消息:无效的源名称 Error offset: 0

                        //test.Sheets.Cells.Formula = cellNon.Value.Substring(1);
                        test.Sheets.SetFormula(x, y,cellNon.Value.Substring(1));
                  }
                  catch
                  {
                        //找不到直接将公式赋值给单元格
                        test.Sheets.Cells.Text = cellNon.Value.Substring(1);
                  }

                }
            }

            test.Sheets.PageSize = 30;
            test.Width = 1200;
            test.Height = 500;
            //test.Sheets.Cells.Formula = "!'Sheet2'!A1".Substring(1);
            return View();
      }

iceman 发表于 2015-4-1 09:55:00

回复 15楼seasky083的帖子

很高兴能够协助您解决问题。有后续问题请开新帖沟通。

为了给你提供更优质的服务,请对本次服务进行评分。我们会认真对待你提出的宝贵意见,谢谢   
http://gcdn.gcpowertools.com.cn/attachment.aspx?attachmentid=10062
页: 1 [2]
查看完整版本: 跨sheet计算cell值