生成可变表头的Excel是通过使用Java中的POI库来实现的。具体实现步骤如下:
步骤一:创建Excel文件和表头
使用POI中的Workbook
和Sheet
类创建工作簿和工作表,并在工作表中添加表头。表头可以是固定的,也可以是根据需要动态生成的。
Workbook workbook = new XSSFWorkbook(); // 创建工作簿
Sheet sheet = workbook.createSheet("Sheet1"); // 创建工作表
Row row = sheet.createRow(0); // 创建行,行号从0开始
Cell cell = null;
String[] headers = {"姓名", "年龄", "性别"}; // 表头内容
for (int i = 0; i < headers.length; i++) { // 循环创建表头单元格
cell = row.createCell(i);
cell.setCellValue(headers[i]);
}
步骤二:插入数据
使用POI中的Row
和Cell
类来插入数据。数据可以是从数据库读取的,也可以是手动输入的。在插入数据时,可以根据需要使用不同的数据格式,如文本、数字、日期等。
List<List<String>> list = new ArrayList<List<String>>(); // 要插入的数据
List<String> subList1 = Arrays.asList("张三", "20", "男");
List<String> subList2 = Arrays.asList("李四", "22", "男");
list.add(subList1);
list.add(subList2);
for (int i = 0; i < list.size(); i++) { // 循环插入数据
List<String> subList = list.get(i);
row = sheet.createRow(i + 1);
for (int j = 0; j < subList.size(); j++) { // 循环插入单元格数据
cell = row.createCell(j);
cell.setCellValue(subList.get(j));
}
}
步骤三:生成Excel文件
使用Java IO流将工作簿中的数据写入Excel文件中。
String fileName = "example.xlsx"; // 文件名
File file = new File(fileName);
OutputStream outputStream = new FileOutputStream(file); // 创建输出流
workbook.write(outputStream); // 将数据写入输出流
outputStream.close(); // 关闭输出流
示例1:生成一个表头为“学生信息”的Excel文件
Workbook workbook = new XSSFWorkbook(); // 创建工作簿
Sheet sheet = workbook.createSheet("Sheet1"); // 创建工作表
Row row = sheet.createRow(0); // 创建行,行号从0开始
Cell cell = row.createCell(0);
cell.setCellValue("学生信息"); // 设置表头
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 4)); // 合并表头单元格
row = sheet.createRow(1);
String[] headers = {"姓名", "年龄", "性别", "班级", "学号"}; // 表头内容
for (int i = 0; i < headers.length; i++) { // 循环创建表头单元格
cell = row.createCell(i);
cell.setCellValue(headers[i]);
}
List<List<String>> list = new ArrayList<List<String>>(); // 要插入的数据
List<String> subList1 = Arrays.asList("张三", "20", "男", "1班", "101");
List<String> subList2 = Arrays.asList("李四", "22", "男", "2班", "102");
list.add(subList1);
list.add(subList2);
for (int i = 0; i < list.size(); i++) { // 循环插入数据
List<String> subList = list.get(i);
row = sheet.createRow(i + 2);
for (int j = 0; j < subList.size(); j++) { // 循环插入单元格数据
cell = row.createCell(j);
cell.setCellValue(subList.get(j));
}
}
String fileName = "students.xlsx"; // 文件名
File file = new File(fileName);
OutputStream outputStream = new FileOutputStream(file); // 创建输出流
workbook.write(outputStream); // 将数据写入输出流
outputStream.close(); // 关闭输出流
示例2:动态生成表头和数据
Workbook workbook = new XSSFWorkbook(); // 创建工作簿
Sheet sheet = workbook.createSheet("Sheet1"); // 创建工作表
Row row = sheet.createRow(0); // 创建行,行号从0开始
Cell cell = row.createCell(0);
cell.setCellValue("成绩表"); // 设置表头
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 5)); // 合并表头单元格
String[] headers = {"姓名", "语文", "英语", "数学", "物理", "化学"}; // 表头内容
for (int i = 0; i < headers.length; i++) { // 循环创建表头单元格
cell = row.createCell(i);
cell.setCellValue(headers[i]);
}
List<List<String>> list = new ArrayList<List<String>>(); // 要插入的数据
List<String> subList1 = Arrays.asList("张三", "80", "85", "90", "92", "88");
List<String> subList2 = Arrays.asList("李四", "90", "87", "67", "78", "90");
list.add(subList1);
list.add(subList2);
for (int i = 0; i < list.size(); i++) { // 循环插入数据
List<String> subList = list.get(i);
row = sheet.createRow(i + 1);
for (int j = 0; j < subList.size(); j++) { // 循环插入单元格数据
cell = row.createCell(j);
if (j == 0) { // 第一列是文本格式
cell.setCellValue(subList.get(j));
} else { // 其他列是数字格式
double value = Double.parseDouble(subList.get(j));
cell.setCellValue(value);
CellStyle style = workbook.createCellStyle();
style.setDataFormat(workbook.createDataFormat().getFormat("0.00")); // 设置保留2位小数
cell.setCellStyle(style);
}
}
}
String fileName = "score.xlsx"; // 文件名
File file = new File(fileName);
OutputStream outputStream = new FileOutputStream(file); // 创建输出流
workbook.write(outputStream); // 将数据写入输出流
outputStream.close(); // 关闭输出流
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java如何生成可变表头的excel - Python技术站