当前位置: 代码迷 >> Java Web开发 >> java导入07excel报错?
  详细解决方案

java导入07excel报错?

热度:200   发布时间:2016-04-16 21:52:50.0
java导入07excel出错???
错误信息:
org.apache.poi.openxml4j.exceptions.InvalidOperationException: Can't open the specified file: 'D:\apache-tomcat-6.0.20\webapps\xxx\upload\test.xlsx


代码
log.info("07打开上传文件开始——————");
XSSFWorkbook wb = null;
wb = new XSSFWorkbook(url);   //这一步出错~~~~


url是文件的路径,,解析03的excel出错,很奇怪啊,我用的是我之前写的代码居然解析07excel不行了,,,,

另外  我tomcat下 upload  下 test.xlsx是存在并且可以打开的

但是每次走到这不就出错,,jar问题  还是  ????


求解了,

------解决思路----------------------
听你描述之前是行的。
看看这个文件是不是有其他进程打开着呢?
------解决思路----------------------
到底是解析03出错还是解析07出错

解析03要用HSSFWorkbook 
解析07要用XSSFWorkbook
------解决思路----------------------
解析的时候要写一个判断 
最简单的方法是
根据文件后缀名判断是用解析03的方法还是07的方法
------解决思路----------------------
这个错估计是你文件有问题吧 
------解决思路----------------------
我用的 excel 导入 貌似。也只支持 xls 的,,,是不是 你的那个也是只支持xls 格式的 呢?
------解决思路----------------------
尽量不要用new XSSFWorkbook   用WorkbookFactory.createWorkbook
------解决思路----------------------
那楼主你的jdk版本呢?
------解决思路----------------------
http://blog.csdn.net/zhaoxiaoyueyue/article/details/39227115
------解决思路----------------------

说明:实现的功能是checkBox选择多个订单对象,然后由word或excel导出

Jsp页面
<a href="javascript:exportOrders('excel')">批量导出订单(excel)</a>

<a href="javascript:exportOrders('word')">批量导出订单(word)</a>

--------------------------------------------------------------

Js文件
/*
 * 批量导出订单
 *将要导出数据id进行拼接
 */
function exportOrders(model) {
//messageId是checkbox的id 
var messageIds = document.getElementsByName("messageId");
var orderIds = "";
var checkedCount = 0;
for ( var i = 0; i < messageIds.length; i++) {
if (messageIds[i].checked) {
checkedCount++;
}
}
if (checkedCount <= 0) {
alert("请至少选择一条数据!");
return;
} else {
for ( var i = 0; i < messageIds.length; i = i + 1) {
if (messageIds[i].checked) {
orderIds += ("'"+messageIds[i].value + "';");
}
}
}
document.getElementById("orderIds").value = orderIds;
document.getElementById("model").value = model;
var action = document.myForm.action;// 记录之前的Action,用完之后,恢复原状
document.myForm.action = "order/exportOrders/";
document.myForm.submit();
document.myForm.action = action;
}

--------------------------------------------------------------

Struts.xml文件
<!-- 批量导出订单信息(excel/word)-->
<actionname="exportOrders"method="exportOrders" class="com.cloudsoar3c.action.OrderAction">
<result name="excel">/WEB-INF/order/exportOrdersExcel.jsp
</result>
<result name="word">/WEB-INF/order/exportOrdersWord.jsp
</result>
<interceptor-ref name="securityStack"></interceptor-ref>
</action>

--------------------------------------------------------------

Action文件
/**
 * 批量导出订单信息(excel/word)
 * 
 * @return
 */
public String exportOrders(){
String stringOrderIds = this.request.getParameter("orderIds");
String model = this.request.getParameter("model");
String orderIds = Util.charReplacement(stringOrderIds, ";", ",");
Util.log(orderIds);
List<TOrder> orderList = this.orderBiz.getOrderListByIds(orderIds);
Util.log("导出的订单集合大小:"+orderList.size());
super.request.setAttribute("orderList", orderList);
return "excel".equals(model.trim()) ? "excel" : "word";
}

--------------------------------------------------------------

/**
 * 拆分字符串(将"A#B#C#D#E#F#"格式的字符串转换为"A,B,C,D,E,F"),并输出  */
public static String charReplacement(String sourceStr, String sourceChar,
String targetChar) {
String result = "";

// 将需要处理的字符串中含有的sourceChar,全部替换为targetChar
String temp = sourceStr.replaceAll(sourceChar, targetChar);

// 截取字符串中最后一个字符;
int len = temp.length();
result = temp.substring(0, len - 1);

return result;
}

-------------------------------------------------------------------

导出Excel的返回页面 exportOrdersExcel.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page contentType="text/html; charset=GBK" %>
<%@taglib uri="/struts-tags" prefix="s"%>
<%@page import="java.util.*"%>
<%@page import="java.text.SimpleDateFormat"%>
<% response.setContentType("application/vnd.ms-excel;charset=GBK"); %>
<HTML>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
  相关解决方案