本帖最后由 Lynn.Dou 于 2023-3-29 18:58 编辑
在实际应用场景中,因为数据的数据结构是不固定的,我们会应用gc的JsonDataSource对象进行进行数据绑定,但是在使用时只能传入字符串类型数据,这时Date和Timestamp类型数据就只能转化成字符串类型数据了。如果在我们这种数据结构不固定的应用场景,想返回时间类型数据而非字符串类型数据有什么解决方案呢???
gcexcel使用流程:
1、gc反序列化(json使用模板配置,不包含表真实数据:template = this.designer.getWorkbook().toJSON({includeBindingSource: false}))
2、初始化数据(实时查询数据)
3、数据绑定
4、gc计算
5、gc序列化
代码如下:
- Workbook workbook = new Workbook();
- InputStream templateFile = getResourceStream("shujugeshi.json");
- //加载模板,gc反序列化
- workbook.fromJson(templateFile);
- IWorksheets sheets = workbook.getWorksheets();
- Map<IWorksheet, List<ITable>> tables = Maps.newHashMap();
- Map<String, JsonDataSource> sheetDatasources = Maps.newHashMap();
- //收集所有table
- for (IWorksheet sheet : sheets) {
- for (ITable table : sheet.getTables()) {
- List<ITable> sheetTables = tables.computeIfAbsent(sheet, item -> Lists.newArrayList());
- sheetTables.add(table);
- }
- }
- Map<String, List<Map<String, Object>>> datasourceMap = Maps.newHashMap();
- List<Map<String,Object>> data = new ArrayList<>();
- //初始化数据
- Map<String,Object> data1 = Maps.newHashMap();
- data.add(data1);
- DateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
- Date d1 = new Date();
- //操作日期:Date类型
- //日期:String类型
- //分子:Integer
- //分母:Integer
- //dt:TimeStamp
- String d2 = "2023-02-09";
- Integer d3 = 1;
- Integer d4 = 1;
- Timestamp d5 = new Timestamp(System.currentTimeMillis());
- data1.put("操作日期",d1);
- data1.put("日期",d2);
- data1.put("分子",d3);
- data1.put("分母",d4);
- data1.put("dt",d5);
- datasourceMap.put("S_Sheet1_tableRecords_0_0",data);
- <font color="#ff0000"> /** 问题: 这里的方法Date和Timestamp类型数据只能转化成字符串类型。在我们这种数据类型不固定的情况下。如果想返回时间类型有什么方案?**/</font>
- // String jsonDatasource = JSONObject.toJSON(datasourceMap).toString();
- <font color="#ff0000"> String jsonDatasource = JSONObject.toJSONStringWithDateFormat(datasourceMap,"yyyy-MM-dd HH:mm:ss");</font>
- sheetDatasources.put("Sheet1",new JsonDataSource(jsonDatasource));
- //关闭计算
- workbook.setEnableCalculation(false);
- //绑定数据
- for (Map.Entry<IWorksheet, List<ITable>> e : tables.entrySet()) {
- IWorksheet sheet = e.getKey();
- sheet.setDataSource(sheetDatasources.get(sheet.getName()));
- for (ITable table : e.getValue()) {
- table.setBindingPath(table.getName());
- }
- }
- workbook.setEnableCalculation(true);
- //序列化
- String jsonResult = workbook.toJson();
- saveToLocal(jsonResult,"数据类型.json");
复制代码
|
|