| | |
| | | |
| | | protected abstract List<String> buildRowData(T data); |
| | | |
| | | /** |
| | | * 构建行数据(支持不同类型) |
| | | * 子类可以重写此方法以返回包含不同类型数据的列表(如数字、字符串等) |
| | | * 如果子类重写了此方法,writeSheet 将使用此方法而不是 buildRowData |
| | | * |
| | | * @param data 数据对象 |
| | | * @return 行数据列表,可以包含 String、Number 等类型 |
| | | */ |
| | | protected List<Object> buildRowDataObjects(T data) { |
| | | return null; |
| | | } |
| | | |
| | | protected T parseRowData(int rowIndex, List<String> rowData) { |
| | | return null; |
| | | } |
| | |
| | | |
| | | int index = 1; |
| | | for (var d : data) { |
| | | var rowData = buildRowData(d); |
| | | // 优先使用 buildRowDataObjects,如果未实现则使用 buildRowData |
| | | List<Object> rowDataObjects = buildRowDataObjects(d); |
| | | List<?> rowData; |
| | | |
| | | if (rowDataObjects != null) { |
| | | rowData = rowDataObjects; |
| | | } else { |
| | | rowData = buildRowData(d); |
| | | } |
| | | |
| | | if (rowData == null) |
| | | continue; |
| | | |
| | |
| | | |
| | | var row = sheet.createRow(index++); |
| | | for (int i = 0; i < rowData.size(); i++) { |
| | | row.createCell(i).setCellValue(rowData.get(i)); |
| | | var cell = row.createCell(i); |
| | | var value = rowData.get(i); |
| | | |
| | | // 根据数据类型设置单元格值 |
| | | if (value == null || value.equals("-")) { |
| | | cell.setCellValue("-"); |
| | | } else if (value instanceof Number) { |
| | | cell.setCellValue(((Number) value).doubleValue()); |
| | | } else if (value instanceof Boolean) { |
| | | cell.setCellValue((Boolean) value); |
| | | } else { |
| | | cell.setCellValue(value.toString()); |
| | | } |
| | | } |
| | | } |
| | | } |