- 浏览: 338545 次
- 性别:
- 来自: 济南
文章分类
最新评论
-
u013810758:
[flash=200,200][url][img][list] ...
poi 解析excel 03与07不兼容问题 -
u013810758:
我也是这么做的 但是还是有问题啊 感觉07版的或03版的内容 ...
poi 解析excel 03与07不兼容问题 -
sezi915:
我觉得如果用异常来判断Excel版本的话 用org.apach ...
poi 解析excel 03与07不兼容问题 -
他大姨妈:
思路很好,楼主脑子比较好使
poi 解析excel 03与07不兼容问题 -
zhenlong_qu:
谢谢博主的这篇文章,不得不说,博主的思路真不错,按照这个思路, ...
poi 解析excel 03与07不兼容问题
刚开始使用new HSSFWorkbook(new FileInputStream(excelFile))来读取Workbook,对Excel2003以前(包括2003)的版本没有问题,但读取Excel2007时发生如下异常:
org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)
该错误意思是说,文件中的数据是用Office2007+XML保存的,而现在却调用OLE2 Office文档处理,应该使用POI不同的部分来处理这些数据,比如使用XSSF来代替HSSF。
于是按提示使用XSSF代替HSSF,用new XSSFWorkbook(excelFile)来读取Workbook,对Excel2007没有问题了,可是在读取Excel2003以前(包括2003)的版本时却发生了如下新异常:
org.apache.poi.openxml4j.exceptions.InvalidOperationException: Can't open the specified file: '*.xls'
该错误是说,操作无效,不能打开指定的xls文件。
下载POI的源码后进行单步调试,发现刚开始的时候还是对的,但到ZipFile类后就找不到文件了,到网上查了下,原来是XSSF不能读取Excel2003以前(包括2003)的版本,这样的话,就需要在读取前判断文件是2003前的版本还是2007的版本,然后对应调用HSSF或XSSF来读取。
这是初步的想法,但这种做法比较麻烦,看了下API,发现XSSF和HSSF虽然在不同的包里,但却引用了同一接口Workbook,于是想到了这样的读取方法:
Workbook book = null;
try {
book = new XSSFWorkbook(excelFile);
} catch (Exception ex) {
book = new HSSFWorkbook(new FileInputStream(excelFile));
}
在各版本的Excel中测试,没有发生异常,问题解决。
评论
[flash=200,200][url][img][list] |
[*]
|
[/list][/img][/url][/flash] |
// Excel批量导入
public String importExcle() {
int error = 0;
TEmployee employee = (TEmployee) request.getSession().getAttribute(
"employee");
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
// 声明数据流
InputStream is = null;
if (employee != null) {
if (excel != null) {
// 如果出错记住导入到的行和列
int hang = 0;
int lie = 0;
try {
// 解析excel 2007 版本文件
is = new FileInputStream(excel);
XSSFWorkbook work = new XSSFWorkbook(is);
XSSFSheet sheet = work.getSheetAt(0);
int rows = sheet.getPhysicalNumberOfRows();
if (sheet != null) {
Map<TImportantCustomerAndTNextFollowDetail, List<TCustomerFollowDetail>> map = new LinkedHashMap<TImportantCustomerAndTNextFollowDetail, List<TCustomerFollowDetail>>();
System.out.println("解析excel 2007版本文件");
// 导入啊 2007版
/*--------------------------------------------------------------------------------------------------------------------------*/
// 循环表的行,从第二行开始
long st07 = System.currentTimeMillis();
for (int i = 1; i < rows; i++) {
TImportantCustomerAndTNextFollowDetail tt = new TImportantCustomerAndTNextFollowDetail();
hang = i + 1;
XSSFRow row = sheet.getRow(i);
if (row != null) {// 判断是否为空
/*--------重要客户信息表------------------------------*/
TImportantCustomer ic = new TImportantCustomer();
if (row.getCell((short) (0)) != null) {
lie = 1;
String v = Util.getXssfCellValue((row.getCell((short) 0)));
ic.setCompanyName(v);
}
if (row.getCell((short) (1)) != null) {
lie = 2;
String v = Util.getXssfCellValue((row.getCell((short) 1)));
ic.setLinkMan(v);
}
if (row.getCell((short) (2)) != null) {
lie = 3;
String v = Util.getXssfCellValue((row.getCell((short) 2)));
ic.setTell(v);
}
if (row.getCell((short) (3)) != null) {
lie = 4;
String v = Util.getXssfCellValue((row.getCell((short) 3)));
ic.setTelephone(v);
}
if (row.getCell((short) (4)) != null) {
lie = 5;
String v = Util.getXssfCellValue((row.getCell((short) 4)));
ic.setEmail(v);
}
if (row.getCell((short) (5)) != null) {
lie = 6;
String v = Util.getXssfCellValue((row.getCell((short) 5)));
ic.setQq(v);
}
if (row.getCell((short) (6)) != null) {
lie = 7;
String v = Util.getXssfCellValue((row.getCell((short) 6)));
ic.setCompanyDetail(v);
}
//并发数
if (row.getCell((short) (7)) != null) {
lie = 8;
String v = Util.getXssfCellValue((row.getCell((short) 7)));
if (StringUtils.hasText(v)) {
ic.setConcurrent(Integer.parseInt(v));
}
}
//行业
if (row.getCell((short) (8)) != null) {
lie = 9;
String v = Util.getXssfCellValue((row.getCell((short)));
if (StringUtils.hasText(v)) {
ic.setIndustry(v);
}
}
//职位
if (row.getCell((short) (9)) != null) {
lie = 10;
String v = Util.getXssfCellValue((row.getCell((short) 9)));
if (StringUtils.hasText(v)) {
ic.setPosition(v);
}
}
//主要负责人
if (row.getCell((short) (10)) != null) {
lie = 11;
String v = Util.getXssfCellValue((row.getCell((short) 10)));
if (StringUtils.hasText(v)) {
ic.setHead(v);
}
}
//合作方式
if (row.getCell((short) (11)) != null) {
lie = 12;
String v = Util.getXssfCellValue((row.getCell((short) 11)));
if (StringUtils.hasText(v)) {
ic.setCooperation(v);
}
}
//公司规模
if (row.getCell((short) (12)) != null) {
lie = 13;
String v = Util.getXssfCellValue((row.getCell((short) 12)));
if (StringUtils.hasText(v)) {
ic.setCompanySize(v);
}
}
//客户级别
if (row.getCell((short) (13)) != null) {
lie = 14;
String v = Util.getXssfCellValue((row.getCell((short) 13)));
if (StringUtils.hasText(v)) {
ic.setCustomerLevel(Integer.parseInt(v));
}
}
//不购买原因
if (row.getCell((short) (14)) != null) {
lie = 15;
String v = Util.getXssfCellValue((row.getCell((short) 14)));
if (StringUtils.hasText(v)) {
ic.setWhyNotBuy(v);
}
}
//需求简介
if (row.getCell((short) (15)) != null) {
lie = 16;
String v = Util.getXssfCellValue((row.getCell((short) 15)));
if (StringUtils.hasText(v)) {
ic.setRequireIntroduction(v);
}
}
/*--------下次跟进表------------------------------*/
TNextFollowDetail nf = new TNextFollowDetail();
if (row.getCell((short) (16)) != null) {
lie = 17;
String v = Util.getXssfCellValue((row.getCell((short) 16)));
nf.setMainRequire(v);
}
if (row.getCell((short) (17)) != null) {
lie = 18;
String v = Util.getXssfCellValue((row.getCell((short) 17)));
nf.setNextFollowDetail(v);
}
if (row.getCell((short) (18)) != null) {
lie = 19;
String v = Util.getXssfCellValue((row.getCell((short) 18)));
if (StringUtils.hasText(v)) {
nf.setNextFollowDate(sf.parse(v));
}
}
if (row.getCell((short) (19)) != null) {
lie = 20;
String v = Util.getXssfCellValue((row.getCell((short) 19)));
nf.setNextFollowMan(v);
}
// 重要客户信息保存
ic.setCreateDate(new Date());
tt.setIc(ic);
// 下次跟进保存
tt.setNf(nf);
/*--------跟进历史记录表------------------------------*/
// 计算循环次数
int k = (row.getLastCellNum() - 19) / 3;
List<TCustomerFollowDetail> nfd = new ArrayList<TCustomerFollowDetail>();
TCustomerFollowDetail icf = null;
for (int j = 0; j < k; j++) {
icf = new TCustomerFollowDetail();
if (row.getCell((short) (3 * j + 20)) != null) {
lie = 3 * j + 21;
String v = Util.getXssfCellValue((row.getCell((short) (3 * j + 20))));
icf.setFollowMan(v);
}
if (row.getCell((short) (3 * j + 21)) != null) {
lie = 3 * j + 22;
String v = Util.getXssfCellValue((row.getCell((short) (3 * j + 21))));
if (StringUtils.hasText(v)) {
icf.setFollowDate(sf.parse(v));
}
}
if (row.getCell((short) (3 * j + 22)) != null) {
lie = 3 * j + 23;
String v = Util.getXssfCellValue((row.getCell((short) (3 * j + 22))));
icf.setFollowContent(v);
}
if (StringUtils.hasText(icf.getFollowMan())|| StringUtils.hasText(icf.getFollowContent())|| icf.getFollowDate() != null) {
// 保存历史跟进
nfd.add(icf);
}
}
map.put(tt, nfd);
}
}
try {
//保存 错误则返回错误行
error = importantCustomerBiz.addExcelInfo(map);
} catch (Exception e) {
}
long ed07 = System.currentTimeMillis();
if (error <= 0) {
request.setAttribute("message",
"excel 2007 导入成功(=^_^=),累计耗时"+ (ed07 - st07) + "毫秒");
} else {
request.setAttribute("message", "从 <<" + error+ "行>> 之后导入失败,累计耗时" + (ed07 - st07) + "毫秒");
}
}
} catch (Exception e) {
/*--------------------------------------------------------------------------------------------------------------------------*/
// 导入啊 2003版
/*--------------------------------------------------------------------------------------------------------------------------*/
try {
// 解析excel 2003 版本文件
is = new FileInputStream(excel);
HSSFWorkbook work = new HSSFWorkbook(is);
HSSFSheet sheet = work.getSheetAt(0);
if (sheet != null) {
Map<TImportantCustomerAndTNextFollowDetail, List<TCustomerFollowDetail>> map = new LinkedHashMap<TImportantCustomerAndTNextFollowDetail, List<TCustomerFollowDetail>>();
System.out.println("解析excel 2003 版本文件");
int rows = sheet.getPhysicalNumberOfRows();
// 循环表的行,从第二行开始
long st03 = System.currentTimeMillis();
for (int i = 1; i < rows; i++) {
TImportantCustomerAndTNextFollowDetail tt = new TImportantCustomerAndTNextFollowDetail();
hang = i + 1;
HSSFRow row = sheet.getRow(i);
if (row != null) {// 判断是否为空
/*--------重要客户信息表------------------------------*/
TImportantCustomer ic = new TImportantCustomer();
if (row.getCell((short) (0)) != null) {
lie = 1;
String v = Util.getHssfCellValue((row.getCell((short) 0)));
ic.setCompanyName(v);
}
if (row.getCell((short) (1)) != null) {
lie = 2;
String v = Util.getHssfCellValue((row.getCell((short) 1)));
ic.setLinkMan(v);
}
if (row.getCell((short) (2)) != null) {
lie = 3;
String v = Util.getHssfCellValue((row.getCell((short) 2)));
ic.setTell(v);
}
if (row.getCell((short) (3)) != null) {
lie = 4;
String v = Util.getHssfCellValue((row.getCell((short) 3)));
ic.setTelephone(v);
}
if (row.getCell((short) (4)) != null) {
lie = 5;
String v = Util.getHssfCellValue((row.getCell((short) 4)));
ic.setEmail(v);
}
if (row.getCell((short) (5)) != null) {
lie = 6;
String v = Util.getHssfCellValue((row.getCell((short) 5)));
ic.setQq(v);
}
if (row.getCell((short) (6)) != null) {
lie = 7;
String v = Util.getHssfCellValue((row.getCell((short) 6)));
ic.setCompanyDetail(v);
}
//并发数
if (row.getCell((short) (7)) != null) {
lie = 8;
String v = Util.getHssfCellValue((row.getCell((short) 7)));
if (StringUtils.hasText(v)) {
ic.setConcurrent(Integer.parseInt(v));
}
}
//行业
if (row.getCell((short) (8)) != null) {
lie = 9;
String v = Util.getHssfCellValue((row.getCell((short)));
if (StringUtils.hasText(v)) {
ic.setIndustry(v);
}
}
//职位
if (row.getCell((short) (9)) != null) {
lie = 10;
String v = Util.getHssfCellValue((row.getCell((short) 9)));
if (StringUtils.hasText(v)) {
ic.setPosition(v);
}
}
//主要负责人
if (row.getCell((short) (10)) != null) {
lie = 11;
String v = Util.getHssfCellValue((row.getCell((short) 10)));
if (StringUtils.hasText(v)) {
ic.setHead(v);
}
}
//合作方式
if (row.getCell((short) (11)) != null) {
lie = 12;
String v = Util.getHssfCellValue((row.getCell((short) 11)));
if (StringUtils.hasText(v)) {
ic.setCooperation(v);
}
}
//公司规模
if (row.getCell((short) (12)) != null) {
lie = 13;
String v = Util.getHssfCellValue((row.getCell((short) 12)));
if (StringUtils.hasText(v)) {
ic.setCompanySize(v);
}
}
//客户级别
if (row.getCell((short) (13)) != null) {
lie = 14;
String v = Util.getHssfCellValue((row.getCell((short) 13)));
if (StringUtils.hasText(v)) {
ic.setCustomerLevel(Integer.parseInt(v));
}
}
//不购买原因
if (row.getCell((short) (14)) != null) {
lie = 15;
String v = Util.getHssfCellValue((row.getCell((short) 14)));
if (StringUtils.hasText(v)) {
ic.setWhyNotBuy(v);
}
}
//需求简介
if (row.getCell((short) (15)) != null) {
lie = 16;
String v = Util.getHssfCellValue((row.getCell((short) 15)));
if (StringUtils.hasText(v)) {
ic.setRequireIntroduction(v);
}
}
/*--------下次跟进表------------------------------*/
TNextFollowDetail nf = new TNextFollowDetail();
if (row.getCell((short) (16)) != null) {
lie = 17;
String v = Util.getHssfCellValue((row.getCell((short) 16)));
nf.setMainRequire(v);
}
if (row.getCell((short) (17)) != null) {
lie = 18;
String v = Util.getHssfCellValue((row.getCell((short) 17)));
nf.setNextFollowDetail(v);
}
if (row.getCell((short) (18)) != null) {
lie = 19;
String v = Util.getHssfCellValue((row.getCell((short) 18)));
if (StringUtils.hasText(v)) {
nf.setNextFollowDate(sf.parse(v));
}
}
if (row.getCell((short) (19)) != null) {
lie = 20;
String v = Util.getHssfCellValue((row.getCell((short) 19)));
nf.setNextFollowMan(v);
}
// 重要客户信息保存
ic.setCreateDate(new Date());
tt.setIc(ic);
// 下次跟进保存
tt.setNf(nf);
/*--------跟进历史记录表------------------------------*/
// 计算循环次数
int k = (row.getLastCellNum() - 19) / 3;
List<TCustomerFollowDetail> nfd = new ArrayList<TCustomerFollowDetail>();
TCustomerFollowDetail icf = null;
for (int j = 0; j < k; j++) {
icf = new TCustomerFollowDetail();
if (row.getCell((short) (3 * j + 20)) != null) {
lie = 3 * j + 21;
String v = Util.getHssfCellValue((row.getCell((short) (3 * j + 20))));
icf.setFollowMan(v);
}
if (row.getCell((short) (3 * j + 21)) != null) {
lie = 3 * j + 22;
String v = Util.getHssfCellValue((row.getCell((short) (3 * j + 21))));
if (StringUtils.hasText(v)) {
icf.setFollowDate(sf.parse(v));
}
}
if (row.getCell((short) (3 * j + 22)) != null) {
lie = 3 * j + 23;
String v = Util.getHssfCellValue((row.getCell((short) (3 * j + 22))));
icf.setFollowContent(v);
}
if (StringUtils.hasText(icf.getFollowMan())|| StringUtils.hasText(icf.getFollowContent())|| icf.getFollowDate() != null) {
// 保存历史跟进
nfd.add(icf);
}
}
map.put(tt, nfd);
}
}
try {
error = importantCustomerBiz.addExcelInfo(map);
} catch (Exception e2) {
e2.printStackTrace();
}
long ed03 = System.currentTimeMillis();
if (error <= 0) {
request.setAttribute("message","excel 2007 导入成功(=^_^=),累计耗时"+ (ed03 - st03) + "毫秒");
} else {
request.setAttribute("message", "从 <<"+ error + "行>> 之后导入失败,累计耗时"+ (ed03 - st03) + "毫秒");
}
}
} catch (Exception e1) {
request.setAttribute("message", "从第" + hang + "行,第"+ lie + "列读取有误!,请检查");
e1.printStackTrace();
}
}
}
} else {
request.setAttribute("message", "登录超时!");
}
// 查询时对象中含有值对查询有误
if (icustomer != null) {
icustomer = null;
}
return icustomerList();
}
我在new HSSFWorkbook时new2007的会报这个错 直接用Exception有点太笼统了吧 因为我还知道一个org.apache.poi.hssf.OldExcelFormatException的错 这是弄Ecxel5.0/95出的错 这个用XSSF也处理不了
//创建相关的文件流对象 in = new FileInputStream(excelFile); //声明相关的工作薄对象 Workbook wb =null; //声明相关的excel抽取对象 ExcelExtractor extractor=null; String fileName = excelFile.getName(); String hz = fileName.substring(fileName.lastIndexOf("."),fileName.length()); if(hz.equals(".xls"))//针对2003版本 { //创建excel2003的文件文本抽取对象 wb=new HSSFWorkbook(new POIFSFileSystem(in)); extractor =new org.apache.poi.hssf.extractor.ExcelExtractor((HSSFWorkbook)wb); }else{ //针对2007版本 wb = new XSSFWorkbook(in); //创建excel2007的文件文本抽取对象 extractor =new XSSFExcelExtractor((XSSFWorkbook)wb); }
这样应该更合适一点
呵呵,谢谢夸奖
if (excelFileFileName.toLowerCase().endsWith("xls")) {
return new HSSFWorkbook(is); //这行报错! }
if (excelFileFileName.toLowerCase().endsWith("xlsx")) {
return new XSSFWorkbook(is);
}
return null;
发表评论
-
http断点续传
2014-07-24 13:31 956Http文件下载的普通模式就不多说了,断点下载与普通模式不一 ... -
修改Tomcat的运行内存 & JSP中查看当前的内存使用状况
2014-03-24 16:00 1042一、设置JVM内存设置 1. 设置JVM内存的参数有 ... -
Eclipse编码格式修改
2014-03-21 09:13 809如果要使插件开发应 ... -
标题叠加在图片上面的几种显示方式
2014-02-24 10:55 1510很多新改版的网站都会在图片显示上下一些文章,比如加 ... -
java druid淘宝数据库连接池数据库监听
2013-12-26 15:40 13526java程序很大一部分 要操作数据库,为了提高性能操作数据库 ... -
memcached- tomcat配置详解
2013-12-04 18:08 1440msmconfigurationmemcached-se ... -
Oracle中将小数转换成字符丢零.截取小数.除数为零解决法
2013-11-26 14:33 83541.小数转换成字符往往会丢失前面的零.解决方法_例:to_c ... -
java 垃圾回收配置
2013-10-22 14:16 4504一、JVM内存模型及垃 ... -
nginx配置详解
2013-10-18 14:45 1096user nginx ; #用户 ... -
oracle 列转行
2013-10-11 21:15 16320业务中做报表,需要将一列列数据汇总成一行,然后汇总,如下: ... -
osgi 注册servlet 和资源
2013-10-08 10:02 1708在Activator类中 public void s ... -
正则表达式 匹配url
2013-07-09 14:27 1593正则表达式 (http|ftp|https):\ ... -
ZooKeeper 集群配置
2013-07-05 14:40 1203ZooKeeper 是一个分布式开源框架,提供了协调 ... -
jdk logger 配置实用宝典
2013-06-18 15:45 1879日志输出是所有系统必备的,很多开发人员可能因为常常使用log ... -
CSS实现兼容性的渐变背景(gradient)效果
2013-06-05 14:32 1058CSS实现兼容性的渐变背 ... -
jinterop获取windows事件
2013-05-27 13:42 1886Java代码 package com ... -
jcifs windows主机之间进行网络文件共享
2013-05-20 18:05 1241CIFS (Common Internet File ... -
java调用windows的wmi
2013-05-20 14:34 2082100%纯java调用windows的wmi获取监控数据 ... -
java调用windows的wmi
2013-05-20 14:32 4143100%纯java调用windows的wmi获取监控数据 ... -
tomcat 域名
2013-03-14 14:44 19401. 下载安装版本的Tomcat(或者压缩版的,只不过要自己配 ...
相关推荐
Java POI库是Apache软件基金会开发的一个开源项目,主要用于处理Microsoft Office格式的文件,包括Word(.doc和.docx)、Excel(.xls和.xlsx)和PowerPoint(.ppt和.pptx)。在这个场景中,我们将重点讨论如何使用...
以上就是使用Apache POI解析Excel并转换为HTML的基本步骤,需要注意的是,为了兼容Excel 03和07,你需要处理两者之间的差异,如不同的样式类和格式。此外,对于复杂的样式和公式,可能需要额外的处理逻辑。在实际...
使用Apache POI解析Excel数据的基本步骤如下: 1. **添加依赖**:将对应的poi.jar包引入项目类路径。如果是Maven项目,可以在pom.xml文件中添加依赖项,如下: ```xml <groupId>org.apache.poi <artifactId>...
《使用POI解析Excel》 在信息技术领域,处理数据是日常工作中不可或缺的一部分,而Excel作为广泛使用的电子表格软件,其数据处理能力强大且灵活。Apache POI是一个开源库,专门用于读取和写入Microsoft Office格式...
"android poi解析Excel 的三个jar包" 提供了实现这一目标所需的Java库。这些库使得Android应用可以与Excel文件进行交互,而无需依赖Microsoft Office或任何桌面环境。让我们详细探讨这三个关键的jar包以及它们在...
**POI解析Excel的主要知识点** 1. **工作簿(Workbook)**: 在POI中,Excel文件被抽象为一个Workbook对象。你可以创建、读取或修改Workbook。 2. **工作表(Sheet)**: Workbook包含一个或多个Sheet,每个Sheet对应...
"poi3.7 poi3.6解析excel2007全jar包"指的是包含了Apache POI 3.7和3.6版本中用于解析Excel 2007 (.xlsx)文件的所有必需的JAR库。 Apache POI 3.6 和 3.7 版本之间的主要区别可能在于修复了一些已知的bug,增加了新...
2. **使用Apache POI解析Excel**: - **创建工作簿**: 使用WorkbookFactory.create()方法,传入文件或输入流来创建Workbook对象,这代表整个Excel文件。 - **访问工作表**: Workbook对象有getSheetAt()或getSheet...
Java 中 POI 解析 Excel 文件版本问题解决办法 Java 中 POI 解析 Excel 文件版本问题解决办法是 Java 开发者经常遇到的一个问题。POI(Poor Obfuscation Implementation)是 Apache 软件基金会的一个开源项目,提供...
使用Apache POI可以方便地在Java应用程序中与Excel交互,无论是生成报告、数据分析还是导入导出数据,都是强大的工具。然而,由于Excel文件的复杂性,开发者需要理解POI提供的API,以及如何有效地使用它们来避免潜在...
由于3.1版本较旧,可能不支持某些较新的Excel特性或修复的安全漏洞,建议升级到最新稳定版本以获取更好的兼容性和安全性。 5. **注意事项**: - 关闭资源:在读写操作完成后,一定要记得关闭FileInputStream、...
在Java应用中,我们可以利用POI来解析Excel数据,将其转换为可操作的对象,或者将Java对象写入Excel文件。 Excel与MySQL的交互主要涉及两个过程:数据导入和数据导出。 1. 数据导入:这个过程通常涉及到读取Excel...
当使用POI操作xlsx格式(OOXML)的Excel文件时,需要此库来解析和构建符合标准的XML文档。 2. **poi-3.8-20120326.jar**:这是Apache POI的核心库,包含处理老版Binary File Format (.xls) 的功能,以及部分OOXML的...
通过引用这些Schema,Apache POI可以确保你创建的Excel文件符合Office Open XML的标准,避免出现兼容性问题。 在实际使用中,你需要将这三个jar包加入到你的Java项目的类路径中。这样,你就可以利用Apache POI提供...
下面将详细阐述这两个库在解析Excel时的应用及其相关知识点。 1. **Apache POI**: - **简介**:Apache POI 是一个开源项目,它允许Java开发者创建、修改和显示Microsoft Office文件,特别是Excel。POI支持老版本...
本主题将深入探讨如何在Android 8.0环境下使用Apache POI库解析Excel(xls/xlsx)文件,同时结合mk和gradle两种构建方式来实现这一功能。 Apache POI是一个强大的库,主要用于读取和写入Microsoft Office格式的文件,...
然而,需要注意的是,Apache POI在处理Excel转换时可能存在浏览器兼容性问题,特别是在火狐浏览器中可能出现乱码。这可能与字符编码或者特定样式处理有关。解决此类问题通常需要对输出的HTML进行额外的调整,例如...
3. **兼容性处理**:由于Word的.doc和Excel的.xls是较旧的二进制格式,而.docx和.xlsx是较新的XML格式,所以工具类需要处理这两种不同格式的文件,确保都能正确解析和展示。 4. **性能优化**:对于大型文件,直接...
- 如何处理不同版本的 Excel 文件兼容性问题? 通过以上分析,我们可以看到使用 Apache POI 进行 Excel 数据导入是一项实用且强大的技术。开发者可以根据具体需求调整和完善示例代码,实现更高效、稳定的数据处理...
标题中的“poi解析word文档”指的是使用Apache POI库来处理Microsoft Word(.doc或.docx)文件。Apache POI是Java中一个流行的库,它允许开发者读取、写入和修改Microsoft Office格式的文件,包括Word、Excel和...