我最近在做一个oa项目,其中有一个excel文件导入到数据中去,用poi做的。我现在在后台能够得到文件的完整路径,但是HSSFWorkbook并没有创建一个工作簿。在网上找了很多资料,并没有找到解决方案,本人是只菜鸟,望各位大侠指路,帮忙看看。谢谢!
前台import.jsp代码:
后台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(); } %>
既然是客户端的文件路径,服务器读不到那个文件
那么解决方法就是,先将这个文件上传到服务器,你临时保存,然后读取数据入库,成功后删除 一步到位 不用吧上传和读取数据分开
代码我只瞄一眼,不是不负责,时间有限
就问一句,你所说的“能够得到文件的完整路径”是客户端的路径还是你将excel文件缓存到服务器磁盘上的路径?
我想楼主您的路径可能客户端上传excel的路径,那个而你服务器的程序读取客户端路径的文件,楼主您认为能读取到吗?我不知道java能不能这么干,貌似没这么强悍
当然,有种可能是能读到的,那就是服务器路径下巧合有这么个相同的文件