java实现Excel的导入、导出

一、Excel的导入

导入可采用两种方式,一种是JXL,另一种是POI,但前者不能读取高版本的Excel(07以上),后者更具兼容性。由于对两种方式都进行了尝试,就都贴出来分享(若有错误,请给予指正)

方式一、JXL导入  所需jar包 JXL.jar

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
publicstaticList<PutStorageInfo> readExcelByJXL(String filePath){
List<PutStorageInfo> infoList =newArrayList<PutStorageInfo>();
Map<String,List<String>> map =newHashMap<String,List<String>>();
  infoList.clear();
try {
InputStream is =newFileInputStream(filePath);
Workbook workbook =Workbook.getWorkbook(is);
//获取第1张表
Sheet sheet = workbook.getSheet( 0 );
//获取总的列数
int columns = sheet.getColumns();
//获取总的行数
int rows = sheet.getRows();
//先列后行(j,i)
for ( int i = 1 ; i < rows; i++){
List<String> contentList =newArrayList<String>();
  contentList.clear();
for ( int j = 1 ; j < columns; j++){
  contentList.add(sheet.getCell(j,i).getContents());
}
  map.put( "StorageInfo" +i, contentList);
}
 
//遍历map集合,封装成bean
for (Map.Entry<String,List<String>> entry : map.entrySet()){
List<String> list = entry.getValue();
PutStorageInfo storageInfo =newPutStorageInfo();
  storageInfo.setProductcode(list.get( 0 ));
  storageInfo.setProductsort(list.get( 1 ));
  storageInfo.setProductbrand(list.get( 2 ));
  storageInfo.setProductname(list.get( 3 ));
  storageInfo.setProductquantity(list.get( 4 ));
  storageInfo.setProductcontent(list.get( 5 ));
  storageInfo.setProductnetweight(list.get( 6 ));
  storageInfo.setProductcountry(list.get( 7 ));
  storageInfo.setProductpdate(list.get( 8 ));
  storageInfo.setProductprice(list.get( 9 ));
  storageInfo.setProductmark(list.get( 10 ));
 
  infoList.add(storageInfo);
}
  is.close();
} catch (Exception e){
  e.printStackTrace();
}
return infoList;
}

方式二、POI导入 

所需jar包
poi-3.6-20091214.jar
poi-ooxml-3.6-20091214.jar
poi-ooxml-schemas-3.6-20091214.jar
xmlbeans-2.3.0.jar
dom4j-1.6.1.jar
jdom-2.0.6.jar

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
publicstaticList<PutStorageInfo> readExcelByPOI(String filePath){
List<PutStorageInfo> infoList =newArrayList<PutStorageInfo>();
Map<String,List<String>> map =newHashMap<String,List<String>>();
  infoList.clear();
try {
InputStream is =newFileInputStream(filePath);
 
int index = filePath.lastIndexOf( "." );
String postfix = filePath.substring(index+ 1 );
 
Workbook workbook = null ;
if ( "xls" .equals(postfix)){
  workbook =newHSSFWorkbook(is);
}elseif( "xlsx" .equals(postfix)){
  workbook =newXSSFWorkbook(is);
}
//获取第1张表
Sheet sheet = workbook.getSheetAt( 0 );
//总的行数
int rows = sheet.getLastRowNum();
//总的列数--->最后一列为null则有问题,读取不完整,将表头的数目作为总的列数,没有的则补为null
int columns = sheet.getRow( 0 ).getLastCellNum();
//先列后行
for ( int i = 1 ; i <= rows; i++){
  Row row = sheet.getRow(i);
  if ( null != row && row.getFirstCellNum()==- 1 ){ //这一行是空行,不读取
  continue ;
}
//这一行的总列数
// columns = row.getLastCellNum();
List<String> contentList =newArrayList<String>();
  contentList.clear();
for ( int j = 1 ; j < columns; j++){
if (row.getCell(j)!= null ){
  row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
  contentList.add(row.getCell(j).getStringCellValue());
} else {
  contentList.add( "" );
}
}
  map.put( "StorageInfo" +i, contentList);
}
 
//遍历map集合,封装成bean
for (Map.Entry<String,List<String>> entry : map.entrySet()){
List<String> list = entry.getValue();
PutStorageInfo storageInfo =newPutStorageInfo();
  storageInfo.setProductcode(list.get( 0 ));
  storageInfo.setProductsort(list.get( 1 ));
  storageInfo.setProductbrand(list.get( 2 ));
  storageInfo.setProductname(list.get( 3 ));
  storageInfo.setProductquantity(list.get( 4 ));
  storageInfo.setProductcontent(list.get( 5 ));
  storageInfo.setProductnetweight(list.get( 6 ));
  storageInfo.setProductcountry(list.get( 7 ));
  storageInfo.setProductpdate(list.get( 8 ));
  storageInfo.setProductprice(list.get( 9 ));
  storageInfo.setProductmark(list.get( 10 ));
 
  infoList.add(storageInfo);
}
  is.close();
} catch (Exception e){
  e.printStackTrace();
}
 
return infoList;
}

二、Excel导出

采用JXL实现

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
publicstaticvoid creatExcel(List<PutStorageInfo> storageInfoList,String fileName){
try {
OutputStream os =newFileOutputStream(fileName);
//创建可写的工作薄
WritableWorkbook workbook =Workbook.createWorkbook(os);
//创建第一张表
WritableSheet sheet = workbook.createSheet( "Sheet1" , 0 );
//设置根据内容自动宽度
CellView cellView =newCellView();
  cellView.setAutosize( true );
//在下边for循环中为每一列设置
 
//设置列宽度,此种方式参数的意思,i-->对应的行或列 j-->要设置的宽度
// sheet.setColumnView(0, 100);
// sheet.setRowView(0, 300);
//设置字体加粗且背景颜色为黄色
WritableFont boldFont =newWritableFont(WritableFont.ARIAL, 10 ,WritableFont.BOLD); //黑体
WritableCellFormat cellrFormate =newWritableCellFormat(boldFont);
  cellrFormate.setBackground(Colour.YELLOW);
//先添加表头
List<String> titleList = getTitleList();
//循环创建单元格,先列后行
for ( int i = 0 ; i < titleList.size(); i++){
//sheet.setColumnView(i, cellView);
  sheet.setColumnView(i, 20 );
 
Label label =newLabel(i, 0 , titleList.get(i), cellrFormate);
  sheet.addCell(label);
}
 
LogUtil.logOut(JXLWriteExcel. class ,storageInfoList.size()+ "" );
 
String[][] content = convertToArr(storageInfoList);
//设置content的自适应当前列的宽度,文本太对会自动换行 new Label(j, i+1, content[i][j-1],contentFormat);
WritableCellFormat contentFormat =newWritableCellFormat();
  contentFormat.setWrap( true );
 
//然后添加入库信息条目
for ( int i = 0 ; i < storageInfoList.size(); i++){
Label labelID =newLabel( 0 ,i+ 1 ,(i+ 1 )+ "" );
  sheet.addCell(labelID);
 
for ( int j = 1 ; j < titleList.size(); j++){
Label label =newLabel(j, i+ 1 , content[i][j- 1 ]);
  sheet.addCell(label);
}
}
 
//把创建的内容写入到输出流中,并关闭输出流
workbook.write();
  workbook.close();
  os.close();
 
//将存储了入库bean的list清空
storageInfoList.clear();
 
} catch (Exception e){
  e.printStackTrace();
}
}
 
privatestaticString[][] convertToArr(List<PutStorageInfo> storageInfoList){
String[][] content =newString[storageInfoList.size()][ 11 ];
for ( int i = 0 ; i < storageInfoList.size(); i++){
PutStorageInfo info = storageInfoList.get(i);
//每个bean中总项有11项
content[i][ 0 ]= info.getProductcode();
  content[i][ 1 ]= info.getProductsort();
  content[i][ 2 ]= info.getProductbrand();
  content[i][ 3 ]= info.getProductname();
  content[i][ 4 ]= info.getProductquantity();
  content[i][ 5 ]= info.getProductcontent();
  content[i][ 6 ]= info.getProductnetweight();
  content[i][ 7 ]= info.getProductcountry();
  content[i][ 8 ]= info.getProductpdate();
  content[i][ 9 ]= info.getProductprice();
  content[i][ 10 ]= info.getProductmark();
}
return content;
 
}
 
privatestaticList<String> getTitleList(){
List<String> list =newArrayList<String>();
  list.add( "Item No." );
  list.add( "Product code" );
  list.add( "Sort" );
  list.add( "Brand" );
  list.add( "Product Name" );
  list.add( "Quantity(Pieces)" );
  list.add( "Content" );
list.add( "Net Weight" );
  list.add( "Country" );
  list.add( "Best before date" );
  list.add( "Price(EURO)" );
  list.add( "Remarks" );
 
return list;
}

转自:http://www.jb51.net/article/117205.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值