javapoi詳細教程,apache poi使用例_4.Apache POI使用詳解

 2023-11-30 阅读 24 评论 0

摘要:轉載自:http://www.cnblogs.com/lukelook/p/8660798.htmljavapoi詳細教程,一.POI結構與常用類1.POI介紹Apache POI是Apache軟件基金會的開源項目,POI提供API給Java程序對Microsoft Office格式檔案讀和寫的功能。 .NET的開發人員則可以利用NPOI (POI for .NET)

轉載自:http://www.cnblogs.com/lukelook/p/8660798.html

javapoi詳細教程,一.POI結構與常用類

1.POI介紹

Apache POI是Apache軟件基金會的開源項目,POI提供API給Java程序對Microsoft Office格式檔案讀和寫的功能。 .NET的開發人員則可以利用NPOI (POI for .NET) 來存取 Microsoft Office文檔的功能

2.POI結構說明

包名稱說明

HSSF提供讀寫Microsoft Excel XLS格式檔案的功能。

XSSF提供讀寫Microsoft Excel OOXML XLSX格式檔案的功能。

HWPF提供讀寫Microsoft Word DOC格式檔案的功能。

HSLF提供讀寫Microsoft PowerPoint格式檔案的功能。

HDGF提供讀Microsoft Visio格式檔案的功能。

HPBF提供讀Microsoft Publisher格式檔案的功能。

HSMF提供讀Microsoft Outlook格式檔案的功能。

3.POI常用類說明

類名? ??? ??? ??? ??說明

HSSFWorkbook? ??? ??Excel的文檔對象

HSSFSheetExcel的表單

HSSFRowExcel的行

HSSFCellExcel的格子單元

HSSFFont? ??? ??? ??Excel字體

HSSFDataFormat? ????格子單元的日期格式

HSSFHeader? ??? ????Excel文檔Sheet的頁眉

HSSFFooter? ??? ????Excel文檔Sheet的頁腳

HSSFCellStyle? ??? ?格子單元樣式

HSSFDateUtil? ??? ??日期

HSSFPrintSetup? ????打印

HSSFErrorConstants ?錯誤信息

二.簡單的實例代碼

package com.my.utils;

import java.io.FileOutputStream;

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

import org.apache.poi.hssf.util.HSSFColor;

import org.apache.poi.ss.usermodel.Cell;

import org.apache.poi.ss.usermodel.CellStyle;

import org.apache.poi.ss.usermodel.Row;

import org.apache.poi.ss.usermodel.Sheet;

import org.apache.poi.ss.usermodel.Workbook;

public class UsePoiCreateExcle {

public static void main(String[] args) {

// TODO Auto-generated method stub

String path = "D:\\java\\test\\test.xls";

// create workbook

Workbook workbook = new HSSFWorkbook();

// create sheet

Sheet sheet1 = workbook.createSheet("teacher");

Sheet sheet2 = workbook.createSheet("student");

// 設置為當前頁面

workbook.setActiveSheet(0);

// 創建行

Row row = sheet1.createRow(0);

// 創建表格

Cell cell1 = row.createCell(0);

Cell cell2 = row.createCell(1);

Cell cell3 = row.createCell(2);

CellStyle style = workbook.createCellStyle();

// 對齊方式

style.setAlignment(CellStyle.ALIGN_CENTER);

// 先設置樣式再設置顏色

style.setBorderBottom(CellStyle.BORDER_THICK);

style.setBottomBorderColor(HSSFColor.RED.index);

//先設置填充樣式再設置顏色

style.setFillPattern(CellStyle.ALT_BARS);

style.setFillForegroundColor(HSSFColor.GREEN.index);

cell1.setCellValue("序號");

cell1.setCellStyle(style);

cell2.setCellValue("姓名");

cell3.setCellValue("年齡");

System.out.println("=============");

try {

FileOutputStream out = new FileOutputStream(path);

workbook.write(out);

out.close();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

三.具體樣式詳解

1.創建文檔摘要信息

workbook.createInformationProperties();//創建文檔信息

DocumentSummaryInformation dsi= workbook.getDocumentSummaryInformation();//摘要信息

dsi.setCategory("類別:Excel文件");//類別

dsi.setManager("管理者:李志偉");//管理者

dsi.setCompany("公司:--");//公司

SummaryInformation si = workbook.getSummaryInformation();//摘要信息

si.setSubject("主題:--");//主題

si.setTitle("標題:測試文檔");//標題

si.setAuthor("作者:李志偉");//作者

si.setComments("備注:POI測試文檔");//備注

2.創建批注

HSSFSheet sheet = workbook.createSheet("Test");// 創建工作表(Sheet)

HSSFPatriarch patr = sheet.createDrawingPatriarch();

HSSFClientAnchor anchor = patr.createAnchor(0, 0, 0, 0, 5, 1, 8, 3);//創建批注位置

HSSFComment comment = patr.createCellComment(anchor);//創建批注

comment.setString(new HSSFRichTextString("這是一個批注段落!"));//設置批注內容

comment.setAuthor("李志偉");//設置批注作者

comment.setVisible(true);//設置批注默認顯示

HSSFCell cell = sheet.createRow(2).createCell(1);

cell.setCellValue("測試");

cell.setCellComment(comment);//把批注賦值給單元格

創建批注位置HSSFPatriarch.createAnchor(dx1, dy1, dx2, dy2, col1, row1, col2, row2)方法參數說明:

dx1 第1個單元格中x軸的偏移量

dy1 第1個單元格中y軸的偏移量

dx2 第2個單元格中x軸的偏移量

dy2 第2個單元格中y軸的偏移量

col1 第1個單元格的列號

row1 第1個單元格的行號

col2 第2個單元格的列號

row2 第2個單元格的行號

3.創建頁眉和頁腳

HSSFSheet sheet = workbook.createSheet("Test");// 創建工作表(Sheet)

HSSFHeader header =sheet.getHeader();//得到頁眉

header.setLeft("頁眉左邊");

header.setRight("頁眉右邊");

header.setCenter("頁眉中間");

HSSFFooter footer =sheet.getFooter();//得到頁腳

footer.setLeft("頁腳左邊");

footer.setRight("頁腳右邊");

footer.setCenter("頁腳中間");

也可以使用Office自帶的標簽定義,你可以通過HSSFHeader或HSSFFooter訪問到它們,都是靜態屬性,列表如下:

HSSFHeader.tab &A 表名

HSSFHeader.file &F 文件名

HSSFHeader.startBold &B 粗體開始

HSSFHeader.endBold &B 粗體結束

HSSFHeader.startUnderline &U 下劃線開始

HSSFHeader.endUnderline &U 下劃線結束

HSSFHeader.startDoubleUnderline &E 雙下劃線開始

HSSFHeader.endDoubleUnderline &E 雙下劃線結束

HSSFHeader.time &T 時間

HSSFHeader.date &D 日期

HSSFHeader.numPages &N 總頁面數

HSSFHeader.page &P 當前頁號

4.設置數據格式

HSSFSheet sheet = workbook.createSheet("Test");// 創建工作表(Sheet)

HSSFRow row=sheet.createRow(0);

//設置日期格式--使用Excel內嵌的格式

HSSFCell cell=row.createCell(0);

cell.setCellValue(new Date());

HSSFCellStyle style=workbook.createCellStyle();

style.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));

cell.setCellStyle(style);

//設置保留2位小數--使用Excel內嵌的格式

cell=row.createCell(1);

cell.setCellValue(12.3456789);

style=workbook.createCellStyle();

style.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));

cell.setCellStyle(style);

//設置貨幣格式--使用自定義的格式

cell=row.createCell(2);

cell.setCellValue(12345.6789);

style=workbook.createCellStyle();

style.setDataFormat(workbook.createDataFormat().getFormat("¥#,##0"));

cell.setCellStyle(style);

//設置百分比格式--使用自定義的格式

cell=row.createCell(3);

cell.setCellValue(0.123456789);

style=workbook.createCellStyle();

style.setDataFormat(workbook.createDataFormat().getFormat("0.00%"));

cell.setCellStyle(style);

//設置中文大寫格式--使用自定義的格式

cell=row.createCell(4);

cell.setCellValue(12345);

style=workbook.createCellStyle();

style.setDataFormat(workbook.createDataFormat().getFormat("[DbNum2][$-804]0"));

cell.setCellStyle(style);

//設置科學計數法格式--使用自定義的格式

cell=row.createCell(5);

cell.setCellValue(12345);

style=workbook.createCellStyle();

style.setDataFormat(workbook.createDataFormat().getFormat("0.00E+00"));

cell.setCellStyle(style);

HSSFDataFormat.getFormat和HSSFDataFormat.getBuiltinFormat的區別:當使用Excel內嵌的(或者說預定義)的格式時,直接用HSSFDataFormat.getBuiltinFormat靜態方法即可。當使用自己定義的格式時,必須先調用HSSFWorkbook.createDataFormat(),因為這時在底層會先找有沒有匹配的內嵌FormatRecord,如果沒有就會新建一個FormatRecord,所以必須先調用這個方法,然后你就可以用獲得的HSSFDataFormat實例的getFormat方法了,當然相對而言這種方式比較麻煩,所以內嵌格式還是用HSSFDataFormat.getBuiltinFormat靜態方法更加直接一些。

5.合并單元格

HSSFSheet sheet = workbook.createSheet("Test");// 創建工作表(Sheet)

HSSFRow row=sheet.createRow(0);

//合并列

HSSFCell cell=row.createCell(0);

cell.setCellValue("合并列");

CellRangeAddress region=new CellRangeAddress(0, 0, 0, 5);

sheet.addMergedRegion(region);

//合并行

cell=row.createCell(6);

cell.setCellValue("合并行");

region=new CellRangeAddress(0, 5, 6, 6);

sheet.addMergedRegion(region);

CellRangeAddress對象其實就是表示一個區域,其構造方法如下:CellRangeAddress(firstRow, lastRow, firstCol, lastCol),參數的說明:

firstRow 區域中第一個單元格的行號

lastRow 區域中最后一個單元格的行號

firstCol 區域中第一個單元格的列號

lastCol 區域中最后一個單元格的列號

6.單元格對齊

HSSFCell cell=row.createCell(0);

cell.setCellValue("單元格對齊");

HSSFCellStyle style=workbook.createCellStyle();

style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中

style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中

style.setWrapText(true);//自動換行

style.setIndention((short)5);//縮進

style.setRotation((short)60);//文本旋轉,這里的取值是從-90到90,而不是0-180度。

cell.setCellStyle(style);

水平對齊相關參數

如果是左側對齊就是 HSSFCellStyle.ALIGN_FILL;

如果是居中對齊就是 HSSFCellStyle.ALIGN_CENTER;

如果是右側對齊就是 HSSFCellStyle.ALIGN_RIGHT;

如果是跨列舉中就是 HSSFCellStyle.ALIGN_CENTER_SELECTION;

如果是兩端對齊就是 HSSFCellStyle.ALIGN_JUSTIFY;

如果是填充就是 HSSFCellStyle.ALIGN_FILL;

垂直對齊相關參數

如果是靠上就是 HSSFCellStyle.VERTICAL_TOP;

如果是居中就是 HSSFCellStyle.VERTICAL_CENTER;

如果是靠下就是 HSSFCellStyle.VERTICAL_BOTTOM;

如果是兩端對齊就是 HSSFCellStyle.VERTICAL_JUSTIFY;

7.使用邊框

邊框和其他單元格設置一樣也是調用CellStyle接口,CellStyle有2種和邊框相關的屬性,分別是:

邊框相關屬性

說明

范例

Border+方向

邊框類型

BorderLeft, BorderRight等

方向+BorderColor

邊框顏色

TopBorderColor,BottomBorderColor等

HSSFCell cell=row.createCell(1);

cell.setCellValue("設置邊框");

HSSFCellStyle style=workbook.createCellStyle();

style.setBorderTop(HSSFCellStyle.BORDER_DOTTED);//上邊框

style.setBorderBottom(HSSFCellStyle.BORDER_THICK);//下邊框

style.setBorderLeft(HSSFCellStyle.BORDER_DOUBLE);//左邊框

style.setBorderRight(HSSFCellStyle.BORDER_SLANTED_DASH_DOT);//右邊框

style.setTopBorderColor(HSSFColor.RED.index);//上邊框顏色

style.setBottomBorderColor(HSSFColor.BLUE.index);//下邊框顏色

style.setLeftBorderColor(HSSFColor.GREEN.index);//左邊框顏色

style.setRightBorderColor(HSSFColor.PINK.index);//右邊框顏色

cell.setCellStyle(style);

其中邊框類型分為以下幾種:

邊框范例圖

對應的靜態值

HSSFCellStyle.BORDER_DOTTED

HSSFCellStyle.BORDER_HAIR

HSSFCellStyle.BORDER_DASH_DOT_DOT

HSSFCellStyle.BORDER_DASH_DOT

HSSFCellStyle.BORDER_DASHED

HSSFCellStyle.BORDER_THIN

HSSFCellStyle.BORDER_MEDIUM_DASH_DOT_DOT

HSSFCellStyle.BORDER_SLANTED_DASH_DOT

HSSFCellStyle.BORDER_MEDIUM_DASH_DOT

HSSFCellStyle.BORDER_MEDIUM_DASHED

HSSFCellStyle.BORDER_MEDIUM

HSSFCellStyle.BORDER_THICK

HSSFCellStyle.BORDER_DOUBLE

8.設置字體

HSSFCell cell = row.createCell(1);

cell.setCellValue("設置字體");

HSSFCellStyle style = workbook.createCellStyle();

HSSFFont font = workbook.createFont();

font.setFontName("華文行楷");//設置字體名稱

font.setFontHeightInPoints((short)28);//設置字號

font.setColor(HSSFColor.RED.index);//設置字體顏色

font.setUnderline(FontFormatting.U_SINGLE);//設置下劃線

font.setTypeOffset(FontFormatting.SS_SUPER);//設置上標下標

font.setStrikeout(true);//設置刪除線

style.setFont(font);

cell.setCellStyle(style);

下劃線選項值:

單下劃線 FontFormatting.U_SINGLE

雙下劃線 FontFormatting.U_DOUBLE

會計用單下劃線 FontFormatting.U_SINGLE_ACCOUNTING

會計用雙下劃線 FontFormatting.U_DOUBLE_ACCOUNTING

無下劃線 FontFormatting.U_NONE

上標下標選項值:

上標 FontFormatting.SS_SUPER

下標 FontFormatting.SS_SUB

普通,默認值 FontFormatting.SS_NONE

9.背景和紋理

SSFCellStyle style = workbook.createCellStyle();

style.setFillForegroundColor(HSSFColor.GREEN.index);//設置圖案顏色

style.setFillBackgroundColor(HSSFColor.RED.index);//設置圖案背景色

style.setFillPattern(HSSFCellStyle.SQUARES);//設置圖案樣式

cell.setCellStyle(style);

10.設置寬度和高度

HSSFSheet sheet = workbook.createSheet("Test");// 創建工作表(Sheet)

HSSFRow row = sheet.createRow(1);

HSSFCell cell = row.createCell(1);

cell.setCellValue("123456789012345678901234567890");

sheet.setColumnWidth(1, 31 * 256);//設置第一列的寬度是31個字符寬度

row.setHeightInPoints(50);//設置行的高度是50個點

這里你會發現一個有趣的現象,setColumnWidth的第二個參數要乘以256,這是怎么回事呢?其實,這個參數的單位是1/256個字符寬度,也就是說,這里是把B列的寬度設置為了31個字符。

設置行高使用HSSFRow對象的setHeight和setHeightInPoints方法,這兩個方法的區別在于setHeightInPoints的單位是點,而setHeight的單位是1/20個點,所以setHeight的值永遠是setHeightInPoints的20倍。

你也可以使用HSSFSheet.setDefaultColumnWidth、HSSFSheet.setDefaultRowHeight和HSSFSheet.setDefaultRowHeightInPoints方法設置默認的列寬或行高。

11.判斷單元格是否為日期

//判斷單元格是否為日期類型,使用DateUtil.isCellDateFormatted(cell)方法,例如:

HSSFCell cell = row.createCell(1);

cell.setCellValue(new Date());//設置日期數據

System.out.println(DateUtil.isCellDateFormatted(cell));//輸出:false

HSSFCellStyle style =workbook.createCellStyle();

style.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));

cell.setCellStyle(style);//設置日期樣式

System.out.println(DateUtil.isCellDateFormatted(cell));//輸出:true

12.設置默認工作表

HSSFWorkbook workbook = new HSSFWorkbook();// 創建Excel文件(Workbook)

workbook.createSheet("Test0");// 創建工作表(Sheet)

workbook.createSheet("Test1");// 創建工作表(Sheet)

workbook.createSheet("Test2");// 創建工作表(Sheet)

workbook.createSheet("Test3");// 創建工作表(Sheet)

workbook.setActiveSheet(2);//設置默認工作表

13.重命名

HSSFWorkbook workbook = new HSSFWorkbook();// 創建Excel文件(Workbook)

workbook.createSheet("Test0");// 創建工作表(Sheet)

workbook.createSheet("Test1");// 創建工作表(Sheet)

workbook.createSheet("Test2");// 創建工作表(Sheet)

workbook.createSheet("Test3");// 創建工作表(Sheet)

workbook.setSheetName(2, "1234");//重命名工作表

14.調整表單顯示比例

HSSFWorkbook workbook = new HSSFWorkbook();// 創建Excel文件(Workbook)

HSSFSheet sheet1= workbook.createSheet("Test0");// 創建工作表(Sheet)

HSSFSheet sheet2=workbook.createSheet("Test1");// 創建工作表(Sheet)

HSSFSheet sheet3=workbook.createSheet("Test2");// 創建工作表(Sheet)

sheet1.setZoom(1,2);//50%顯示比例

sheet2.setZoom(2,1);//200%顯示比例

sheet3.setZoom(1,10);//10%顯示比例

15.顯示/隱藏網格線

HSSFWorkbook workbook = new HSSFWorkbook();// 創建Excel文件(Workbook)

HSSFSheet sheet1= workbook.createSheet("Test0");// 創建工作表(Sheet)

HSSFSheet sheet2=workbook.createSheet("Test1");// 創建工作表(Sheet)

sheet1.setDisplayGridlines(false);//隱藏Excel網格線,默認值為true

sheet2.setGridsPrinted(true);//打印時顯示網格線,默認值為false

16.遍歷Sheet

String filePath = "d:\\users\\lizw\\桌面\\POI\\sample.xls";

FileInputStream stream = new FileInputStream(filePath);

HSSFWorkbook workbook = new HSSFWorkbook(stream);//讀取現有的Excel

HSSFSheet sheet= workbook.getSheet("Test0");//得到指定名稱的Sheet

for (Row row : sheet)

{

for (Cell cell : row)

{

System.out.print(cell + "\t");

}

System.out.println();

}

其他詳見:http://www.cnblogs.com/LiZhiW/p/4313789.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/186747.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息