讀取和重寫 Workbooks
1
POIFSFileSystem fs =
2
3
new POIFSFileSystem(new FileInputStream("workbook.xls"));
4
5
HSSFWorkbook wb = new HSSFWorkbook(fs);
6
7
HSSFSheet sheet = wb.getSheetAt(0);
8
9
HSSFRow row = sheet.getRow(2);
10
11
HSSFCell cell = row.getCell((short)3);
12
13
if (cell == null)
14
15
cell = row.createCell((short)3);
16
17
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
18
19
cell.setCellValue("a test");
20
21
// 寫入文件
22
23
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
24
25
wb.write(fileOut);
26
27
fileOut.close();
28
29
在單元格中換行
1
HSSFWorkbook wb = new HSSFWorkbook();
2
3
HSSFSheet s = wb.createSheet();
4
5
HSSFRow r = null;
6
7
HSSFCell c = null;
8
9
HSSFCellStyle cs = wb.createCellStyle();
10
11
HSSFFont f = wb.createFont();
12
13
HSSFFont f2 = wb.createFont();
14
15
cs = wb.createCellStyle();
16
17
cs.setFont( f2 );
18
19
//開啟Word Wrap
20
21
cs.setWrapText( true );
22
23
r = s.createRow( (short) 2 );
24
25
r.setHeight( (short) 0x349 );
26
27
c = r.createCell( (short) 2 );
28
29
c.setCellType( HSSFCell.CELL_TYPE_STRING );
30
31
c.setCellValue( "Use "n with word wrap on to create a new line" );
32
33
c.setCellStyle( cs );
34
35
s.setColumnWidth( (short) 2, (short) ( ( 50 * 8 ) / ( (double) 1 / 20 ) ) );
36
37
FileOutputStream fileOut = new FileOutputStream( "workbook.xls" );
38
39
wb.write( fileOut );
40
41
fileOut.close();
42
43
數據格式化
1
HSSFWorkbook wb = new HSSFWorkbook();
2
3
HSSFSheet sheet = wb.createSheet("format sheet");
4
5
HSSFCellStyle style;
6
7
HSSFDataFormat format = wb.createDataFormat();
8
9
HSSFRow row;
10
11
HSSFCell cell;
12
13
short rowNum = 0;
14
15
short colNum = 0;
16
17
row = sheet.createRow(rowNum++);
18
19
cell = row.createCell(colNum);
20
21
cell.setCellValue(11111.25);
22
23
style = wb.createCellStyle();
24
25
style.setDataFormat(format.getFormat("0.0"));
26
27
cell.setCellStyle(style);
28
29
row = sheet.createRow(rowNum++);
30
31
cell = row.createCell(colNum);
32
33
cell.setCellValue(11111.25);
34
35
style = wb.createCellStyle();
36
37
style.setDataFormat(format.getFormat("#,##0.0000"));
38
39
cell.setCellStyle(style);
40
41
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
42
43
wb.write(fileOut);
44
45
fileOut.close();
46
47
使得一個Sheet適合一頁
1
HSSFWorkbook wb = new HSSFWorkbook();
2
3
HSSFSheet sheet = wb.createSheet("format sheet");
4
5
HSSFPrintSetup ps = sheet.getPrintSetup();
6
7
sheet.setAutobreaks(true);
8
9
ps.setFitHeight((short)1);
10
11
ps.setFitWidth((short)1);
12
13
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
14
15
wb.write(fileOut);
16
17
fileOut.close();
18
19
設置打印區域
1
HSSFWorkbook wb = new HSSFWorkbook();
2
3
HSSFSheet sheet = wb.createSheet("Sheet1");
4
5
wb.setPrintArea(0, "$A$1:$C$2");
6
7
//為第一個Sheet頁設置打印區域
8
9
//也可以這樣
10
11
//wb.setPrintArea(0, 0, 1, 0, 0) ,詳細參考java doc
12
13
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
14
15
wb.write(fileOut);
16
17
fileOut.close();
18
設置頁腳的頁數
1
HSSFWorkbook wb = new HSSFWorkbook();
2
3
HSSFSheet sheet = wb.createSheet("format sheet");
4
5
HSSFFooter footer = sheet.getFooter()
6
7
footer.setRight( "Page " + HSSFFooter.page() + " of " + HSSFFooter.numPages() );
8
9
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
10
11
wb.write(fileOut);
12
13
fileOut.close();
14
15
使用簡便的函數
這些函數保存在contrib并且提供了一些使用特征功能,例如設置合并單元格的邊框,不用創建新樣式改變樣式屬性。
1
HSSFWorkbook wb = new HSSFWorkbook();
2
3
HSSFSheet sheet1 = wb.createSheet( "new sheet" );
4
5
// 合并單元格
6
7
HSSFRow row = sheet1.createRow( (short) 1 );
8
9
HSSFRow row2 = sheet1.createRow( (short) 2 );
10
11
HSSFCell cell = row.createCell( (short) 1 );
12
13
cell.setCellValue( "This is a test of merging" );
14
15
Region region = new Region( 1, (short) 1, 4, (short) 4 );
16
17
sheet1.addMergedRegion( region );
18
19
// 設置邊框和顏色.
20
21
final short borderMediumDashed = HSSFCellStyle.BORDER_MEDIUM_DASHED;
22
23
HSSFRegionUtil.setBorderBottom( borderMediumDashed,
24
25
region, sheet1, wb );
26
27
HSSFRegionUtil.setBorderTop( borderMediumDashed,
28
29
region, sheet1, wb );
30
31
HSSFRegionUtil.setBorderLeft( borderMediumDashed,
32
33
region, sheet1, wb );
34
35
HSSFRegionUtil.setBorderRight( borderMediumDashed,
36
37
region, sheet1, wb );
38
39
HSSFRegionUtil.setBottomBorderColor(HSSFColor.AQUA.index, region, sheet1, wb);
40
41
HSSFRegionUtil.setTopBorderColor(HSSFColor.AQUA.index, region, sheet1, wb);
42
43
HSSFRegionUtil.setLeftBorderColor(HSSFColor.AQUA.index, region, sheet1, wb);
44
45
HSSFRegionUtil.setRightBorderColor(HSSFColor.AQUA.index, region, sheet1, wb);
46
47
// 展示HSSFCellUtil類的用法
48
49
HSSFCellStyle style = wb.createCellStyle();
50
51
style.setIndention((short)4);
52
53
HSSFCellUtil.createCell(row, 8, "This is the value of the cell", style);
54
55
HSSFCell cell2 = HSSFCellUtil.createCell( row2, 8, "This is the value of the cell");
56
57
HSSFCellUtil.setAlignment(cell2, wb, HSSFCellStyle.ALIGN_CENTER);
58
59
// 寫入文件
60
61
FileOutputStream fileOut = new FileOutputStream( "workbook.xls" );
62
63
wb.write( fileOut );
64
65
fileOut.close();
66
67
在Sheet頁中上下移動行
1
HSSFWorkbook wb = new HSSFWorkbook();
2
3
HSSFSheet sheet = wb.createSheet("row sheet");
4
5
//創建不同的行列
6
7
// 將6-11行移動到0-5行
8
9
sheet.shiftRows(5, 10, -5);
10
11
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
12
13
wb.write(fileOut);
14
15
fileOut.close();
16
17
設置一個Sheet頁為被選中的
1
HSSFWorkbook wb = new HSSFWorkbook();
2
3
HSSFSheet sheet = wb.createSheet("row sheet");
4
5
sheet.setSelected(true);
6
7
// 創建不同的行列。。。
8
9
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
10
11
wb.write(fileOut);
12
13
fileOut.close();
14
15
設置放大屬性
1
The zoom is expressed as a fraction. For example to express a zoom of 75% use 3 for the numerator and 4 for the denominator.
2
3
Zoom被明確為一個分數,例如下面的75%使用3作為分子,4作為分母。
4
5
HSSFWorkbook wb = new HSSFWorkbook();
6
7
HSSFSheet sheet1 = wb.createSheet("new sheet");
8
9
sheet1.setZoom(3,4); // 75%放大
10
11
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
12
13
wb.write(fileOut);
14
15
fileOut.close();
16
拆分和凍結窗口
這里有你創建的兩種窗口:凍結窗口和拆分窗口。
一個凍結窗口是被行和列拆分開的,可以按照如下設置創建凍結窗口。
1
sheet1.createFreezePane( 3, 2, 3, 2 );
前兩個參數是你要用來拆分的列數和行數。后兩個參數是下面窗口的可見象限,其中第三個參數是右邊區域可見的左邊列數,第四個參數是下面區域可見的首行。
拆分可以將區域分成四個工作區。拆分發生在像素級別而且用戶可以通過拖拽到新的位置來判斷。
用如下方式拆分窗口:
1
sheet2.createSplitPane( 2000, 2000, 0, 0, HSSFSheet.PANE_LOWER_LEFT );
The first parameter is the x position of the split. This is in 1/20th of a point. A point in this case seems to equate to a pixel. The second parameter is the y position of the split. Again in 1/20th of a point.
第一個參數是拆分的x位置。這里單位是一個點的1/20,在這種比例下點看起來是一個像素。第二個參數是拆分的y位置,也是一個點的1/20。第三、四個參數同上。最后一個參數說明當前哪個窗口有焦點,四個選擇HSSFSheet.PANE_LOWER_LEFT, PANE_LOWER_RIGHT, PANE_UPPER_RIGHT or PANE_UPPER_LEFT。
反復的行和列(設置打印標題)
在打印輸出的時候需要使用HSSFWorkbook類的setRepeatingRowsAndColumns()方法反復的設置行和列。
這個方法包含5個參數,第一個參數是Sheet頁的索引(從0開始算),第二、三個參數是重寫的列的范圍。不使用重寫功能的話可以設置-1代替。第四、五個參數是重寫的行的范圍。不使用重寫功能的話可以設置-1代替。
1
HSSFWorkbook wb = new HSSFWorkbook();
2
3
HSSFSheet sheet1 = wb.createSheet("new sheet");
4
5
HSSFSheet sheet2 = wb.createSheet("second sheet");
6
7
// 第一個Sheet設置從0到2的列
8
9
wb.setRepeatingRowsAndColumns(0,0,2,-1,-1);
10
11
// 第二個Sheet設置行和列
12
13
wb.setRepeatingRowsAndColumns(1,4,5,1,2);
14
15
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
16
17
wb.write(fileOut);
18
19
fileOut.close();
20
21
頁眉和頁腳
這是個頁眉的例子,但是頁腳也同樣適用.
1
HSSFWorkbook wb = new HSSFWorkbook();
2
3
HSSFSheet sheet = wb.createSheet("new sheet");
4
5
HSSFHeader header = sheet.getHeader();
6
7
header.setCenter("Center Header");
8
9
header.setLeft("Left Header");
10
11
header.setRight(HSSFHeader.font("Stencil-Normal", "Italic") +
12
13
HSSFHeader.fontSize((short) 16) + "Right w/ Stencil-Normal Italic font and size 16");
14
15
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
16
17
wb.write(fileOut);
18
19
fileOut.close();
posted on 2008-11-25 12:01
Vincent-chen 閱讀(1186)
評論(0) 編輯 收藏 所屬分類:
POI 、
Print