博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解读POI操作之表格导出(生成多个sheet)
阅读量:6613 次
发布时间:2019-06-24

本文共 4327 字,大约阅读时间需要 14 分钟。

hot3.png

    Java表格导出的方式有很多,有前端弹出对话框的形式,有poi操作,有jxl操作,可以说实现的形式多种多样。下面我用的只是其中一个poi操作Excel表格,同时可以在一张表格中生成多个sheet,后端实现,动态指定,无前端操作对话框。

    记得导入poi相关jar包,下面直接看代码吧:

package test;    import java.io.OutputStream;  import java.util.List;    import org.apache.poi.hssf.usermodel.HSSFCell;  import org.apache.poi.hssf.usermodel.HSSFCellStyle;  import org.apache.poi.hssf.usermodel.HSSFFont;  import org.apache.poi.hssf.usermodel.HSSFRichTextString;  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.hssf.util.HSSFColor;    public class ExcelUtils {        /**          * @Description: 导出Excel      * @param workbook       * @param sheetNum (sheet的位置,0表示第一个表格中的第一个sheet)      * @param sheetTitle  (sheet的名称)      * @param headers    (表格的列标题)      * @param result   (表格的数据)      * @param out  (输出流)      * @throws Exception      */      public void exportExcel(HSSFWorkbook workbook, int sheetNum,              String sheetTitle, String[] headers, List
> result, OutputStream out) throws Exception { // 生成一个表格 HSSFSheet sheet = workbook.createSheet(); workbook.setSheetName(sheetNum, sheetTitle); // 设置表格默认列宽度为20个字节 sheet.setDefaultColumnWidth((short) 20); // 生成一个样式 HSSFCellStyle style = workbook.createCellStyle(); // 设置这些样式 style.setFillForegroundColor(HSSFColor.PALE_BLUE.index); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); style.setBorderBottom(HSSFCellStyle.BORDER_THIN); style.setBorderLeft(HSSFCellStyle.BORDER_THIN); style.setBorderRight(HSSFCellStyle.BORDER_THIN); style.setBorderTop(HSSFCellStyle.BORDER_THIN); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 生成一个字体 HSSFFont font = workbook.createFont(); font.setColor(HSSFColor.BLACK.index); font.setFontHeightInPoints((short) 12); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 把字体应用到当前的样式 style.setFont(font); // 指定当单元格内容显示不下时自动换行 style.setWrapText(true); // 产生表格标题行 HSSFRow row = sheet.createRow(0); for (int i = 0; i < headers.length; i++) { HSSFCell cell = row.createCell((short) i); cell.setCellStyle(style); HSSFRichTextString text = new HSSFRichTextString(headers[i]); cell.setCellValue(text.toString()); } // 遍历集合数据,产生数据行 if (result != null) { int index = 1; for (List
m : result) { row = sheet.createRow(index); int cellIndex = 0; for (String str : m) { HSSFCell cell = row.createCell((short) cellIndex); cell.setCellValue(str.toString()); cellIndex++; } index++; } } } }

    使用时也很方便:

public static void main(String[] args) {       try {         //excel导出的路径和名称           OutputStream out = new FileOutputStream("D:\\test.xls");         //生成两个sheet,不同的数据源和列标题         List
> data1 = new ArrayList
>(); List
> data2 = new ArrayList
>(); String[] headers1 = { "ID", "年龄","用户名" }; String[] headers2 = { "ID", "用户名" }; //注意int等其他类型转换成String类型 for (int i = 1; i < 5; i++) { List rowData = new ArrayList(); rowData.add(String.valueOf(i)); rowData.add(String.valueOf(i+20)); rowData.add("小明"+i+"号"); data1.add(rowData); } for (int i = 1; i < 5; i++) { List rowData = new ArrayList(); rowData.add(String.valueOf(i)); rowData.add("小明"+i+"号"); data2.add(rowData); } ExcelUtils eeu = new ExportExcelUtils(); HSSFWorkbook workbook = new HSSFWorkbook(); eeu.exportExcel(workbook, 0, "sheet1", headers1, data1, out); eeu.exportExcel(workbook, 1, "sheet2", headers2, data2, out); //将所有的数据一起写入,然后再关闭输入流。 workbook.write(out); out.close(); } catch (Exception e) { e.printStackTrace(); } }

    从上面的调用可以看出:

    (1)excel保存的路径和名称可以自己定义;

    (2)数据源可以用其他地方获取,然后再赋值添加到现有的data中;

    (3)每个sheet中的列可以不同,也可以相同;

    (4)生成的sheet的多少取决于你;

    好了,上面就是一个简单实用的excel导出方法,希望大家喜欢。

转载于:https://my.oschina.net/u/3747963/blog/1786281

你可能感兴趣的文章
[转]iOS 应用程序的生命周期
查看>>
mybatis中传集合时 报异常 invalid comparison: java.util.Arrays$ArrayList and java.lang.String
查看>>
Android-Charts发布,Android图形图表控件
查看>>
MACACA===gradle下载和安装
查看>>
Mastering Django: Core 精通 Django
查看>>
php加密解密函数
查看>>
对Java多线程技术中所有方法的详细解析
查看>>
adb shell下查看sqlite数据库
查看>>
表格排序的具体案例(包括数字和汉字排序)
查看>>
C语言基础(三)
查看>>
Linux chgrp
查看>>
Docker运行程序报错 WARNING: IPv4 forwarding is disabled. Networking will not work
查看>>
[Selenium] IOS 之 ios-driver
查看>>
文本输入的几种特殊验证方式
查看>>
BZOJ3195:[JXOI2012]奇怪的道路——题解
查看>>
BZOJ4034:[HAOI2015]树上操作——题解
查看>>
47. Ext.form.Field.prototype.msgTarget
查看>>
jsp显示计算数值, 四舍五入
查看>>
HTML和CSS疑点解析
查看>>
剑指offer 快速排序
查看>>