找回密码
 立即注册

QQ登录

只需一步,快速开始

Wilson.Zhang
超级版主   /  发表于:2024-10-31 18:16  /   查看:252  /  回复:0
本帖最后由 Wilson.Zhang 于 2024-11-20 16:06 编辑

在填充自然语言文本的基础上,SpreadJS扩展了单元格类型,既视感即纳入了HTML中的表单输入元素,如单选框、复选框等。然而,Excel并不支持这类单元格类型,好吧,那这些单元格类型就变成了SpreadJS的特产。从SpreadJS产品的应用环境而言,通过浏览器访问SpreadJS页面中的大部分元素都是DOM元素,似乎在其中使用表单元素也很合理。而且,这些自定义单元格类型在数据填报方面可以增强人机交互体验。在导出为Excel文件时,Excel无法复原这些单元格类型的样式,但是可以记录单元格中填充的值,这些值以字符串形式存在。由于对数据的处理方式不同,GcExcel未能同步保留这些数据,而是以数组数据类型保存通过单元格类型填充在单元格中的数据。这便导致GcExcel导出的Excel文件中将会缺失设置了单元格类型的单元格中填充的数据。那么,可否规避这样的问题呢?分析下先。

以复选框列表(CheckBoxListCellType)为例,SpreadJS保存勾选值为字符串,如“1,2,3,4”,如图1所示。

1730340046490.png

图1. SpreadJS保存复选框列表勾选值

而GcExcel保存值为[1,2,3,4],导出的Excel文件中无法保留,如图2所示。

1730340279690.png

图2. GcExcel导出Excel文件未保留勾选数据

既然如此,可以抽取GcExcel数组中的元素,并以西文逗号为分隔符将元素拼接为字符串,之后再将字符串回填至单元格,便可与SpreadJS保持一致的保存方式。如此,对于一个包含了复选框列表单元格类型的ssjson文件,GcExcel和SpreadJS读取后导出的Excel文件中均可显示单元格中保存的勾选值,即便无法显示勾选框的外形,但是被勾选的内容作为有效数据得以保存,如图3所示。

1730340581643.png

图3. GcExcel重设勾选数据后导出Excel可见

如下代码所示:

  1. IWorksheet w2 = wb.getWorksheets().get("sheet名称");
  2. //  设置了CheckBoxListCellType的单元格
  3. Object C2 = w2.getRange("C2").getValue();
  4. StringBuilder sb = new StringBuilder();
  5. if (C2.getClass().isArray()) {
  6.     //  转换单元格中存储的数组值为字符串
  7.     for (int i = 0; i < Array.getLength(C2); i++) {
  8.         sb.append(Array.get(C2, i));
  9.         if (i < Array.getLength(C2) -1) {
  10.             sb.append(",");
  11.         }
  12.     }
  13. }
  14. //  将转换后的字符串回填至单元格
  15. w2.getRange("C2").setValue(sb.toString());
复制代码

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部