在企业级应用开发中,Excel报表是一种最常见的报表需求。Excel报表开发一般分为两种形式:
1、为了方便操作,基于Excel的报表批量上传数据
2、通过java代码生成Excel报表。
在Saas-Export系统中,也有大量的报表操作,那么接下来的课程就是一起来学习企业级的报表开发
目前世面上的Excel 分为两个大的版本Excel2003 和Excel2007 及以上两个版本;
两者之间的区别如下:
JXL只能对Excel进行操作,属于比较老的框架,它只支持到Excel 95-2000的版本。现在已经停止更新和维护。
POI是apache的项目,可对微软的Word,Excel,Ppt进行操作,包括office2003和2007,Excl2003和2007。poi现在一直有更新。所以现在主流使用POI。
Apache POI是Apache软件基金会的开源项目,由Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java语言操作Microsoft Office的功能。
Apache POI是目前最流行的操作Microsoft Office的API组件,借助POI可以方便的完成诸如:数据报表生成,数据批量上传,数据备份等工作
创建工程导入坐标:
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.0.1</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.0.1</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-schemas</artifactId> <version>4.0.1</version> </dependency>
HSSF提供读写Microsoft Excel XLS格式档案的功能。 2003版本
XSSF提供读写Microsoft Excel OOXML XLSX格式档案的功能。2007版本
API名称 | 说明 |
---|---|
Workbook | Excel的文档对象,针对不同的Excel类型分为:HSSFWorkbook(2003)和XSSFWorkbool(2007) |
Sheet | Excel的表单 |
Row | Excel的行 |
Cell | Excel的格子单元 |
Font | Excel字体 |
CellStyle | 格子单元样式 |
public class PoiTest01 { ? /** * 创建一个excel * 创建excel: * 1.创建工作簿 * 2.创建sheet * 3.创建行对象 * 4.创建单元格 * 5.对单元格赋值 * 6.设置样式 * 7.下载 */ @Test public void test() throws Exception { //1.创建一个工作簿 //Workbook wb = new HSSFWorkbook(); //处理excel2003版本 .xls Workbook wb = new XSSFWorkbook();//处理excel2007及以上版本 .xlsx //new SXSSFWorkbook();// 处理大数据量excel报表对象 //2.创建sheet Sheet sheet = wb.createSheet("abc"); //3.创建行对象 Row row = sheet.createRow(1);//接受参数 ,数组下标 //4.创建单元格 Cell cell = row.createCell(1);//数组下表 //5.设置单元格内容 cell.setCellValue("传智播客"); ? //设置样式 /** * 1.创建样式对象 * 2.通过样式对象指定样式 * 3.配置单元个样式 */ CellStyle cellStyle = wb.createCellStyle(); //通过样式对象指定样式 cellStyle.setBorderTop(BorderStyle.THIN); //细线 cellStyle.setBorderBottom(BorderStyle.THIN); //细线 cellStyle.setBorderLeft(BorderStyle.THIN); //细线 cellStyle.setBorderRight(BorderStyle.THIN); //细线 ? //字体 对象 Font font = wb.createFont(); font.setFontName("华文行楷"); font.setFontHeightInPoints((short)26);//字号 ? cellStyle.setFont(font); cell.setCellStyle(cellStyle); ? //指定行高和列宽 sheet.setColumnWidth(1,20*256); //列宽 不准确!!! row.setHeightInPoints(30); ? //6.将excel保存到本地磁盘中 FileOutputStream fos = new FileOutputStream("E:\\text.xlsx"); wb.write(fos); fos.close(); } }
public static void main(String[] args) throws Exception { //1.根据Excel 文件创建工作簿 Workbook wb = new XSSFWorkbook("C:\\demo.xlsx"); //2.获取Sheet Sheet sheet = wb.getSheetAt(0);//参数:索引 //3.获取Sheet 中的每一行,和每一个单元格,小于等于表中有效行的最后一行的行号,POI将行号从0开始 for (int rowNum = 0; rowNum <= sheet.getLastRowNum(); rowNum++) { Row row = sheet.getRow(rowNum);//根据索引获取每一个行 StringBuilder sb = new StringBuilder(); for (int cellNum = 2; cellNum < row.getLastCellNum(); cellNum++) { //根据索引获取每一个单元格 Cell cell = row.getCell(cellNum); //获取每一个单元格的内容 Object value = getCellValue(cell); sb.append(value).append("-"); } System.out.println(sb.toString()); } } public static Object getCellValue(Cell cell) { //1.获取到单元格的属性类型 CellType cellType = cell.getCellType(); //2.根据单元格数据类型获取数据,此处注意,cell中的日期格式其实就是数字格式 Object value = null; switch (cellType) { case STRING: value = cell.getStringCellValue(); break; case BOOLEAN: value = cell.getBooleanCellValue(); break; case NUMERIC: if (DateUtil.isCellDateFormatted(cell)) { //日期格式 value = cell.getDateCellValue(); } else { //数字 value = cell.getNumericCellValue(); } break; case FORMULA: //公式 value = cell.getCellFormula(); break; default: break; } return value; }
POI中有关样式的设置
//大标题的样式 public CellStyle bigTitle(Workbook wb){ CellStyle style = wb.createCellStyle(); Font font = wb.createFont(); font.setFontName("宋体"); font.setFontHeightInPoints((short)16); font.setBold(true);//字体加粗 style.setFont(font); style.setAlignment(HorizontalAlignment.CENTER); //横向居中 style.setVerticalAlignment(VerticalAlignment.CENTER); //纵向居中 return style; } //小标题的样式 public CellStyle title(Workbook wb){ CellStyle style = wb.createCellStyle(); Font font = wb.createFont(); font.setFontName("黑体"); font.setFontHeightInPoints((short)12); style.setFont(font); style.setAlignment(HorizontalAlignment.CENTER); //横向居中 style.setVerticalAlignment(VerticalAlignment.CENTER); //纵向居中 style.setBorderTop(BorderStyle.THIN); //上细线 style.setBorderBottom(BorderStyle.THIN); //下细线 style.setBorderLeft(BorderStyle.THIN); //左细线 style.setBorderRight(BorderStyle.THIN); //右细线 return style; } //文字样式 public CellStyle text(Workbook wb){ CellStyle style = wb.createCellStyle(); Font font = wb.createFont(); font.setFontName("Times New Roman"); font.setFontHeightInPoints((short)10); style.setFont(font); style.setAlignment(HorizontalAlignment.LEFT); //横向居左 style.setVerticalAlignment(VerticalAlignment.CENTER); //纵向居中 style.setBorderTop(BorderStyle.THIN); //上细线 style.setBorderBottom(BorderStyle.THIN); //下细线 style.setBorderLeft(BorderStyle.THIN); //左细线 style.setBorderRight(BorderStyle.THIN); //右细线 return style; }
原文:https://www.cnblogs.com/kitor/p/11099191.html