请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

Kosen
金牌服务用户   /  发表于:2025-4-14 14:43  /   查看:179  /  回复:13
本帖最后由 Matthew.Xue 于 2025-4-14 17:29 编辑

GcExcel中给区域设值是否一定需要把值转成一个Object[][]二维数组,我现在是要一行一行去设置,这样看起来也成功了,不知道有没有问题。另外一个问题就是对于这种"01433511"类型的字符串,我希望自动解析不要把它解析成数值且去掉0,而是保持字符串类型和原值不变,这个要怎么做呢?
  1. Workbook workbook = new Workbook();
  2. IWorksheet worksheet = workbook.getWorksheets().get(0);
  3. workbook.setAutoParse(true);
  4. List<String> data = Arrays.asList("01433511", "2025-01-01", "1234", "-123.456");
  5. Object value = data.toArray();
  6. worksheet.getRange(0, 0, 1, 4).setValue(value);
复制代码




13 个回复

倒序浏览
Lewis
初级会员   /  发表于:2025-4-14 15:36:29
沙发
可以试一下把工作簿的自动解析(autoparse)关掉:https://www.grapecity.com.cn/dev ... html%23setAutoParse(boolean)
回复 使用道具 举报
Kosen
金牌服务用户   /  发表于:2025-4-14 15:38:58
板凳
Lewis 发表于 2025-4-14 15:36
可以试一下把工作簿的自动解析(autoparse)关掉:https://www.grapecity.com.cn/dev ... html%23setAutoPa ...

我就是需要自动解析来处理非字符串类型的数据(日期,数字等)lol,只是我们的字符串类型数据会有0开头后面全是数字的工号,需要针对这种特殊处理下。
回复 使用道具 举报
Lewis
初级会员   /  发表于:2025-4-14 15:45:46
地板
Kosen 发表于 2025-4-14 15:38
我就是需要自动解析来处理非字符串类型的数据(日期,数字等)lol,只是我们的字符串类型数据会有0开头后 ...

抱歉刚才没看到你的代码,零开头的工号是一种比较特殊的格式了,建议你还是自己预处理一下(比如设置值之前检测到零开头的字符串执行subString),gcexcel作为基础组件暂时还没有直接的API处理这种特殊的需求。
回复 使用道具 举报
Kosen
金牌服务用户   /  发表于:2025-4-14 17:05:56
5#
Lewis 发表于 2025-4-14 15:45
抱歉刚才没看到你的代码,零开头的工号是一种比较特殊的格式了,建议你还是自己预处理一下(比如设置值之 ...

我目前想到一种策略是先worksheet.getRange(i,j).setNumberFormat("@")然后再setValue是ok的。但把顺序反过来就不行了,所以GCExcel里必须先指定单元格数据格式才能生效吗?
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2025-4-14 18:00:04
6#
单元格格式只是改变单元格的显示文本效果,实际的value并不会变化。
比如,先输入数字 1,此时value为1。再设置单元格格式 @,单元格value还是 1,并不会是"1"。
如果先设置单元格格式为@,表示你希望这是一个文本单元格,那么在输入1时,此时的value就会是字符串"1"。
您可以通过 SpreadJS 或 微软Excel 实际操作下,直观的感受下二者的区别。

评分

参与人数 1满意度 +5 收起 理由
Kosen + 5

查看全部评分

回复 使用道具 举报
Lewis
初级会员   /  发表于:2025-4-14 18:10:33
7#
我有点没太理解,你的需求是去掉零的同时保留后面的字符串,就算设置 @的数字格式,也没办法去掉零吧
回复 使用道具 举报
Kosen
金牌服务用户   /  发表于:2025-4-15 12:33:39
8#
Lewis 发表于 2025-4-14 18:10
我有点没太理解,你的需求是去掉零的同时保留后面的字符串,就算设置 @的数字格式,也没办法去掉零吧

就是对于工号类型的字符串,保留0,并显示字符串原始值。我大概理解上面超级版主说的意思了
回复 使用道具 举报
Kosen
金牌服务用户   /  发表于:2025-4-15 12:37:54
9#
Lynn.Dou 发表于 2025-4-14 18:00
单元格格式只是改变单元格的显示文本效果,实际的value并不会变化。
比如,先输入数字 1,此时value为1。 ...

非常感谢,我明白这两者之间的区别了。另外这个问题请帮忙也看下,GcExcel中给区域设值是否一定需要把值转成一个Object[][]二维数组,我现在用List.toArray()得到的Object[]一维数组也能set成功,因为我是一行一行操作的,这样有问题不?我看官网上的例子都是Object[][]二维数组的格式
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2025-4-15 16:23:43
10#
测试看一维数组可以赋值,但是如果在赋值时代码失误get了多行,那么可能出现不符合预期的赋值结果,比如下图:
image.png384180602.png
综合来看,还是建议您参考官网示例用法,传参二维数组赋值。range泛义上包含多行多列,二维数组更符合API的设计。
如果您业务中有要求必须一行一行赋值,可以结合业务情况详细说明下,我们来协助判断下此用法是否存在风险。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部