poi导出excel,不使用模板的
http://happyqing.iteye.com/blog/2075985
xls格式导出使用HSSFWorkbook,(这个暂时没有好办法)
xlsx格式导出以前使用***FWorkbook,可以使用新的S***FWorkbook(poi3.8+)
Workbook wb = new S***FWorkbook(1000); //大于1000行时会把之前的行写入硬盘
Row,Cell还跟之前的一样
官方样例
http://poi.apache.org/spreadsheet/how-to.html#s***f
- import junit.work.Assert;
- import org.apache.poi.ss.usermodel.Cell;
- import org.apache.poi.ss.usermodel.Row;
- import org.apache.poi.ss.usermodel.Sheet;
- import org.apache.poi.ss.usermodel.Workbook;
- import org.apache.poi.ss.util.CellReference;
- import org.apache.poi.***f.streaming.S***FWorkbook;
-
- public static void main(String[] args) throws Throwable {
- S***FWorkbook wb = new S***FWorkbook(100);
- Sheet sh = wb.createSheet();
- for(int rownum = 0; rownum < 1000; rownum++){
- Row row = sh.createRow(rownum);
- for(int cellnum = 0; cellnum < 10; cellnum++){
- Cell cell = row.createCell(cellnum);
- String address = new CellReference(cell).formatAsString();
- cell.setCellValue(address);
- }
-
- }
-
-
- for(int rownum = 0; rownum < 900; rownum++){
- Assert.assertNull(sh.getRow(rownum));
- }
-
-
- for(int rownum = 900; rownum < 1000; rownum++){
- Assert.assertNotNull(sh.getRow(rownum));
- }
-
- FileOutputStream out = new FileOutputStream("/temp/s***f.xlsx");
- wb.write(out);
- out.close();
-
- wb.dispose();
- }
值得注意的是S***FWorkbook只能写不能读。但是往往我们需要向一个Excel模版里导出数据,这样才更好提前定义里面的格式和vba代码。
这里就需要使用S***FWorkbook的另外一个构造函数:
S***FWorkbook(***FWorkbook workbook)
Construct a workbook from a template.
通过***FWorkbook来读取模版,然后用S***FWorkbook来设置样式和写数据,详细使用就参API吧。 http://poi.apache.org/apidocs/org/apache/poi/***f/streaming/S***FWorkbook.html