apache POI 导入导出excel

 

本帖最后由 zhongweiwei 于 2012-7-16 16:41 编辑

Apache POI 是用 Java编写的免费开源的跨平台的 Java API, Apache POI提供 API给 Java程式对 Microsoft Office格式档案读和写的功能。


  • HSSF 提供读写 Microsoft ExcelXLS格式档案的功能。
  • XSSF 提供读写 Microsoft ExcelOOXML XLSX格式档案的功能。
  • HWPF 提供读写 Microsoft WordDOC格式档案的功能。
  • HSLF 提供读写 MicrosoftPowerPoint格式档案的功能。
  • HDGF 提供读 Microsoft Visio格式档案的功能。
  • HPBF 提供读 MicrosoftPublisher格式档案的功能。
  • HSMF 提供读 Microsoft Outlook格式档案的功能。


版本

稳定版

最新的稳定版是 Version 3.5-final (2009-09-28)

源码文件: http://archive.apache.org/dist/poi/release/src/poi-src-3.5-FINAL-20090928.zip

二进制开发包: http://archive.apache.org/dist/poi/release/bin/poi-bin-3.5-FINAL-20090928.zip


最新版

最新的版是 Version 3.8 (2011-3-26)还在不断的完善

二进制开发包: http://www.fayea.com/apache-mirror/poi/release/bin/poi-bin-3.8-20120326.zip

源码文件: http://mirror.bit.edu.cn/apache/poi/release/src/poi-src-3.8-20120326.zip



以下以一个小例子示范 POI 读取 excel

(此程序所用的POI版本是3.8版本,此实例重在突出POI的使用方法,对于代码格式、规范性、可拓展性暂未考虑,小女子初次发技术贴,有不足的地方欢迎大家提出)

读取 excel2003文件主要过程(代码块a):


public static void main(String[] args) throws Exception {
String file = "C:\\Users\\LONMID\\Desktop\\POI\\pirate.xls";
FileInputStream fis = new FileInputStream(file);
// 构建一个excel2003工作簿
Workbook wb = new HSSFWorkbook(fis);
List<ArrayList<String>> result = new ArrayList<ArrayList<String>>();
int totalColumn = 0;
if(wb != null){
Sheet sheet = wb.getSheetAt(0);
int totalRows = sheet.getPhysicalNumberOfRows();
if (totalRows >= 1 && sheet.getRow(0) != null) {
totalColumn = sheet.getRow(0).getPhysicalNumberOfCells();
}
for (int r = 0; r < totalRows; r++) {
Row row = sheet.getRow(r);
if (row == null) {
continue;
}
ArrayList<String> rowList = new ArrayList<String>();
for (int c = 0; c < totalColumn; c++) {
Cell cell = row.getCell(c);
// 可根据数据类型设置数据的显示格式
rowList.add(cell.toString());
}
result.add(rowList);
}
}
// 打印到控制台
for (ArrayList<String> arrayList : result) {
for (String string : arrayList) {
System.out.print(string +"\t");
}
System.out.println();
}

读取的excel文件:

读取的excel文件.png

控制台输出:

读取结果1.png


设置数据类型格式:

将代码块a 23行改成 rowList.add(getCellValue(cell));

getCellValue(Cell cell)方法如下(代码块b):


private static String getCellValue(Cell cell) {
String cellValue = "";
if (cell == null) {
return cellValue;
}
// 处理数字型 可自行设置格式
if (Cell.CELL_TYPE_NUMERIC == cell.getCellType()) {
cellValue = NumberFormat.getInstance().format(cell.getNumericCellValue())+ ".00";
}
// 处理布尔型
else if (Cell.CELL_TYPE_BOOLEAN == cell.getCellType()) {
cellValue = cell.getBooleanCellValue() ? "是" : "否";
}
// 处理其他数据类型
else {
cellValue = cell.toString();
}
return cellValue;
}
再运行代码块a,输出: 读取结果2.png
如此可设置数据的表现格式

读取 excel2007:

将代码块a 02行的文件换成2007版本的excel文件: String file = "C:\\Users\\LONMID\\Desktop\\POI\\pirate.xlsx";

2007版本的excel文件如图:

读取2007文件.png

将代码块a 05行代码改成: Workbook wb = new XSSFWorkbook(fis);

再次运行代码块a,输出结果:

读取2007结果1.png


导出 excel文件 :

控制器代码(控制器url:" /data.do")代码块c:


@RequestMapping(params = "action=export2003")
public void write2003(HttpServletResponse response){
OutputStream out = null;
try {
out = response.getOutputStream();
String fileName = "pirate"+new Date().getTime() + ".xls";// 生成的excel文件
String tempFile = "C:\\Users\\LONMID\\Desktop\\POI\\temp.xls";// 模版文件
Workbook wb = new HSSFWorkbook(new FileInputStream(tempFile));
List<ArrayList<String>> data = createData();// 生成数据
if(wb!=null&&data != null){
Sheet sheet = wb.getSheetAt(0);
for (int i = 0; i < data.size(); i++) {
ArrayList<String> list = data.get(i);
Row row = sheet.createRow(i+1);
for (int j = 0; j < list.size(); j++) {
row.createCell(j).setCellValue(list.get(j));
}
}
}
response.setHeader("Content-disposition", "attachment; filename=" + fileName);
response.setContentType("application/msexcel;charset=UTF-8");
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
wb.write(out);
out.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (out != null) {
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
jsp文件代码片段: <a href="${contextPath}/data.do?action=export2003">点击导出至Excel2003文件</a>

模板文件: tempFile.png

导出文件截图:

 

设置单元格格式:

 /**
         * 设置单元格格式
	 */
	private static CellStyle setStyle(HSSFWorkbook wb){
		// 创建字体
		HSSFFont font = wb.createFont();
		// 设置字体为红色
		font.setColor(HSSFFont.COLOR_RED); 
		// 设置字体为粗体
		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); 
		// 创建单元格格式
		HSSFCellStyle cellStyle= wb.createCellStyle();
		// 设置字体
		cellStyle.setFont(font); 
		// 设置水平居中
		cellStyle.setAlignment(CellStyle.ALIGN_CENTER);
		// 设置垂直靠下
		cellStyle.setVerticalAlignment(CellStyle.VERTICAL_BOTTOM);
		// 设置左边框为双线
		cellStyle.setBorderLeft(CellStyle.BORDER_DOUBLE);
		// 设置背景色为蓝色
		cellStyle.setFillBackgroundColor(new HSSFColor.BLUE().getIndex());
		// 设置前景色为黄色
		cellStyle.setFillForegroundColor(new HSSFColor.YELLOW().getIndex());
		return cellStyle;
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值