公司开发中 特别是开发 crm erp OA系统的时候 会有一个需求 导入和导出报表 (表格)
Excel2003是一个特有的二进制格式,其核心结构是复合文档类型的结构,存储数据量较小
Excel2007 的核心结构是 XML 类型的结构,采用的是基于 XML 的压缩方式,使其占用的空间更小,操作效率更高
新建maven基本工程 添加poi的坐标
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.17</version> </dependency>
@Test public void fun() throws Exception { //创建工作簿 Workbook workbook = new XSSFWorkbook(); //创建文件输出流 FileOutputStream out = new FileOutputStream("E:\\demo.xlsx"); //把工作簿输出本地 workbook.write(out); //关闭资源 out.close(); workbook.close(); }
类的说明
@Test public void fun1() throws Exception { Workbook workbook = new XSSFWorkbook(); //创建sheet并且指定 sheet的名字 workbook.createSheet("财务管理"); FileOutputStream out = new FileOutputStream("E:\\demo1.xlsx"); workbook.write(out); out.close(); workbook.close(); }
@Test public void fun2() throws Exception { Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("财务管理"); //通过该Sheet创建row //参数表示 行的索引 从0开始 Row row = sheet.createRow(0); FileOutputStream out = new FileOutputStream("E:\\demo1.xlsx"); workbook.write(out); out.close(); workbook.close(); }
@Test public void fun3() throws Exception { Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("财务报表"); Row row = sheet.createRow(0); //单元格 通过row创建 //参数表示索引 表示这一行的第几个单元格 索引从0开始 Cell cell = row.createCell(2); //给单元格写文字 cell.setCellValue("辉哥真帅"); FileOutputStream out = new FileOutputStream("E:\\demo3.xlsx"); workbook.write(out); out.close(); workbook.close(); }
@Test public void fun4() throws Exception { Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("辉哥很帅"); Row row = sheet.createRow(3); //创建Cell的样式 通过工作簿创建样式 CellStyle cellStyle = workbook.createCellStyle(); //获取设置文字样式 Font font = workbook.createFont(); //设置文字加粗 font.setBold(true); //设置文字大小 font.setFontHeightInPoints((short)30); cellStyle.setFont(font); //设置上边框 cellStyle.setBorderTop(BorderStyle.DASHED); //设置下边框 cellStyle.setBorderBottom(BorderStyle.DASHED); //设置左边框 cellStyle.setBorderLeft(BorderStyle.DASHED); //设置右边框 cellStyle.setBorderRight(BorderStyle.DASHED); //设置文字水平居中 cellStyle.setAlignment(HorizontalAlignment.CENTER); //设置文字垂直居中 cellStyle.setVerticalAlignment(VerticalAlignment.CENTER); //设置行高 row.setHeightInPoints(40); //设置单元格的宽度 //第一个参数 表示设置哪个单元格 表示索引 第二个表示宽度 sheet.setColumnWidth(3,50*256); //创建单元格 Cell cell = row.createCell(3); //给单元格设置值 cell.setCellValue("辉哥很帅"); //给这个单元格设置这个样式 cell.setCellStyle(cellStyle); FileOutputStream out = new FileOutputStream("E:\\aaa4.xlsx"); workbook.write(out); out.close(); workbook.close(); }
新建一个xlsl文件 填写信息
/** * 读取表格 */ public class POIDemo2 { @Test public void fun() throws Exception { //加载xlsx文件 Workbook workbook = new XSSFWorkbook("E:\\person.xlsx"); //通过工作簿找到sheet Sheet sheet = workbook.getSheetAt(0); //获取一共多少行 int maxRow = sheet.getLastRowNum(); for (int i = 0; i <= maxRow; i++) { //获得具体每一行 Row row = sheet.getRow(i); //获取这一行 有多少个单元格 int lastCellNum = row.getLastCellNum(); StringBuffer buffer = new StringBuffer(); //遍历这一行的所有单元格 for (int j = 0; j <= lastCellNum; j++) { //获取单元格 Cell cell = row.getCell(j); if (cell != null) { Object value = getValue(cell); buffer.append(value).append("--"); } } System.out.println(buffer.toString()); } } public Object getValue(Cell cell) { CellType cellTypeEnum = cell.getCellTypeEnum(); Object obj = null; switch (cellTypeEnum) { case STRING://字符串类型 obj = cell.getStringCellValue(); break; case BOOLEAN:// boolean类型 obj = cell.getBooleanCellValue(); break; case NUMERIC://数字和日期类型 if (DateUtil.isCellDateFormatted(cell)) { //如果是日期类型 obj = cell.getDateCellValue(); } else { //数字类型 obj = cell.getNumericCellValue(); DecimalFormat format = new DecimalFormat("#"); //修改小数点的问题 obj = format.format(obj); } break; case FORMULA://如果是公式 obj = cell.getCellFormula(); break; } return obj; } }
引入依赖
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.17</version> </dependency>