需求:从数据库中读取数据生成下面这个样式的表单
从上图中可以看出,
HSSFWorkbook实现完全可以
那么我们就用它来实现
// 创建一个新的工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
// 创建一个sheet页
HSSFSheet sheet1 = workbook.createSheet("sheet1");
String titel = "充电桩保修单";
创建合并单元格
CellRangeAddress tl = new CellRangeAddress(0 + index, 0 + index, 0, 7);// 下标从0开始 起始行号,终止行号, 起始列号,终止列号
将单元格设置如sheet中
sheet1.addMergedRegion(tl);
设置标题
Row rowTitle = sheet1.createRow(index);
Cell cellTitle = rowTitle.createCell(0);
cellTitle.setCellValue(titel); //设置标题
以上我们已经实现了简单的样例,依葫芦画照着画出需求图中的样子
看下面完整代码
完整代码
import entity.ChargingPieGuarantee;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.util.CellRangeAddress;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* Created by lijinquan on 2016/10/14.
*/
public class TestExcel {
public static void main(String[] args) throws IOException {
List<ChargingPieGuarantee> cgLs = new ArrayList<ChargingPieGuarantee>();
ChargingPieGuarantee cg = new ChargingPieGuarantee();
cg.setOperator("运营商1"); // 运营商
cg.setOddNumbers("单号1");//单号
cg.setSite("站点1");//站点
cg.setNameofPile("桩名称1");//桩名称
cg.setWarrantyTime("保修时间1"); //保修时间
cg.setWarranties("保修人1"); //保修人
cg.setFault("故障来源1"); //故障来源
cg.setFaultDescription("故障描述1");//故障描述
cg.setProcessingResult("处理结果1");//处理结果
cg.setMajorPerson("主修人1"); //主修人
cg.setProcessingTime("2019-01-02"); //处理时间
cg.setInspector("检验人1"); //检验人
cg.setInspectionTime("2019-03-04"); //检验时间
ChargingPieGuarantee cg1 = new ChargingPieGuarantee();
cg1.setOperator("运营商2"); // 运营商
cg1.setOddNumbers("单号2");//单号
cg1.setSite("站点2");//站点
cg1.setNameofPile("桩名称2");//桩名称
cg1.setWarrantyTime("保修时间2"); //保修时间
cg1.setWarranties("保修人2"); //保修人
cg1.setFault("故障来源2"); //故障来源
cg1.setFaultDescription("故障描述2");//故障描述
cg1.setProcessingResult("处理结果2");//处理结果
cg1.setMajorPerson("主修人2"); //主修人
cg1.setProcessingTime("2019-02-03"); //处理时间
cg1.setInspector("检验人2"); //检验人
cg1.setInspectionTime("2019-05-06"); //检验时间
cgLs.add(cg);
cgLs.add(cg1);
creatChargingPieGuaranTee(cgLs);
}
private static void creatChargingPieGuaranTee(List<ChargingPieGuarantee> cgList) throws IOException {
// 创建一个新的工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
// 创建一个sheet页
HSSFSheet sheet1 = workbook.createSheet("sheet1");
String titel = "充电桩保修单";
// HSSFCellStyle style = workbook.createCellStyle();
// style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
//
// Font fontTitle = workbook.createFont();
// fontTitle.setFontHeightInPoints((short) 18); //字体大小
// fontTitle.setColor(HSSFColor.BLACK.index); //字体颜色
// fontTitle.setFontName("宋体"); //字体
// fontTitle.setBoldweight(Font.BOLDWEIGHT_BOLD); //粗体显示
if (cgList.size() < 1) {
System.out.println("无记录");
}
int index = 0;
for (ChargingPieGuarantee cg : cgList) {
//创建合并单元格 ---begin
CellRangeAddress tl = new CellRangeAddress(0 + index, 0 + index, 0, 7);// 下标从0开始 起始行号,终止行号, 起始列号,终止列号
CellRangeAddress region1 = new CellRangeAddress(index + 1, index + 1, 0, 5);// 下标从0开始 起始行号,终止行号, 起始列号,终止列号
CellRangeAddress region1_2 = new CellRangeAddress(index + 1, index + 1, 6, 7);// 下标从0开始 起始行号,终止行号, 起始列号,终止列号
CellRangeAddress region2 = new CellRangeAddress(index + 3, index + 3, 1, 7);// 起始行号,终止行号, 起始列号,终止列号
CellRangeAddress region3 = new CellRangeAddress(index + 4, index + 4, 1, 7);// 起始行号,终止行号, 起始列号,终止列号
CellRangeAddress region4 = new CellRangeAddress(index + 5, index + 5, 1, 7);// 起始行号,终止行号, 起始列号,终止列号
CellRangeAddress region6 = new CellRangeAddress(index + 6, index + 6, 1, 2);// 起始行号,终止行号, 起始列号,终止列号
CellRangeAddress region6_2 = new CellRangeAddress(index + 6, index + 6, 4, 7);// 起始行号,终止行号, 起始列号,终止列号
CellRangeAddress region7 = new CellRangeAddress(index + 7, index + 7, 1, 2);// 起始行号,终止行号, 起始列号,终止列号
CellRangeAddress region7_2 = new CellRangeAddress(index + 7, index + 7, 4, 7);// 起始行号,终止行号, 起始列号,终止列号
sheet1.addMergedRegion(tl);
sheet1.addMergedRegion(region1);
sheet1.addMergedRegion(region1_2);
sheet1.addMergedRegion(region2);
sheet1.addMergedRegion(region3);
sheet1.addMergedRegion(region4);
sheet1.addMergedRegion(region6);
sheet1.addMergedRegion(region6_2);
sheet1.addMergedRegion(region7);
sheet1.addMergedRegion(region7_2);
Row rowTitle = sheet1.createRow(index);
Cell cellTitle = rowTitle.createCell(0);
cellTitle.setCellValue(titel); //设置标题
HSSFRow row1 = sheet1.createRow(index + 1);
HSSFCell r1c0 = row1.createCell(0);
HSSFCell r1c1 = row1.createCell(6);
r1c0.setCellValue("运营商 : " + cg.getOperator());
r1c1.setCellValue("单号: " + cg.getOddNumbers());
HSSFRow row2 = sheet1.createRow(index + 2);
HSSFCell r2c0 = row2.createCell(0);
r2c0.setCellValue("站点");
HSSFCell r2c1 = row2.createCell(1);
r2c1.setCellValue(cg.getSite());
HSSFCell r2c2 = row2.createCell(2);
r2c2.setCellValue("桩名称");
HSSFCell r2c3 = row2.createCell(3);
r2c3.setCellValue(cg.getNameofPile());
HSSFCell r2c4 = row2.createCell(4);
r2c4.setCellValue("保修时间");
HSSFCell r2c5 = row2.createCell(5);
r2c5.setCellValue(cg.getWarrantyTime());
HSSFCell r2c6 = row2.createCell(6);
r2c6.setCellValue("报修人");
HSSFCell r2c7 = row2.createCell(7);
r2c7.setCellValue(cg.getWarranties());
HSSFRow row3 = sheet1.createRow(index + 3);
HSSFCell r3c0 = row3.createCell(0);
r3c0.setCellValue("故障来源");
HSSFCell r3c1 = row3.createCell(1);
r3c1.setCellValue(cg.getFault());
HSSFRow row4 = sheet1.createRow(index + 4);
HSSFCell r4c0 = row4.createCell(0);
r4c0.setCellValue("故障描述");
HSSFCell r4c1 = row4.createCell(1);
r4c1.setCellValue(cg.getFaultDescription());
//此处空一行 自行调整
HSSFRow row5 = sheet1.createRow(index + 5);
HSSFCell r5c0 = row5.createCell(0);
r5c0.setCellValue("处理结果");
HSSFCell r5c1 = row5.createCell(1);
r5c1.setCellValue(cg.getProcessingResult());
HSSFRow row6 = sheet1.createRow(index + 6);
HSSFCell r6c0 = row6.createCell(0);
r6c0.setCellValue("主修人");
HSSFCell r6c1 = row6.createCell(1);
r6c1.setCellValue(cg.getMajorPerson());
HSSFCell r6c2 = row6.createCell(3);
r6c2.setCellValue("处理时间");
HSSFCell r6c3 = row6.createCell(4);
r6c3.setCellValue(cg.getProcessingTime());
HSSFRow row7 = sheet1.createRow(index + 7);
HSSFCell r7c0 = row7.createCell(0);
r7c0.setCellValue("检验人");
HSSFCell r7c1 = row7.createCell(1);
r7c1.setCellValue(cg.getInspector());
HSSFCell r7c2 = row7.createCell(3);
r7c2.setCellValue("检验时间");
HSSFCell r7c3 = row7.createCell(4);
r7c3.setCellValue(cg.getInspectionTime());
index += 10;
}
if(index>10000){
// TODO
System.out.println("excel行数有限,行数用完后需要重新creat一个sheet");
}
FileOutputStream fileOutputStream = new FileOutputStream("E:\\test\\chargepio\\ChargingPieGuarantee.xlsx");
// 将workbook写入流中
workbook.write(fileOutputStream);
// 关流
fileOutputStream.close();
}
}