FarPoint导出Excel,数组函数不计算
通过FarPoint控件(v8.4)导出Excel时,报表中的数组函数不计算,有没有什么方法可以实现数组函数的计算?在spreadjs中是可以计算出来的。
导出到Excel后,没有计算-值是#VALUE,需要手动Shift+Ctrl+Enter才可以,但实际应用中,应导出跟界面报表一样的数据才对,不能让客户一个一个单元格再去按键操作
附件中用demo的json
本帖最后由 Richard.Ma 于 2020-10-9 16:25 编辑
你好,我看到你附件中放的是一个json内容的文件。这个是使用Spreadjs时导出的吗, 这个文件是无法支持.NET平台来导入使用的
你目前是要用Spread Asp.net还是其他的开发平台呢, Richard.Ma 发表于 2020-10-9 16:24
你好,我看到你附件中放的是一个json内容的文件。这个是使用Spreadjs时导出的吗, 这个文件是无法支持.NET ...
在后台使用FarPoint控件获取这个json,来导出到Excel
FpSpread spread = new FpSpread();
Exporter exporter = new Exporter(json);
var stream = new MemoryStream();
exporter.SaveExcel(stream, GrapeCity.Windows.SpreadSheet.Data.ExcelFileFormat.XLSX);
stream.Seek(0, SeekOrigin.Begin);
spread.OpenExcel(stream);
spread.SaveExcel(saveFileName, FarPoint.Excel.ExcelSaveFlags.UseOOXMLFormat);
这样能明白吗?? 本帖最后由 Richard.Ma 于 2020-10-9 17:42 编辑
了解了,我看到您这边是使用GCExcel来做转换的,理论上转换后通过Spread保存的文件在Excel中是可以自动计算的。你可以将转换后的文件发过来,我用office365测试一下看看
你提到的Ctrl + Shift + enter这个是在Office365之前的版本里面确实是要这样操作的,请参考微软的文档。里面有同样的公式在不同版本的excel中的操作
https://support.microsoft.com/zh-cn/office/%e6%95%b0%e7%bb%84%e5%85%ac%e5%bc%8f%e6%8c%87%e5%8d%97%e5%92%8c%e7%a4%ba%e4%be%8b-7d94a64e-3ff3-4686-9372-ecfd5caa57c7?ui=zh-cn&rs=zh-cn&ad=cn#ID0EAAFAAA=Microsoft_365
Richard.Ma 发表于 2020-10-9 17:24
了解了,我看到您这边是使用GCExcel来做转换的,理论上转换后通过Spread保存的文件在Excel中是可以自动计算 ...
我这边知道数组函数是要手动按键Ctrl + Shift + enter才生效,但是现在的使用场景,是从系统里面导出来的,在spreadjs中是能自动计算的,现有的数据,导出来后不计算了,这跟客户说不通的,
让客户再一个一个找到这些数组公式去手动按键,也不合适
现在是希望有一个解决方案,怎么样能在系统中进行处理,让导出的Excel是能自动计算
附件里是导出的excel文件
我在office365中测试了一下,这个公式本身就有错误,即使按Ctrl + Shift + enter也无法计算得出。
以BF9为例,使用EXCEL显示错误步骤,在第一步就会报错
Richard.Ma 发表于 2020-10-9 18:24
我在office365中测试了一下,这个公式本身就有错误,即使按Ctrl + Shift + enter也无法计算得出。
以BF9为 ...
公式在spreadjs里面可以正常计算的呀,而且导出到Excel中,我按Ctrl + Shift + enter也可以计算出结果
你看我发起问题的第一个截图,就是spreadjs中的截图,也是有结果的 我这边使用的是office365。发现了我这边出现错误的原因是直接用excel打开文件后,公式中会出现一个@符号,去除后可以显示和你那边一样正确的结果,且无需按Ctrl + Shift + Enter
目前来看
1。是否按Ctrl + Shift + Enter是由office版本决定的,这个是excel软件内部的机制。无法通过其他办法改变,如果你这边的需求比较明确,建议让客户用office365打开。
2.刚才说到的那个多出来的@符号问题,我再用GCEXCEL再导出测试了一下看看是什么原因
Richard.Ma 发表于 2020-10-10 15:46
我这边使用的是office365。发现了我这边出现错误的原因是直接用excel打开文件后,公式中会出现一个@符号, ...
Excel版本使用是一个情况;
另外,我们这边还比较棘手的问题是,后台通过FarPoint解析打开报表,需要获取到上面的数据 进行保存处理,现在后台FarPoint转换后,获取到的BE8、BG8、这些单元格的值都是#VALUE,导致我们系统无法正常使用了,这个比较严重,看能否在程序中通过什么变通方法,让能得出计算结果呢? 关于第二个问题,我是用spreadjs 直接保存为excel文件不会出现问题
使用GCEXCEL在后台用下面的代码加载json并保存为excel也没有问题
上述两种办法都是可以在office 365中直接显示公式计算结果的
Workbook workbook = new Workbook();
workbook.FromJson(File.ReadAllText(@"D:\Projects\Array-json\Array-json.txt"));
workbook.Save(@"D:\Projects\Array-json\test.xlsx", SaveFileFormat.Xlsx);
我不确定你使用的Exporter类是哪个控件的,为什么要转成内存流又用spread来加载再保存,多个控件更容易出现兼容性问题