本帖最后由 Joestar.Xu 于 2025-3-12 08:54 编辑
您好,经调研,该问题是由于7.1重构后我们采用了更严格的语法解析策略,这个策略会将数据源中的-符号解析为减号。
您可以修改模板中的数据源字段,将其用单引号包裹起来,或者使用下图中的代码来自动解析。
- public static void changeResourceName(Workbook workbook, List<String> allResourceNameNeedToChange) {
- for(IWorksheet worksheet : workbook.getWorksheets()) {
- for(String resourceName : allResourceNameNeedToChange) {
- worksheet.getUsedRange().replace(resourceName, "'" + resourceName + "'");
- }
- }
- }
复制代码
另外,ITableDataSource的实现类存在问题,column name需要和模板中的字段能够对应起来。
具体请参考:
- public class AvroTableDataSource implements ITableDataSource {
- private List<Map<String, Object>> dataTable ;
- private List<String> columnNames;
- private HashMap<String, Integer> columnIndex;
- public AvroTableDataSource(String json) {
- List<JSONObject> array = JSONObject.parseArray(json, JSONObject.class);
- this.dataTable = new ArrayList<>(array.size());
- for (JSONObject jsonObject : array) {
- Map<String, Object> map = new HashMap<>();
- for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {
- map.put(entry.getKey(), entry.getValue());
- }
- this.dataTable.add(map);
- }
- this.columnNames = new ArrayList<>();
- this.columnIndex = new HashMap<>();
- if (!dataTable.isEmpty()) {
- for (Map.Entry<String, Object> entry : dataTable.get(0).entrySet()) {
- columnNames.add(entry.getKey());
- columnIndex.put(entry.getKey(), columnNames.size() - 1);
- }
- }
- }
- @Override
- public Object getValue(int i, int j) {
- return dataTable.get(i).get(getColumnName(j));
- }
- @Override
- public int getRowCount() {
- return dataTable.size();
- }
- @Override
- public int getColumnCount() {
- if (dataTable.isEmpty()) {
- return 0;
- }
- return dataTable.get(0).keySet().size();
- }
- @Override
- public String getColumnName(int i) {
- return columnNames.get(i);
- }
- @Override
- public int getColumnIndex(String s) {
- return columnIndex.get(s);
- }
- }
复制代码 |