生成java自定义excel表格导出代码
时间: 2023-08-06 22:07:03 浏览: 183
java代码-使用java导出简易excel表格的源代码
生成 Java 自定义 Excel 表格导出代码可以使用以下代码片段作为参考:
```java
public class ExcelUtil {
/**
* 导出 Excel 表格
*
* @param filename 文件名
* @param headers 表头
* @param data 表格数据
* @param out 输出流
* @throws IOException
*/
public static void exportExcel(String filename, String[] headers, List<Map<String, Object>> data, OutputStream out) throws IOException {
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet(filename);
// 设置表头样式
XSSFCellStyle headerStyle = workbook.createCellStyle();
headerStyle.setAlignment(HorizontalAlignment.CENTER);
headerStyle.setFillForegroundColor(IndexedColors.LIGHT_TURQUOISE.getIndex());
headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
headerStyle.setBorderTop(BorderStyle.THIN);
headerStyle.setBorderBottom(BorderStyle.THIN);
headerStyle.setBorderLeft(BorderStyle.THIN);
headerStyle.setBorderRight(BorderStyle.THIN);
// 创建表头行
XSSFRow headerRow = sheet.createRow(0);
for (int i = 0; i < headers.length; i++) {
XSSFCell cell = headerRow.createCell(i);
cell.setCellValue(headers[i]);
cell.setCellStyle(headerStyle);
}
// 设置表格数据样式
XSSFCellStyle dataStyle = workbook.createCellStyle();
dataStyle.setBorderTop(BorderStyle.THIN);
dataStyle.setBorderBottom(BorderStyle.THIN);
dataStyle.setBorderLeft(BorderStyle.THIN);
dataStyle.setBorderRight(BorderStyle.THIN);
// 填充表格数据
for (int i = 0; i < data.size(); i++) {
XSSFRow dataRow = sheet.createRow(i + 1);
Map<String, Object> rowData = data.get(i);
for (int j = 0; j < headers.length; j++) {
XSSFCell cell = dataRow.createCell(j);
Object value = rowData.get(headers[j]);
if (value != null) {
if (value instanceof String) {
cell.setCellValue((String) value);
} else if (value instanceof Integer) {
cell.setCellValue((Integer) value);
} else if (value instanceof Double) {
cell.setCellValue((Double) value);
} else if (value instanceof Date) {
cell.setCellValue((Date) value);
XSSFCellStyle dateStyle = workbook.createCellStyle();
dateStyle.setDataFormat(workbook.getCreationHelper().createDataFormat().getFormat("yyyy-MM-dd HH:mm:ss"));
cell.setCellStyle(dateStyle);
}
}
cell.setCellStyle(dataStyle);
}
}
// 自适应列宽
for (int i = 0; i < headers.length; i++) {
sheet.autoSizeColumn(i);
}
// 输出 Excel 文件
workbook.write(out);
workbook.close();
}
}
```
在这里,我们使用了 Apache POI 库来生成 Excel 表格。在 `exportExcel` 方法中,我们首先创建了一个 `XSSFWorkbook` 对象来表示 Excel 文件。然后,我们创建了一个 `XSSFSheet` 对象来表示表格,并设置了表头样式和表头行。接着,我们填充了表格数据,并根据数据类型设置了单元格样式。最后,我们自适应列宽,并将 Excel 文件输出到指定的输出流中。
要使用该工具类导出 Excel 表格,只需要调用 `exportExcel` 方法即可,如下所示:
```java
List<Map<String, Object>> data = new ArrayList<>();
Map<String, Object> row1 = new LinkedHashMap<>();
row1.put("id", 1);
row1.put("name", "张三");
row1.put("age", 20);
row1.put("create_time", new Date());
data.add(row1);
Map<String, Object> row2 = new LinkedHashMap<>();
row2.put("id", 2);
row2.put("name", "李四");
row2.put("age", 22);
row2.put("create_time", new Date());
data.add(row2);
String[] headers = {"id", "name", "age", "create_time"};
String filename = "test.xlsx";
OutputStream out = new FileOutputStream(filename);
ExcelUtil.exportExcel(filename, headers, data, out);
out.close();
```
在这个例子中,我们首先创建了一个包含两行数据的表格数据 `data`,然后创建了一个包含表头信息的字符串数组 `headers`,并指定了导出的 Excel 文件名 `filename` 和输出流 `out`。最后,我们调用 `exportExcel` 方法导出 Excel 表格,并关闭输出流。
阅读全文