一直想写一个poi的使用的总结,话说我第一份正式工作接到的第一个工作就是当时TL让我去整理项目的数据字典,即把内容插入到CSV上,然后把csv的内容插入到数据库中,而且我印象极深的当时使用的就是poi。
今天翻以前的笔记,正好是我当时学POI的一些笔记。这里整理一下。
这里提一下,java操作excel的组件除了apache的poi,还有jexcelapi(jxl),其中poi组件的获取地址为poi.apache.org。
poi组件中常用的类有HSSFworkbook表示一个完整的excel表格,HSSFsheet表示excel中的一个工作薄,HSSFRow表示工作薄中的一行,HSSFCell表示一个单元格
下面是一个简单的写入的demo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public
static
void
main(String [] args){
try
{
HSSFWorkbook workbook=
new
HSSFWorkbook();
HSSFSheet sheet= workbook.createSheet(
"test"
);
HSSFRow row = sheet.createRow(
1
);
HSSFCell cell= row.createCell(
2
);
cell.setCellValue(
"test"
);
FileOutputStream os=
null
;
os =
new
FileOutputStream(
"fisrtExcel.xls"
);
workbook.write(os);
os.flush();
os.close();
}
catch
(Exception e) {
e.printStackTrace();
}
System.out.println(
"ok"
);
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
try
{
FileInputStream file=
new
FileInputStream(
"fisrtExcel.xls"
);
POIFSFileSystem ts=
new
POIFSFileSystem(file);
HSSFWorkbook wb=
new
HSSFWorkbook(ts);
HSSFSheet sh= wb.getSheetAt(
0
);
HSSFRow ro=
null
;
for
(
int
i =
0
; sh.getRow(i)!=
null
; i++) {
ro=sh.getRow(i);
for
(
int
j =
0
; ro.getCell(j)!=
null
; j++) {
System.out.print(ro.getCell(j)+
""
);
}
System.out.println();
}
}
catch
(Exception e) {
e.printStackTrace();
}
System.out.println(
"ok"
);
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
//使用公式
cell2.setCellFormula(
"B2"
);
//设置列宽
sheet.setColumnWidth(columnIndex, width);
//设置行高
row.setHeight(height);
//设这样式:
HSSFFont font= workbook.createFont();
font.setFontHeightInPoints(height);
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
font.setFontName(
"黑体"
);
HSSFCellStyle style= workbook.createCellStyle();
style.setFont(font);
//style可以设置对齐样式,边框,和格式化日期。
cell.setCellStyle(style);
//合并单元格
sheet.addMergedRegion(region);
|
我们之前提到了一个jxl的使用。当时在网上也找到了一个使用的demo,可以参考这里:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
public
static
void
main(String [] args){
try
{
WritableWorkbook wwb =
null
;
//首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
wwb = Workbook.createWorkbook(
new
File(
"jxlexcel"
));
if
(wwb!=
null
){
//创建一个可写入的工作表
WritableSheet ws = wwb.createSheet(
"sheet1"
,
0
);
for
(inti=
0
;i<
10
;i++){
for
(intj=
0
;j<
5
;j++){
Label labelC =
new
Label(j, i,
"这是第"
+(i+
1
)+
"行,第"
+(j+
1
)+
"列"
);
ws.addCell(labelC);
}
}
wwb.write();
wwb.close();
}
}
catch
(Exception e) {
e.printStackTrace();
}
System.out.println(
"ok"
);
}
|
http://www.newxing.com/Tech/Java/Web/Excel_186.html
http://www.yesky.com/18/1886018.shtml
总结一下,poi的使用比较简单,主要是写入和读取的时候计算好读取的位置。而且现在项目中已经封装了一个现成的类,几乎几行代码就可以把结果输出到一个excel中并提供下载,PS:很怀念刚工作时的那段日子。