我的需求是:在一个表格中生成多个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

最新文章

  1. jQuery介绍 DOM对象和jQuery对象的转换与区别
  2. NSDate 格式化 NSDate to NSString
  3. 用PHP链接mysql数据库
  4. apache activemq的重连
  5. 使用Netty收发二进制报文问题记
  6. Codeforces 599D Spongebob and Squares(数学)
  7. Qt写的截图软件包含源代码和可执行程序
  8. Android NOtification 使用(震动 闪屏 铃声)
  9. 【转】android TV CTS 4.0.3_r1测试
  10. struts2 &amp;lt;s: select 标签值
  11. STM8建立IAR工程
  12. 图解Git命令
  13. redis的sentinel主从切换(failover)与Jedis线程池自动重连
  14. javascript 思维导图 总结
  15. jdbc 报错解决办法
  16. spring cloud 配置zuul实用
  17. phtyon
  18. java将图片传为设定编码值显示(可做刺绣)
  19. 备份与还原ORACLE数据库(通过CMD命令执行)
  20. jQuery validator plugin之Validator

热门文章

  1. 解MySQL基准测试和sysbench工具
  2. [转帖]java注解与注释注解区别
  3. 安装oracle数据库11g及问题解决
  4. PAT A1016 Phone Bills (25)
  5. 学习 Laravel - Web 开发实战入门笔记(1)
  6. 屹今为止最好用的HTTP客户端命令行工具-接口调试神器HTTPie
  7. go install
  8. CF 666C &amp; 牛客 36D
  9. 【原创】大叔案例分享(5)id打通
  10. pycharm2017.3.3永久激活(转载)