jxl导出Excel工具类
发布时间:2020-05-24 15:37:35 所属栏目:Java 来源:互联网
导读:jxl导出Excel工具类
|
下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。 脚本之家小编现在分享给大家,也给大家做个参考。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
/**
* 注意:此工具类只支持解析excel2003,不支持解析高版本的excel,如果解析高版本excel会报如下错误:
* jxl.read.biff.BiffException: Unable to recognize OLE stream
* 解决方案:将高版本excel文件另存为Excel97-2003工作薄,然后再解析.
* jxl较poi的好处是跨平台,因为是用纯java编写,poi虽然功能比jxl强大,但是是基于windows系统的.
* @author IluckySi
* @since 20141215
*/
public class JxlUtil {
private String filePath;
public String getPath() {
return filePath;
}
public void setPath(String filePath) {
this.filePath = filePath;
}
/**
* 解析excel文件.
* @return Map<String,List<List<String>>>
*/
public Map<String,List<List<String>>> parse() {
File file = new File(filePath);
if(!file.exists() || !file.getName().endsWith(".xls")) {
try {
throw new Exception("要解析的路径有问题: " + filePath);
} catch (Exception e) {
e.printStackTrace();
}
}
Map<String,List<List<String>>> listListMap = new HashMap<String,List<List<String>>>();
Workbook workBook = null;
FileInputStream fis = null;
try {
fis = new FileInputStream(file);
workBook = Workbook.getWorkbook(fis);
Sheet[] sheetArray = workBook.getSheets();
for(int i = 0; sheetArray != null && i < sheetArray.length; i++) {
Sheet sheet = sheetArray[i];
List<List<String>> listList = parseSheet(sheet);
if(listList != null && listList.size() > 0) {
listListMap.put(sheet.getName(),listList);
}
}
} catch (BiffException e) {
System.out.println("解析文件发生异常: " + e);
} catch (IOException e) {
System.out.println("解析文件发生异常: " + e);
} finally {
try {
if(workBook != null) {
workBook.close();
workBook = null;
}
if(fis != null) {
fis.close();
fis = null;
}
} catch (Exception e) {
System.out.println("关闭文件流发生异常: " + e);
}
}
return listListMap;
}
/**
* 解析sheet,需要注意的地方:合并单元格,* 例:如果A6-A12合并了单元格,那么解析excel时,解析类库只认为A6有值.
* @param sheet
*/
private List<List<String>> parseSheet(Sheet sheet) {
List<List<String>> listList = new ArrayList<List<String>>();
int rowCount = sheet.getRows();
for(int i = 1; i < rowCount; i++) {
List<String> list = new ArrayList<String>();
Cell[] cellArray = sheet.getRow(i);
for(int j = 0; cellArray != null && j < cellArray.length; j++) {
list.add(cellArray[j].getContents());
}
listList.add(list);
}
return listList;
}
/**
* 将数据源写入到excel中.
* 注意:20150211加的写入方法.
* @param listListMap
* @return
*/
public boolean write(Map<String,List<List<String>>> listListMap) {
File file = new File(filePath);
boolean result = false;
WritableWorkbook workBook = null;
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file);
workBook = Workbook.createWorkbook(fos);
int sheetNo = 0;
for(Entry<String,List<List<String>>> entry : listListMap.entrySet()) {
String key = entry.getKey();
List<List<String>> listList = entry.getValue();
WritableSheet sheet = workBook.createSheet(key,sheetNo++);
for(int i = 0; i < listList.size(); i++) {
List<String> list = listList.get(i);
for(int j = 0; j < list.size(); j++) {
Label label = new Label(j,i,list.get(j));
sheet.addCell(label);
}
}
}
workBook.write();
System.out.println("成功写入文件");
} catch (Exception e) {
System.out.println("写入文件发生异常: " + e);
} finally {
try {
if(workBook != null) {
workBook.close();
}
if(fos != null) {
fos.close();
}
} catch (IOException e) {
System.out.println("关闭文件流发生异常: " + e);
}
}
return result;
}
}
以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。 如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
