POI 操作 Excel
来源:互联网 发布:日本犯罪推理知乎 编辑:程序博客网 时间:2024/05/01 12:30
POI操作Excel 2003,2007后续版本是非常方便的,但是有时候我们需要创建的行数会很多或者列数很多,
对于程序猿来说,不可能用手动创建这种笨拙的方法 → _ →!!。
本示例读取模板后自动创建行,自动创建列(列数多少跟对象有多少属性相关)
本示例读取模板为例。
正题:
@ResponseBody@RequestMapping("/export/excel")public void excelExport(HttpServletResponse res, HttpServletRequest req){String filePath = req.getSession().getServletContext().getRealPath("/template/20170426.xlsx");String fileName = "2017-01-01";XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(filePath));//读取excel模板XSSFSheet sheet = workbook.getSheetAt(0);// 获取模板第一个sheetXSSFCellStyle style = workbook.getSheetAt(0).getRow(1).getCell(22).getCellStyle();//获取单元格样式List<TPaimaiExcelExportDto> exports = new ArrayList<TPaimaiExcelExportDto>();//模拟数据for (int i = 0; i < 50; i++) {createRow(exports, workbook, sheet, style);//创建数据行}res.setHeader("Content-disposition", "attachment; filename=" + new String(fileName.getBytes("GB2312"), "ISO_8859_1"));workbook.write(os);os.flush();os.close();}/** * <p> * 创建数据行 * </p> * * @param exports 数据 * @param workbook excel * @param sheet sheet * @param style 单元格样式 */private void createRow(List<TPaimaiExcelExportDto> exports, XSSFWorkbook workbook, XSSFSheet sheet, XSSFCellStyle style) {try {if (workbook != null) {XSSFRow row;XSSFCell cell = null;int rowNum = sheet.getLastRowNum();// 获取最后一行行号Map<String, String> map = new HashMap<String, String>();for (TPaimaiExcelExportDto excelExportDto : exports) {//遍历需要打印的数据row = sheet.createRow(rowNum + 1);//创建行row.setHeightInPoints(23);//设置行高//列数太多,读取对象属性,属性顺序按照excel表格定义 Field[] fields = excelExportDto.getClass().getDeclaredFields();// 获取对象属性(私有属性) 10个属性 就会创建10列String cellText = "-";if (fields != null) {for (int i = 0; i < fields.length; i++) {Field fd = fields[i];fd.setAccessible(true);Object obj = fd.get(excelExportDto);// 获取属性值cellText = formatCellContext(obj, fd.getName());//格式化单元格数据createCell(i, cellText, row, cell, style);//生成单元格}}rowNum++;//换行}}} catch (Exception e) {e.printStackTrace();}}/** * <p> * 生成单元格 * </p> * * @param cellNum 列 * @param text 单元格内容 * @param row 行 * @param cell 单元格 * @param style 单元格样式 */private void createCell(int cellNum, String text, XSSFRow row, XSSFCell cell, XSSFCellStyle style) {cell = row.createCell(cellNum);//创建单元格cell.setCellValue(new XSSFRichTextString(text));//设置单元格内容cell.setCellStyle(style);//设置单元格样式}/*** 格式化单元格内容** @param value 属性* @param propertyName 属性名称(此参数主要为了判断对某个属性做特殊处理)*if ("withLicenseYn".equals(propertyName)) { //示例* if (valCode == 10000000) {* cellContext = "否";* } else if (valCode == 10000001) {* cellContext = "是";* }* }* @return*/private String formatCellContext(Object value, String propertyName) {String cellContext = "-";//格式化double,保留两位小数if (value instanceof Double) {Double dub = (Double) value;cellContext = String.format("%.2f", object);}else if (value instanceof Date) {//格式化日期Date date = (Date) value;cellContext = DateUtil.simpleDateFormat(date, "yyyy/MM/dd");}else if (value instanceof String) {//字符串直接返回,除非有特殊处理cellContext = object.toString();}else if (value instanceof Integer) {//integer也可直接返回,除非有特出处理Integer valCode = (Integer) value;cellContext = valCode.toString();}else{//其他数据类型根据需要添加cellContext = "-";}return cellContext;}
效果:
阅读全文
2 0
- POI操作EXCEL
- POI操作EXCEL
- POI操作Excel文档
- 使用POI操作Excel
- poi操作excel文件
- poi操作excel文件
- poi 操作Excel
- POI操作Excel
- POI 操作excel
- POI 操作EXCEL
- poi操作excel文件
- 用POI操作Excel
- poi操作excel
- poi 操作 excel
- POI操作excel大全
- POI操作Excel总结
- POI操作EXCEL
- POI操作EXCEL(一)
- 相机常用术语解释
- Lua知识点四 编译·运行·错误信息
- java基本类型对应包装类的静态缓存
- socketcluster.js前端写法接受后端信息。
- 选择排序的两种实现(Java语言)di
- POI 操作 Excel
- JDK1.5/1.6/1.7之新特性总结
- android sqlite 数据库 orm
- 全选、全不选,批量操作
- 线程的生命周期--Java基础069
- InnoDB: Cannot allocate memory for the buffer pool
- ubuntu 基本命令-开启root登陆、设置root密码、配置镜像源
- Android Studio 构建包名提示错误
- Image-Loader详解