poi 上传Excel(2003|2007)到服务器导入数据库
2013-11-25 16:33
531 查看
项目需求通过Excel把数据导入数据库,一开始用的jxl,简单完成。后来发下远程下不能导入,报错路径找不到。因为服务器上面没有你路径所说的文件。更改程序思路:先把Excel上传到服务器,在服务器上读取Excel再把数据导入数据库。
上传用到的jar:1.commons-fileupload-1.2.1.jar
2.commons-io.jar
.jsp文件:
注意:1、form加上enctype="multipart/form-data"属性后才能上传文件。但是加上这个属性后文件会以二进制的数据传输。就是说form提交的信息都是二进制的。不能通过简单的document.xx.value的方式传值,获取的会为null。我用的是URL传参的方法把File控件的值传过去的。
js文件:
这样在java后台就能获取到getParameter();
java文件:
可以用截取字符串的方式判断文件类型
接着就是在服务器上读取Excel把内容导入到数据库,读取Excel用的是POI支持2003和2007。
poi用到的jar:1、dom4j-1.6.1.jar
2、poi-3.7-20101029.jar
3、poi-examples-3.7-20101029.jar
4、poi-ooxml-3.7-20101029.jar
5、poi-ooxml-schemas-3.7-20101029.jar
6、poi-scratchpad-3.7-20101029.jar
7、xmlbeans-2.3.0.jar
其中的getCell_Value方法是用来判断读到的单元格内容类型的,再做相应的转换。
这样就可以把数据用Excel的方式导入到数据库。出现错误做出相应的修改就好。错误不可怕,就怕它不报错。
上传用到的jar:1.commons-fileupload-1.2.1.jar
2.commons-io.jar
.jsp文件:
<form name="formPost1" enctype="multipart/form-data" action="" method="post"> Excel上传:<input type="file" style=" width: 0 " id="file_id" name="file_name" value="" onchange="fileLeading();" > </form>
注意:1、form加上enctype="multipart/form-data"属性后才能上传文件。但是加上这个属性后文件会以二进制的数据传输。就是说form提交的信息都是二进制的。不能通过简单的document.xx.value的方式传值,获取的会为null。我用的是URL传参的方法把File控件的值传过去的。
js文件:
function fileLeading_drug(){ var a = document.formPost2.file_name2.value; a = a.substr(a.lastIndexOf("\\") + 1); document.formPost2.action = "<%=request.getContextPath()%>/LeadingData/LeadingMain.jsp?file_name2="+a+" "; document.formPost2.submit(); }
这样在java后台就能获取到getParameter();
java文件:
可以用截取字符串的方式判断文件类型
if(!(file_name2.substring(file_name2.length()-4)).equals(".xls") &&!(file_name2.substring(file_name2.length()-5)).equals(".xlsx")){ out.println("<script>alert('选择文件格式不正确,请重新选择。');window.location.href('LeadingMain.jsp');</script>"); }else{ /*上传开始*/ String Filepath = ""; try{ DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录 factory.setRepository(new File("C:\\")); /**创建一个新的文件上传操作*/ ServletFileUpload upload = new ServletFileUpload(factory); /**设置能上传的最大文件的大小*/ upload.setSizeMax(10*1024*1024*1024); //开始读取上传信息 Iterator<FileItem> iter = upload.parseRequest(request).iterator(); // 依次处理每个上传的控件 while(iter.hasNext()) { FileItem item = (FileItem) iter.next(); // 忽略其他不是文件域的所有表单信息 if (!item.isFormField()) { if (item.getSize() > 0) { String name = item.getName(); String endName = name.substring(name.lastIndexOf(".") + 1); try{ item.write(new File(request.getRealPath("\\"+file_name2))); Filepath = request.getRealPath("\\"+file_name2); }catch(Exception e){ e.printStackTrace(); System.out.println("上传失败……………………"); } } } } }catch(Exception e){ e.printStackTrace(); } /*上传结束*/
接着就是在服务器上读取Excel把内容导入到数据库,读取Excel用的是POI支持2003和2007。
poi用到的jar:1、dom4j-1.6.1.jar
2、poi-3.7-20101029.jar
3、poi-examples-3.7-20101029.jar
4、poi-ooxml-3.7-20101029.jar
5、poi-ooxml-schemas-3.7-20101029.jar
6、poi-scratchpad-3.7-20101029.jar
7、xmlbeans-2.3.0.jar
Workbook wb = null; if(Filepath.matches("^.+\\.(?i)(xls)$")){//2003 wb = new HSSFWorkbook(new FileInputStream(Filepath)); } if(Filepath.matches("^.+\\.(?i)(xlsx)$")){//2007 wb = new XSSFWorkbook(new FileInputStream(Filepath)); } Sheet sheet = wb.getSheetAt(0); if(!(sheet.getRow(0).getCell(1).getStringCellValue().toLowerCase()).equals("drug_name")){ out.println("<script>alert('导入文件数据不正确。');window.location.href('LeadingMain.jsp');</script>"); }else{ for(int i=1;i<=sheet.getLastRowNum();i++){ max_mapid_sql2 = "select max(DRUG_MAP_ID) from drug_map"; TCommonRecord max_mapid2 = (TCommonRecord)query.queryForObject(max_mapid_sql2,new CommonMapper()); int a = max_mapid2.getInt("max(DRUG_MAP_ID)")+1; map_sql2 = "insert into DRUG_MAP (DRUG_MAP_ID,DRUG_NO_LOCAL,DRUG_NAME_LOCAL,DRUG_SPEC,UNITS,DRUG_FORM,TOXI_PROPERTY,DOSE_PER_UNIT,DOSE_UNITS,DRUG_INDICATOR,INPUT_CODE,CLIENT_NAME) values "+ "('"+a+"'," + "'"+getCell_Value(sheet.getRow(i).getCell(0))+"'," + "'"+getCell_Value(sheet.getRow(i).getCell(1))+"'," + "'"+getCell_Value(sheet.getRow(i).getCell(2))+"'," + "'"+getCell_Value(sheet.getRow(i).getCell(3))+"'," + "'"+getCell_Value(sheet.getRow(i).getCell(4))+"'," + "'"+getCell_Value(sheet.getRow(i).getCell(5))+"'," + "'"+getCell_Value(sheet.getRow(i).getCell(6))+"'," + "'"+getCell_Value(sheet.getRow(i).getCell(7))+"'," + "'"+getCell_Value(sheet.getRow(i).getCell(8))+"'," + "'"+getCell_Value(sheet.getRow(i).getCell(9))+"'," + "'"+crUser.get("OWNER_HOSPITAL")+"')"; query.update(map_sql2); } out.println("<script>alert('导入HIS数据成功。');window.location.href('LeadingMain.jsp');</script>"); }
其中的getCell_Value方法是用来判断读到的单元格内容类型的,再做相应的转换。
String getCell_Value (Cell cell) //判断单元格cell的类型并且做出相应的转换 { String strCell = ""; if(cell!=null){ switch(cell.getCellType()){ case Cell.CELL_TYPE_STRING: strCe 9eb3 ll = cell.getStringCellValue(); break; case Cell.CELL_TYPE_NUMERIC: strCell = String.valueOf(cell.getNumericCellValue()); break; case Cell.CELL_TYPE_BLANK: strCell = ""; break; case Cell.CELL_TYPE_BOOLEAN: strCell = String.valueOf(cell.getBooleanCellValue()); break; default: strCell = ""; break; } } return strCell; }
这样就可以把数据用Excel的方式导入到数据库。出现错误做出相应的修改就好。错误不可怕,就怕它不报错。
相关文章推荐
- POI 处理前端上传的Excel(2003和2007)操作(导入数据)
- POI将数据导入Excel,上传到服务器,并从客户端保存
- POI将数据导入Excel,上传到服务器,并从客户端保存
- Java上传Excel同时兼容2003和2007 解决read error和org.apache.poi.poifs.filesystem.OfficeXmlFileException异常
- 使用ocupload和POI一键上传Excel并解析导入数据库
- C#:Excel上传服务器后导入数据库
- POI导入2003和2007到数据库
- 工作记录:使用POI从excel导入数据(2003版本、2007以及以上版本)
- PHP-Excel读取导入Excel数据到数据库(2003,2007通用)使用方法
- POI导入2003和2007Excel,txt,cvs等文件并校验
- java poi excel 2003和2007导入导出
- java 100万条数据以内的Excel 导入到数据库 适用于2003和2007版
- 使用ocupload和POI一键上传Excel并解析导入数据库
- asp.net将本地Excel上传到服务器并把数据导入到数据库
- JavaWeb一个完整的Servlet上传Excel表格使用poi解析至数据库实现(兼容2003,2007)。
- Excel文件上传服务器并解析存入数据库的整套过程(2003--2013都可试)
- 怎么把上传的excel表内容导入到数据库
- poi 3.10 读取excel(2003/2007)
- Java POI读取Excel 2003/2007/2010例子
- easyui,springmvc,poi实现上传excel写入数据到数据库中