• java poi 生成多个sheet


    我的需求是:在一个表格中生成多个sheet,每个sheet的名称动态指定,每个sheet内的内容动态指定。生成的文件名动态指定。

    工具类:

    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 ExportExcelUtils {

    /**
    * @Title: exportExcel
    * @Description: 导出Excel的方法
    * @author: evan @ 2014-01-09
    * @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<List<String>> result,
    OutputStream out) throws Exception {
    // 生成一个表格
    HSSFSheet sheet = workbook.createSheet();
    workbook.setSheetName(sheetNum, sheetTitle,
    HSSFWorkbook.ENCODING_UTF_16);
    // 设置表格默认列宽度为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.setEncoding(HSSFCell.ENCODING_UTF_16);
    cell.setCellStyle(style);
    HSSFRichTextString text = new HSSFRichTextString(headers[i]);
    cell.setCellValue(text.toString());
    }
    // 遍历集合数据,产生数据行
    if (result != null) {
    int index = 1;
    for (List<String> m : result) {
    row = sheet.createRow(index);
    int cellIndex = 0;
    for (String str : m) {
    HSSFCell cell = row.createCell((short) cellIndex);
    cell.setEncoding(HSSFCell.ENCODING_UTF_16);
    cell.setCellValue(str.toString());
    cellIndex++;
    }
    index++;
    }
    }
    }
    }

    测试数据:(再D盘下生成test.xls文件,并有多个sheet)

    package test;

    import java.io.FileOutputStream;
    import java.io.OutputStream;
    import java.util.ArrayList;
    import java.util.List;

    import org.apache.poi.hssf.usermodel.HSSFWorkbook;

    public class PoiTest {

    @SuppressWarnings("unchecked")
    public static void main(String[] args) {
    try {
    OutputStream out = new FileOutputStream("D:\test.xls");
    List<List<String>> data = new ArrayList<List<String>>();
    for (int i = 1; i < 5; i++) {
    List rowData = new ArrayList();
    rowData.add(String.valueOf(i));
    rowData.add("东霖柏鸿");
    data.add(rowData);
    }
    String[] headers = { "ID", "用户名" };
    ExportExcelUtils eeu = new ExportExcelUtils();
    HSSFWorkbook workbook = new HSSFWorkbook();
    eeu.exportExcel(workbook, 0, "上海", headers, data, out);
    eeu.exportExcel(workbook, 1, "深圳", headers, data, out);
    eeu.exportExcel(workbook, 2, "广州", headers, data, out);
    //原理就是将所有的数据一起写入,然后再关闭输入流。
    workbook.write(out);
    out.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }

    }

    如果你有同样的需求,你能看到这。你肯定能设计出你想要的报表格式了。

    原文:https://blog.csdn.net/zl544434558/article/details/18034939

  • 相关阅读:
    占位博客
    占位博客
    占位博客
    占位
    占位
    占位
    占位
    占位
    python字典设置初始值setdefault()与get()
    自然语言处理如何入门
  • 原文地址:https://www.cnblogs.com/rongyao/p/10487084.html
Copyright © 2020-2023  润新知