自定义导出

  1. package lcy._41_50;
  2.  
     
  3.  
    import java.io.FileOutputStream;
  4.  
    import java.io.OutputStream;
  5.  
    import java.net.URLEncoder;
  6.  
     
  7.  
    import javax.servlet.http.HttpServletResponse;
  8.  
     
  9.  
    import org.apache.poi.hssf.usermodel.HSSFCell;
  10.  
    import org.apache.poi.hssf.usermodel.HSSFCellStyle;
  11.  
    import org.apache.poi.hssf.usermodel.HSSFFont;
  12.  
    import org.apache.poi.hssf.usermodel.HSSFRow;
  13.  
    import org.apache.poi.hssf.usermodel.HSSFSheet;
  14.  
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  15.  
    import org.apache.poi.hssf.util.CellRangeAddress;
  16.  
    import org.apache.poi.hssf.util.HSSFColor;
  17.  
     
  18.  
    @SuppressWarnings( { "deprecation" })
  19.  
    public class Test46 {
  20.  
     
  21.  
    public static void main(String[] args) throws Exception {
  22.  
     
  23.  
    String sheetName = "用车统计表单";
  24.  
    String titleName = "用车申请数据统计表";
  25.  
    String fileName = "用车申请统计表单";
  26.  
    int columnNumber = 3;
  27.  
    int[] columnWidth = { 10, 20, 30 };
  28.  
    String[][] dataList = { { "001", "2015-01-01", "IT" },
  29.  
    { "002", "2015-01-02", "市场部" }, { "003", "2015-01-03", "测试" } };
  30.  
    String[] columnName = { "单号", "申请时间", "申请部门" };
  31.  
    new Test46().ExportNoResponse(sheetName, titleName, fileName,
  32.  
    columnNumber, columnWidth, columnName, dataList);
  33.  
    }
  34.  
     
  35.  
    public void ExportWithResponse(String sheetName, String titleName,
  36.  
    String fileName, int columnNumber, int[] columnWidth,
  37.  
    String[] columnName, String[][] dataList,
  38.  
    HttpServletResponse response) throws Exception {
  39.  
    if (columnNumber == columnWidth.length&& columnWidth.length == columnName.length) {
  40.  
    // 第一步,创建一个webbook,对应一个Excel文件
  41.  
    HSSFWorkbook wb = new HSSFWorkbook();
  42.  
    // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
  43.  
    HSSFSheet sheet = wb.createSheet(sheetName);
  44.  
    // sheet.setDefaultColumnWidth(15); //统一设置列宽
  45.  
    for (int i = 0; i < columnNumber; i++)
  46.  
    {
  47.  
    for (int j = 0; j <= i; j++)
  48.  
    {
  49.  
    if (i == j)
  50.  
    {
  51.  
    sheet.setColumnWidth(i, columnWidth[j] * 256); // 单独设置每列的宽
  52.  
    }
  53.  
    }
  54.  
    }
  55.  
    // 创建第0行 也就是标题
  56.  
    HSSFRow row1 = sheet.createRow((int) 0);
  57.  
    row1.setHeightInPoints(50);// 设备标题的高度
  58.  
    // 第三步创建标题的单元格样式style2以及字体样式headerFont1
  59.  
    HSSFCellStyle style2 = wb.createCellStyle();
  60.  
    style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  61.  
    style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
  62.  
    style2.setFillForegroundColor(HSSFColor.LIGHT_TURQUOISE.index);
  63.  
    style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
  64.  
    HSSFFont headerFont1 = (HSSFFont) wb.createFont(); // 创建字体样式
  65.  
    headerFont1.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 字体加粗
  66.  
    headerFont1.setFontName("黑体"); // 设置字体类型
  67.  
    headerFont1.setFontHeightInPoints((short) 15); // 设置字体大小
  68.  
    style2.setFont(headerFont1); // 为标题样式设置字体样式
  69.  
     
  70.  
    HSSFCell cell1 = row1.createCell(0);// 创建标题第一列
  71.  
    sheet.addMergedRegion(new CellRangeAddress(0, 0, 0,
  72.  
    columnNumber - 1)); // 合并列标题
  73.  
    cell1.setCellValue(titleName); // 设置值标题
  74.  
    cell1.setCellStyle(style2); // 设置标题样式
  75.  
     
  76.  
    // 创建第1行 也就是表头
  77.  
    HSSFRow row = sheet.createRow((int) 1);
  78.  
    row.setHeightInPoints(37);// 设置表头高度
  79.  
     
  80.  
    // 第四步,创建表头单元格样式 以及表头的字体样式
  81.  
    HSSFCellStyle style = wb.createCellStyle();
  82.  
    style.setWrapText(true);// 设置自动换行
  83.  
    style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  84.  
    style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 创建一个居中格式
  85.  
     
  86.  
    style.setBottomBorderColor(HSSFColor.BLACK.index);
  87.  
    style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
  88.  
    style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
  89.  
    style.setBorderRight(HSSFCellStyle.BORDER_THIN);
  90.  
    style.setBorderTop(HSSFCellStyle.BORDER_THIN);
  91.  
     
  92.  
    HSSFFont headerFont = (HSSFFont) wb.createFont(); // 创建字体样式
  93.  
    headerFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 字体加粗
  94.  
    headerFont.setFontName("黑体"); // 设置字体类型
  95.  
    headerFont.setFontHeightInPoints((short) 10); // 设置字体大小
  96.  
    style.setFont(headerFont); // 为标题样式设置字体样式
  97.  
     
  98.  
    // 第四.一步,创建表头的列
  99.  
    for (int i = 0; i < columnNumber; i++)
  100.  
    {
  101.  
    HSSFCell cell = row.createCell(i);
  102.  
    cell.setCellValue(columnName[i]);
  103.  
    cell.setCellStyle(style);
  104.  
    }
  105.  
     
  106.  
    // 第五步,创建单元格,并设置值
  107.  
    for (int i = 0; i < dataList.length; i++)
  108.  
    {
  109.  
    row = sheet.createRow((int) i + 2);
  110.  
    // 为数据内容设置特点新单元格样式1 自动换行 上下居中
  111.  
    HSSFCellStyle zidonghuanhang = wb.createCellStyle();
  112.  
    zidonghuanhang.setWrapText(true);// 设置自动换行
  113.  
    zidonghuanhang.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 创建一个居中格式
  114.  
     
  115.  
    // 设置边框
  116.  
    zidonghuanhang.setBottomBorderColor(HSSFColor.BLACK.index);
  117.  
    zidonghuanhang.setBorderBottom(HSSFCellStyle.BORDER_THIN);
  118.  
    zidonghuanhang.setBorderLeft(HSSFCellStyle.BORDER_THIN);
  119.  
    zidonghuanhang.setBorderRight(HSSFCellStyle.BORDER_THIN);
  120.  
    zidonghuanhang.setBorderTop(HSSFCellStyle.BORDER_THIN);
  121.  
     
  122.  
    // 为数据内容设置特点新单元格样式2 自动换行 上下居中左右也居中
  123.  
    HSSFCellStyle zidonghuanhang2 = wb.createCellStyle();
  124.  
    zidonghuanhang2.setWrapText(true);// 设置自动换行
  125.  
    zidonghuanhang2
  126.  
    .setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 创建一个上下居中格式
  127.  
    zidonghuanhang2.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中
  128.  
     
  129.  
    // 设置边框
  130.  
    zidonghuanhang2.setBottomBorderColor(HSSFColor.BLACK.index);
  131.  
    zidonghuanhang2.setBorderBottom(HSSFCellStyle.BORDER_THIN);
  132.  
    zidonghuanhang2.setBorderLeft(HSSFCellStyle.BORDER_THIN);
  133.  
    zidonghuanhang2.setBorderRight(HSSFCellStyle.BORDER_THIN);
  134.  
    zidonghuanhang2.setBorderTop(HSSFCellStyle.BORDER_THIN);
  135.  
    HSSFCell datacell = null;
  136.  
    for (int j = 0; j < columnNumber; j++)
  137.  
    {
  138.  
    datacell = row.createCell(j);
  139.  
    datacell.setCellValue(dataList[i][j]);
  140.  
    datacell.setCellStyle(zidonghuanhang2);
  141.  
    }
  142.  
    }
  143.  
     
  144.  
    // 第六步,将文件存到浏览器设置的下载位置
  145.  
    String filename = fileName + ".xls";
  146.  
    response.setContentType("application/ms-excel;charset=UTF-8");
  147.  
    response.setHeader("Content-Disposition", "attachment;filename="
  148.  
    .concat(String.valueOf(URLEncoder.encode(filename, "UTF-8"))));
  149.  
    OutputStream out = response.getOutputStream();
  150.  
    try {
  151.  
    wb.write(out);// 将数据写出去
  152.  
    String str = "导出" + fileName + "成功!";
  153.  
    System.out.println(str);
  154.  
    } catch (Exception e) {
  155.  
    e.printStackTrace();
  156.  
    String str1 = "导出" + fileName + "失败!";
  157.  
    System.out.println(str1);
  158.  
    } finally {
  159.  
    out.close();
  160.  
    }
  161.  
     
  162.  
    } else {
  163.  
    System.out.println("列数目长度名称三个数组长度要一致");
  164.  
    }
  165.  
     
  166.  
    }
  167.  
     
  168.  
    public void ExportNoResponse(String sheetName, String titleName,
  169.  
    String fileName, int columnNumber, int[] columnWidth,
  170.  
    String[] columnName, String[][] dataList) throws Exception {
  171.  
    if (columnNumber == columnWidth.length&& columnWidth.length == columnName.length) {
  172.  
    // 第一步,创建一个webbook,对应一个Excel文件
  173.  
    HSSFWorkbook wb = new HSSFWorkbook();
  174.  
    // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
  175.  
    HSSFSheet sheet = wb.createSheet(sheetName);
  176.  
    // sheet.setDefaultColumnWidth(15); //统一设置列宽
  177.  
    for (int i = 0; i < columnNumber; i++)
  178.  
    {
  179.  
    for (int j = 0; j <= i; j++)
  180.  
    {
  181.  
    if (i == j)
  182.  
    {
  183.  
    sheet.setColumnWidth(i, columnWidth[j] * 256); // 单独设置每列的宽
  184.  
    }
  185.  
    }
  186.  
    }
  187.  
    // 创建第0行 也就是标题
  188.  
    HSSFRow row1 = sheet.createRow((int) 0);
  189.  
    row1.setHeightInPoints(50);// 设备标题的高度
  190.  
    // 第三步创建标题的单元格样式style2以及字体样式headerFont1
  191.  
    HSSFCellStyle style2 = wb.createCellStyle();
  192.  
    style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  193.  
    style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
  194.  
    style2.setFillForegroundColor(HSSFColor.LIGHT_TURQUOISE.index);
  195.  
    style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
  196.  
    HSSFFont headerFont1 = (HSSFFont) wb.createFont(); // 创建字体样式
  197.  
    headerFont1.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 字体加粗
  198.  
    headerFont1.setFontName("黑体"); // 设置字体类型
  199.  
    headerFont1.setFontHeightInPoints((short) 15); // 设置字体大小
  200.  
    style2.setFont(headerFont1); // 为标题样式设置字体样式
  201.  
     
  202.  
    HSSFCell cell1 = row1.createCell(0);// 创建标题第一列
  203.  
    sheet.addMergedRegion(new CellRangeAddress(0, 0, 0,
  204.  
    columnNumber - 1)); // 合并第0到第17列
  205.  
    cell1.setCellValue(titleName); // 设置值标题
  206.  
    cell1.setCellStyle(style2); // 设置标题样式
  207.  
     
  208.  
    // 创建第1行 也就是表头
  209.  
    HSSFRow row = sheet.createRow((int) 1);
  210.  
    row.setHeightInPoints(37);// 设置表头高度
  211.  
     
  212.  
    // 第四步,创建表头单元格样式 以及表头的字体样式
  213.  
    HSSFCellStyle style = wb.createCellStyle();
  214.  
    style.setWrapText(true);// 设置自动换行
  215.  
    style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  216.  
    style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 创建一个居中格式
  217.  
     
  218.  
    style.setBottomBorderColor(HSSFColor.BLACK.index);
  219.  
    style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
  220.  
    style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
  221.  
    style.setBorderRight(HSSFCellStyle.BORDER_THIN);
  222.  
    style.setBorderTop(HSSFCellStyle.BORDER_THIN);
  223.  
     
  224.  
    HSSFFont headerFont = (HSSFFont) wb.createFont(); // 创建字体样式
  225.  
    headerFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 字体加粗
  226.  
    headerFont.setFontName("黑体"); // 设置字体类型
  227.  
    headerFont.setFontHeightInPoints((short) 10); // 设置字体大小
  228.  
    style.setFont(headerFont); // 为标题样式设置字体样式
  229.  
     
  230.  
    // 第四.一步,创建表头的列
  231.  
    for (int i = 0; i < columnNumber; i++)
  232.  
    {
  233.  
    HSSFCell cell = row.createCell(i);
  234.  
    cell.setCellValue(columnName[i]);
  235.  
    cell.setCellStyle(style);
  236.  
    }
  237.  
     
  238.  
    // 第五步,创建单元格,并设置值
  239.  
    for (int i = 0; i < dataList.length; i++)
  240.  
    {
  241.  
    row = sheet.createRow((int) i + 2);
  242.  
    // 为数据内容设置特点新单元格样式1 自动换行 上下居中
  243.  
    HSSFCellStyle zidonghuanhang = wb.createCellStyle();
  244.  
    zidonghuanhang.setWrapText(true);// 设置自动换行
  245.  
    zidonghuanhang
  246.  
    .setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 创建一个居中格式
  247.  
     
  248.  
    // 设置边框
  249.  
    zidonghuanhang.setBottomBorderColor(HSSFColor.BLACK.index);
  250.  
    zidonghuanhang.setBorderBottom(HSSFCellStyle.BORDER_THIN);
  251.  
    zidonghuanhang.setBorderLeft(HSSFCellStyle.BORDER_THIN);
  252.  
    zidonghuanhang.setBorderRight(HSSFCellStyle.BORDER_THIN);
  253.  
    zidonghuanhang.setBorderTop(HSSFCellStyle.BORDER_THIN);
  254.  
     
  255.  
    // 为数据内容设置特点新单元格样式2 自动换行 上下居中左右也居中
  256.  
    HSSFCellStyle zidonghuanhang2 = wb.createCellStyle();
  257.  
    zidonghuanhang2.setWrapText(true);// 设置自动换行
  258.  
    zidonghuanhang2
  259.  
    .setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 创建一个上下居中格式
  260.  
    zidonghuanhang2.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中
  261.  
     
  262.  
    // 设置边框
  263.  
    zidonghuanhang2.setBottomBorderColor(HSSFColor.BLACK.index);
  264.  
    zidonghuanhang2.setBorderBottom(HSSFCellStyle.BORDER_THIN);
  265.  
    zidonghuanhang2.setBorderLeft(HSSFCellStyle.BORDER_THIN);
  266.  
    zidonghuanhang2.setBorderRight(HSSFCellStyle.BORDER_THIN);
  267.  
    zidonghuanhang2.setBorderTop(HSSFCellStyle.BORDER_THIN);
  268.  
    HSSFCell datacell = null;
  269.  
    for (int j = 0; j < columnNumber; j++)
  270.  
    {
  271.  
    datacell = row.createCell(j);
  272.  
    datacell.setCellValue(dataList[i][j]);
  273.  
    datacell.setCellStyle(zidonghuanhang2);
  274.  
    }
  275.  
    }
  276.  
     
  277.  
    // 第六步,将文件存到指定位置
  278.  
    try {
  279.  
    FileOutputStream fout = new FileOutputStream("D:students.xls");
  280.  
    wb.write(fout);
  281.  
    String str = "导出" + fileName + "成功!";
  282.  
    System.out.println(str);
  283.  
    fout.close();
  284.  
    } catch (Exception e) {
  285.  
    e.printStackTrace();
  286.  
    String str1 = "导出" + fileName + "失败!";
  287.  
    System.out.println(str1);
  288.  
    }
  289.  
    } else {
  290.  
    System.out.println("列数目长度名称三个数组长度要一致");
  291.  
    }
  292.  
     
  293.  
    }
  294.  
     
  295.  
posted @ 2018-07-24 14:15  up-zyn  阅读(472)  评论(0)    收藏  举报