找回密码
 立即注册

QQ登录

只需一步,快速开始

低调的繁华
金牌服务用户   /  发表于:2024-8-22 17:04  /   查看:205  /  回复:5
1金币
基于模板设计器配置模板如下:
image.png857971496.png


后端基于"getValue()"获取值以及"getNumberFormat()"获取单元格格式程序读取结果如下:

B1=值         NumberFormat=General
B2=1.0         NumberFormat=General
B3=2         NumberFormat=@
B4=3         NumberFormat=General
B5=2023-01-12T01:10         NumberFormat=[$-804]dddd, mmmm dd, yyyy
B6=1.0E-4         NumberFormat=0.00%
B7=0.1         NumberFormat=# ?/?
B8=test         NumberFormat=General
B9=2001-01-01T00:00         NumberFormat=yyyy/M/d
B10=0.001         NumberFormat=General
B11=1.0E-4         NumberFormat=General
0.00010



我们期望:
1、是否可以获取最原始的数据,getText()这种方法能够读取的数据是"value":"0.001",而不是1.0E-4
2、getValue是否可以传入类型转换,比如传入BigDecimal,这样数据就不会转成科学计数法



GcExcelDemo.zip

7.96 KB, 下载次数: 13

5 个回复

倒序浏览
Wilson.Zhang
超级版主   /  发表于:2024-8-22 17:26:59
沙发
您好!我需要研究一下您期望的内容,请您耐心等待。
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-8-22 17:54:58
板凳
您好!关于问题一:您提供的demo中使用的是getValue(),而描述中提到了“getText()”,需要您确认下这部分的需求。
关于问题二:您可以在通过getValue()得到数据后自行处理数据为期望的数据类型。
回复 使用道具 举报
JoeJin
葡萄城公司职员   /  发表于:2024-8-26 16:27:29
地板
本帖最后由 JoeJin 于 2024-8-26 16:30 编辑

数据格式的转换属于业务需求,GcExcel 并不知道每一个单元格里面的数据是什么类型的。

getValue 本身返回的就是原始的值,至于是否显示为科学计数法,则取决于 Java 语言本身的策略。
Java中double过大,怎么避免使用科学计数法展示_double避免科学计数-CSDN博客

可以使用 instance of 来判断取出来值的类型,并自己做数据格式的转换。
以下是示例代码:
  1.     public static void main(String[] args) throws IOException {
  2.         Workbook workbook = new Workbook();
  3.         workbook.fromJson(Files.readString(Path.of("demo.ssjson")));
  4.         IWorksheet worksheet = workbook.getWorksheets().get(0);
  5.         for (int i = 1; i < 12; i++) {
  6.             String numberFormat = worksheet.getRange("B" + i).getNumberFormat();
  7.             var obj = worksheet.getRange("B" + i).getValue();
  8.             if(obj instanceof Double){
  9.                 Double value = (Double) obj;
  10.                 String formattedValue = String.format("%.8f", value);
  11.                 System.out.println("B" + i + "=" + formattedValue +"\t Type=" + obj.getClass().getName());
  12.             }
  13.             else{
  14.                 System.out.println("B" + i + "=" + obj +"\t Type=" + obj.getClass().getName());
  15.             }
  16.         }
  17.         BigDecimal b11 = new BigDecimal(worksheet.getRange("B11").getValue().toString());
  18.         System.out.println(b11);
  19.     }
  20. }
复制代码

回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-8-26 17:20:50
5#
JoeJin 发表于 2024-8-26 16:27
数据格式的转换属于业务需求,GcExcel 并不知道每一个单元格里面的数据是什么类型的。

getValue 本身返 ...


学到了!
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-8-26 17:23:26
6#
本帖最后由 Wilson.Zhang 于 2024-8-27 09:54 编辑

您好!您可以尝试下楼上提供的方案,看是否能够解决您的需求问题。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部