找回密码
 立即注册

QQ登录

只需一步,快速开始

billdwl
金牌服务用户   /  发表于:2023-11-17 11:05  /   查看:1347  /  回复:12
本帖最后由 Richard.Huang 于 2023-11-23 13:41 编辑

产品:GcExcel
版本:v6.2.1
问题编号:【DOCXLS-9286】
  1. public void test(@RequestParam("file") MultipartFile file, HttpServletResponse response) throws IOException {
  2.   ByteArrayInputStream bais = new ByteArrayInputStream(file.getBytes());
  3.   Workbook workbook = new Workbook();
  4.   Workbook.SetLicenseKey("demo");
  5.   workbook.setCulture(Locale.CHINESE);
  6.   workbook.open(bais, OpenFileFormat.Sjs);
  7.   ByteArrayOutputStream baos = new ByteArrayOutputStream();
  8.   workbook.save(baos, SaveFileFormat.Sjs);
  9.   response.reset();
  10.   response.setContentType("application/octet-stream");
  11.   response.setCharacterEncoding("utf-8");

  12.   ServletOutputStream outputStream = response.getOutputStream();
  13.   outputStream.write(baos.toByteArray());
  14.   outputStream.flush();
  15.   outputStream.close();
  16. }
复制代码
复现步骤:

1、将原始sjs文件通过demo代码转换为新sjs文件,新sjs文件新增很多无用行次

demo.sjs

29.24 KB, 下载次数: 75

12 个回复

倒序浏览
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2023-11-17 12:02:48
沙发
您好,在GcExcel中通过如下代码进行导入与导出:

image.png498051146.png
然后在Designer中导入demo1.sjs,结果如下:
image.png170035094.png
在Designer中导入demo1.sjs ,结果如下:
image.png188978270.png
行数从58变为了137 。

如果您的问题是指这个的话,我复现了此问题。将深入调研下此问题,待有进展,会及时联系您。

回复 使用道具 举报
billdwl
金牌服务用户   /  发表于:2023-11-17 13:04:31
板凳
Ellia.Duan 发表于 2023-11-17 12:02
您好,在GcExcel中通过如下代码进行导入与导出:

是的,就是这个问题,请帮忙看看
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2023-11-17 14:48:14
地板
好的,还在调研中,问题编号:【DOCXLS-9286】
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2023-11-20 09:46:19
5#
您好,经过调研,发现在GcExcel导出的sjs多了很多行,是因为批注位置问题。
如下图所示,设置rowCount为200 ,然后显示所有的批注,发现此时有多个批注位于134行
image.png604519652.png
在SpreadJS中,如果注释的位置超出了rowCount的范围,则在显示时其位置将在rowCount范围内永久修改。
由于GcExcel与MS-Excel工作表的范围严格一致,因此注释的位置实际上不受rowCount的限制。相反,rowCount 会根据导出期间的注释位置进行修改。
这导致了与 SpreadJS 的不一致。
根据以上调研结果,您可以调整批注位置为所指定单元格附近。

回复 使用道具 举报
billdwl
金牌服务用户   /  发表于:2023-11-21 15:10:24
6#
本帖最后由 billdwl 于 2023-11-21 15:26 编辑
Ellia.Duan 发表于 2023-11-20 09:46
您好,经过调研,发现在GcExcel导出的sjs多了很多行,是因为批注位置问题。
如下图所示,设置rowCount为20 ...

image.png977250061.png
你好,在demo.sjs文件中,批注原本就在单元格附近,所以如果是导出之后批注位置发生了改变,应该是GcExcel有问题
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2023-11-21 15:38:37
7#
您好,可以通过以下的代码 显示所有的批注
  1. for(let i = 0;i<sheet.comments.all().length;i++){
  2.     sheet.comments.all()<i>.displayMode(GC.Spread.Sheets.Comments.DisplayMode.alwaysShown)
  3. }</i>
复制代码

回复 使用道具 举报
billdwl
金牌服务用户   /  发表于:2023-11-21 16:02:31
8#
Ellia.Duan 发表于 2023-11-21 15:38
您好,可以通过以下的代码 显示所有的批注

你好,在demo.sjs文件中,批注原本就在单元格附近,所以如果是导出之后批注位置发生了改变,应该是GcExcel有问题
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2023-11-21 16:34:11
9#
您好,在demo.sjs中,批注并不在单元格附件。是因为在SpreadJS中行数有限,进而将批注移到到单元格附近的位置。您可以做如下操作来验证下:
1、首先设置sheet的行数为200 ,sheet.setRowCount(200)
2、执行楼上给出的代码
  1. for(let i = 0;i<sheet.comments.all().length;i++){
  2.     sheet.comments.all()<i>.displayMode(GC.Spread.Sheets.Comments.DisplayMode.alwaysShown)
  3. }</i>
复制代码
这时候就发现批注不在单元格附近了,而是在下图图片中的位置
image.png263179930.png


回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2023-11-22 15:07:33
10#
您好,通过以上回复是否可以解决您的问题?
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部