关于excel文件导入到mysql数据没有读取到文件问题

  我最近在做一个oa项目,其中有一个excel文件导入到数据中去,用poi做的。我现在在后台能够得到文件的完整路径,但是HSSFWorkbook并没有创建一个工作簿。在网上找了很多资料,并没有找到解决方案,本人是只菜鸟,望各位大侠指路,帮忙看看。谢谢!

前台import.jsp代码:

写道
<%@ page contentType="text/html;charset=GBK"%>
<%@ page session="true" %>
<%@ page isThreadSafe="true" %>
<head>

<style type="text/css">
<!--
body,td,th {
font-size: 12px;
}
-->
</style>
<title></title>
</head>
<body >

<script language="javascript">
function add(){
var filePath = document.myform.Urlexcel.value;
alert(filePath);
myform.action="saveExcel.jsp?filePath="+filePath ;
myform.submit();
}

</script>
<form action="saveExcel.jsp" enctype="multipart/form-data" name="myform" method="post" onSubmit="return check(this)">

<p> </p>
<p> </p>
<p> </p>
<table width="80%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td height="50" align="center" valign="middle"> </td>
<td height="50" align="left" valign="middle"> Excel文件:
<input name="Urlexcel" type="file" id="Urlexcel" size="41" /></td>
<td> </td>
</tr>
<tr>

<td height="50" align="center" valign="middle" colspan="2">
<input type="button" onClick="add();" name="Submit1" value="确认提交" />
        
<input type="submit" name="Submit2" value="取消重置" />
</td>
<td> </td>
</tr>
</table>
</form>

</body>
</html>

 

后台saveExcel.jsp代码:

<%@ page language="java"%>
<%@ page session="true"%>
<%@ page isThreadSafe="true"%>
<%@ page contentType="text/html;charset=GBK"%>
<%@page import="org.apache.poi.hssf.usermodel.HSSFWorkbook"%>
<%@page import="java.io.FileInputStream"%>
<%@page import="org.apache.poi.hssf.usermodel.HSSFSheet"%>
<%@page import="org.apache.poi.hssf.usermodel.HSSFCell"%>
<%@page import="org.apache.poi.hssf.usermodel.HSSFRow"%>
<%@page import="java.io.FileNotFoundException"%>
<%@page import="java.io.IOException"%>
<%@page import="org.apache.poi.poifs.filesystem.POIFSFileSystem"%>
<% 
    String filePath = request.getParameter("filePath");
    out.println(filePath);
    try {
            // 创建对Excel工作簿文件的引用
            FileInputStream fis = new FileInputStream(filePath); 
            POIFSFileSystem fs = new POIFSFileSystem(fis); 
            HSSFWorkbook wookbook = new HSSFWorkbook(fs);
            out.println(wookbook);//此处并没有打印出能容
            HSSFSheet sheet = wookbook.getSheet("Sheet1");
            // 获取到Excel文件中的所有行数
            int rows = sheet.getPhysicalNumberOfRows();
            out.println(rows);
            // 遍历行
            for (int i = 0; i < rows; i++) {
                // 读取左上端单元格?
                HSSFRow row = sheet.getRow(i);
                // 行不为空 if (row != null) {
                // 获取到Excel文件中的所有的列
                int cells = row.getPhysicalNumberOfCells();
                String value = "";
                // 遍历列
                for (short j = 0; j < cells; j++) {
                    // 获取到列的值
                    HSSFCell cell = row.getCell(j);
                    if (cell != null) {
                        switch (cell.getCellType()) {
                        case HSSFCell.CELL_TYPE_FORMULA:
                            break;
                        case HSSFCell.CELL_TYPE_NUMERIC:
                            value += cell.getNumericCellValue() + ",";
                            break;
                        case HSSFCell.CELL_TYPE_STRING:
                            value += cell.getStringCellValue() + ",";
                            break;
                        default:
                            value += "0";
                            break;
                        }
                    }
                } 
                // 将数据插入到mysql数据库中
                    String[] val = value.split(",");
                    Nsxxb1 entity = new Nsxxb1() ;
                    entity.setGLM(val[0]);
                    entity.setQYMC(val[1]);
                    entity.setXSE1(Double.parseDouble(val[2]));
                    entity.setZZS1(Double.parseDouble(val[3]));
                    entity.setYYS1(Double.parseDouble(val[4]));
                    entity.setXFS1(Double.parseDouble(val[5]));
                    entity.setQYSDS1(Double.parseDouble(val[6]));
                    entity.setGRSDS1(Double.parseDouble(val[7]));
                    entity.setYHS1(Double.parseDouble(val[8]));
                    entity.setTDZZS1(Double.parseDouble(val[9]));
                    entity.setCJS1(Double.parseDouble(val[10]));
                    Nsxxb1Service.insert(entity);
            }
        } catch (FileNotFoundException e) {
            out.println("导入失败");
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }   
%>


 

2个回答

既然是客户端的文件路径,服务器读不到那个文件
那么解决方法就是,先将这个文件上传到服务器,你临时保存,然后读取数据入库,成功后删除 一步到位 不用吧上传和读取数据分开

代码我只瞄一眼,不是不负责,时间有限
就问一句,你所说的“能够得到文件的完整路径”是客户端的路径还是你将excel文件缓存到服务器磁盘上的路径?

我想楼主您的路径可能客户端上传excel的路径,那个而你服务器的程序读取客户端路径的文件,楼主您认为能读取到吗?我不知道java能不能这么干,貌似没这么强悍
当然,有种可能是能读到的,那就是服务器路径下巧合有这么个相同的文件

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!