java apache.poi_Java利用apache的POI操作Excel

最近在写一些报表的活,顺便总结下。。。第一篇博文,希望多多指教。

项目中经常会设计到一些数据的报表问题,目前java中操作Excel的插件也有很多 ,我说下用apache的POI操作Excel的方法。

首先,最简单 一种方法就是直接从本地读取Excel模版,然后往Excel里添加数据,

首先需要加载POI的几个包,目前最新的版本是3.9的,读取本地Excel的代码如下

package com.zhao.poi;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.net.URLEncoder;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

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

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

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

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

import org.apache.poi.poifs.filesystem.POIFSFileSystem;

import org.apache.struts2.ServletActionContext;

/**

* 类名:

* 描述:利用POI读取excel模版信息

* 类型:

* 作者:ZhaoLibin

* 日期:2013-01-22

*/

public class ReadExcelTemplate {

private HttpServletResponse response = ServletActionContext.getResponse();

/**

* 描述:测试主方法信息

* 参数:

* 返回:

* 作者:ZhaoLibin

* 日期:2013-01-22

*/

public static void main(String[] args) throws IOException{

readExcelTemplate();

}

public static void readExcelTemplate() throws IOException{

FileInputStream in = new FileInputStream("C:/新退休审批名册(归并后启用).xls");

POIFSFileSystem fs = new POIFSFileSystem(in);

HSSFWorkbook wb = new HSSFWorkbook(fs);

HSSFSheet sheet = wb.getSheetAt(0);

HSSFRow row = sheet.getRow(5);

HSSFCell cell = row.getCell((short)0);//姓名

cell.setCellValue("Zhaolibin");

cell = row.getCell((short)1);//性别

cell.setCellValue("男");

cell = row.getCell((short)2);//出生年月o

cell.setCellValue("1990-04-02");

cell = row.getCell((short)3);//参加工作年月

cell.setCellValue("2012-07");

cell = row.getCell((short)4);//连续工龄

cell.setCellValue(1);

cell = row.getCell((short)5);//职务

cell.setCellValue("java程序猿");

cell = row.getCell((short)6);//退休年月

cell.setCellValue("2033-06");

FileOutputStream out = new FileOutputStream("c:/加入数据的退休审批名册.xls");

wb.write(out);

}

}

比较简单,如果是在J2EE项目中,一般我们需要在页面生成下载流,可以把Excel模版放在项目webRoot下面,获得此路径的方法如下:

String path = ServletActionContext.getServletContext().getRealPath("/");

如在webRoot建立文件夹fileTemplate,并把我们的Excel模版“新退休审批名册(归并后启用).xls”放在此文件夹下,读取文件路径可以这么写

String filePath = path+"fileTemplate/新退休审批名册(归并后启用).xls";

当然我们还需要设置response的响应头,我们操作文件过程中,最重要的就是对流的控制,打开流之后一定要关闭,不然就会一直在我们的java虚拟机中,导致我们无法正常读取文件,J2EE中在页面生成下载流的代码如下:

package com.zhao.poi;

import java.io.FileInputStream;

import java.io.OutputStream;

import java.net.URLEncoder;

import javax.servlet.http.HttpServletResponse;

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

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

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

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

import org.apache.poi.poifs.filesystem.POIFSFileSystem;

import org.apache.struts2.ServletActionContext;

/**

* 类名:

* 描述:利用POI读取excel模版信息

* 类型:

* 作者:ZhaoLibin

* 日期:2013-01-22

*/

public class ReadExcelTemplate {

private HttpServletResponse response = ServletActionContext.getResponse();//响应流

private String path = ServletActionContext.getServletContext().getRealPath("/");//webRoot路径

/**

* 描述:设置下载响应信息

* 参数:

* 返回:

* 作者:ZhaoLibin

* 日期:2013-01-14

*/

public void setResponseHeader(String title){

try{

response.setContentType("application/vnd.ms-excel;charset=UTF-8");

response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(title, "UTF-8"));

//客户端不缓存

response.addHeader("Pargam", "no-cache");

response.addHeader("Cache-Control", "no-cache");

}catch(Exception ex){

ex.printStackTrace();

}

}

/**

* 描述:入口方法信息

* 参数:

* 返回:

* 作者:ZhaoLibin

* 日期:2013-01-22

*/

public void readExcelTemplate(){

try {

setResponseHeader("退休审批名册.xls");

readExcelTemplate(response.getOutputStream());

response.getOutputStream().flush();

response.getOutputStream().close();

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 描述:操作模版Excel信息

* 参数:

* 返回:

* 作者:ZhaoLibin

* 日期:2013-01-22

*/

public void readExcelTemplate(OutputStream os){

try{

FileInputStream in = new FileInputStream(path+

"fileTemplate/retirement_examine/新退休审批名册(归并后启用).xls");

POIFSFileSystem fs = new POIFSFileSystem(in);//POI读取输入流

HSSFWorkbook wb = new HSSFWorkbook(fs);//代表整个excel

HSSFSheet sheet = wb.getSheetAt(0);//得到excel里的第一个sheet表单 如有多个表单可以改变参数来获得

HSSFRow row = sheet.getRow(5);//得到sheet表单的第几行,注意excel相当于一个二维数组,下标是从0开始的

//这里获取的是第6行,我的模版前5行都是表头菜单

//设置值

HSSFCell cell = row.getCell((short)0);//姓名

cell.setCellValue("Zhaolibin");

cell = row.getCell((short)1);//性别

cell.setCellValue("男");

cell = row.getCell((short)2);//出生年月o

cell.setCellValue("1990-04-02");

cell = row.getCell((short)3);//参加工作年月

cell.setCellValue("2012-07");

cell = row.getCell((short)4);//连续工龄

cell.setCellValue(1);

cell = row.getCell((short)5);//职务

cell.setCellValue("java程序猿");

cell = row.getCell((short)6);//退休年月

cell.setCellValue("2033-06");

wb.write(os);//在response响应中生成下载流

}catch(Exception e){

e.printStackTrace();//按照你们日志的设置格式,把异常添加到日志里

}

}

}

以上就是项目中读取excel模版的方法,比较简单但还是挺实用的,因为如果你在模版中设置好了Excel的各种样式表头,在实际操作中只要加入数据即可。

java.lang.ClassNotFoundException: org.apache.poi.POIXMLTypeLoader是Java中的一个异常,它表示在运行时找不到org.apache.poi.POIXMLTypeLoader类。这个异常通常发生在尝试加载类时,找不到类的定义。 根据引用提供的信息,这个异常可能与使用Apache POI操作2007格式的Excel文件有关。根据引用中的错误信息,一个可能的原因是缺少org.apache.xmlbeans.XmlOptions类。而根据引用中的补充知识点,这个异常与ClassNotFoundException问题不同,意味着在编译时能找到对应的类,但在运行时找不到。 为了解决这个问题,你可以尝试以下几个步骤: 1. 确保你的项目中已经正确引入了Apache POI库和相关的依赖。请确保你已经正确地设置了类路径,并且所有所需的jar文件都位于正确的位置。 2. 检查你的代码中是否正确地导入了org.apache.poi.POIXMLTypeLoader类。确保你的导入语句是正确的,并且没有拼写错误。 3. 如果你确认你的项目配置和代码都没有问题,但仍然遇到这个异常,那么可能是由于版本冲突或jar包损坏引起的。尝试更新你所使用的Apache POI库的版本,或者尝试重新下载并替换可能损坏的jar文件。 4. 如果以上步骤都没有解决问题,那么可能是由于其他原因导致的。你可以尝试在搜索引擎中使用具体的错误信息进行搜索,看看是否有其他开发者遇到了类似的问题,并找到了解决方案。 总结起来,java.lang.ClassNotFoundException: org.apache.poi.POIXMLTypeLoader异常表示在运行时找不到org.apache.poi.POIXMLTypeLoader类。要解决这个问题,你可以检查项目配置和代码是否正确,并尝试更新库的版本或替换可能损坏的jar文件。如果问题仍然存在,可以搜索具体的错误信息以寻找其他解决方案。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [xmlbeans-2.3.0.jar](https://download.csdn.net/download/qq_36135335/10478490)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [java.lang.NoClassDefFoundError: org.apache.poi.POIXMLDocument问题排查解决](https://blog.csdn.net/weixin_45937536/article/details/128904930)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [java.lang.ClassNotFoundException: org.apache.poi.util.TempFileCreationStrategy解决方案](https://blog.csdn.net/weixin_43949154/article/details/122071510)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值