【Javaweb】poi实现通过上传excel表格批量导入数据到数据库
程序员文章站
2022-06-25 15:53:32
1.导入poi相关jar包 对于只操作2003及以前版本的excel,只需要导入poi-XXX.jar ,如果还需要对2007及以后版本进行操作,则需要导入 poi-ooxml-XXX.jar poi-ooxml-schemas-XXX.jar Maven方式 2.读取excel文件 ImportE ......
1.导入poi相关jar包
对于只操作2003及以前版本的excel,只需要导入poi-xxx.jar ,如果还需要对2007及以后版本进行操作,则需要导入
poi-ooxml-xxx.jar
poi-ooxml-schemas-xxx.jar
maven方式
1 <dependency> 2 <groupid>org.apache.poi</groupid> 3 <artifactid>poi</artifactid> 4 <version>3.17</version> 5 </dependency> 6 7 <dependency> 8 <groupid>org.apache.poi</groupid> 9 <artifactid>poi-ooxml</artifactid> 10 <version>3.17</version> 11 </dependency>
2.读取excel文件
importexcel工具类
1 import org.apache.poi.hssf.usermodel.hssfworkbook; 2 import org.apache.poi.ss.usermodel.*; 3 import org.apache.poi.xssf.usermodel.xssfworkbook; 4 5 import java.io.inputstream; 6 import java.util.arraylist; 7 import java.util.hashmap; 8 import java.util.list; 9 import java.util.map; 10 11 public class importexcel { 12 // abc.xls
13 public static boolean isxls(string filename){ 14 // (?i)忽略大小写 15 if(filename.matches("^.+\\.(?i)(xls)$")){ 16 return true; 17 }else if(filename.matches("^.+\\.(?i)(xlsx)$")){ 18 return false; 19 }else{ 20 throw new runtimeexception("格式不对"); 21 } 22 } 23 24 public static list<map<string, object>> readexcel(string filename, inputstream inputstream) throws exception{ 25 26 boolean ret = isxls(filename); 27 workbook workbook = null; 28 // 根据后缀创建不同的对象 29 if(ret){ 30 workbook = new hssfworkbook(inputstream); 31 }else{ 32 workbook = new xssfworkbook(inputstream); 33 } 34 sheet sheet = workbook.getsheetat(0); 35 // 得到标题行 36 row titlerow = sheet.getrow(0); 37 38 int lastrownum = sheet.getlastrownum(); 39 int lastcellnum = titlerow.getlastcellnum(); 40 41 list<map<string, object>> list = new arraylist<>(); 42 43 for(int i = 1; i <= lastrownum; i++ ){ 44 map<string, object> map = new hashmap<>(); 45 row row = sheet.getrow(i); 46 for(int j = 0; j < lastcellnum; j++){ 47 // 得到列名 48 string key = titlerow.getcell(j).getstringcellvalue(); 49 cell cell = row.getcell(j); 50 cell.setcelltype(celltype.string); 51 52 map.put(key, cell.getstringcellvalue()); 53 } 54 list.add(map); 55 } 56 workbook.close(); 57 return list; 58 59 } 60 }
前端:给出上传链接
1 <div class="layui-form-item"> 2 <label class="layui-form-label">选择文件</label> 3 <div class="layui-input-block"> 4 <input type="file" name="mfile" id="no1" class="layui-input"> 5 </div> 6 </div> 7 <div class="layui-form-item"> 8 <input class="layui-btn" style="margin-left: 10%" id="btn1" type="submit" value="确认导入"> 9 </div>
后台controller层处理接收的excel文件
1 @requestmapping("/staff/import.do") 2 @responsebody 3 public jsonbean importexcel(@requestparam multipartfile mfile){ 4 try { 5 string filename = mfile.getoriginalfilename(); 6 // 获取上传文件的输入流 7 inputstream inputstream = mfile.getinputstream(); 8 // 调用工具类中方法,读取excel文件中数据 9 list<map<string, object>> sourcelist = importexcel.readexcel(filename, inputstream); 10 11 // 将对象先转为json格式字符串,然后再转为list<sysuser> 对象 12 objectmapper objmapper = new objectmapper(); 13 string infos = objmapper.writevalueasstring(sourcelist); 14 15 // json字符串转对象 16 list<staff> list = objmapper.readvalue(infos, new typereference<list<staff>>() {}); 17 18 // 批量添加 19 staffservice.addstaffbatch(list); 20 21 return jsonutils.createjsonbean(1, null); 22 23 } catch (exception e) { 24 // todo auto-generated catch block 25 e.printstacktrace(); 26 27 return jsonutils.createjsonbean(0, e.getmessage()); 28 } 29 30 }
注意:还要配置spring-bean.xml
<!-- 文件上传的解析器 id的值不能改-->
<bean id="multipartresolver" class="org.springframework.web.multipart.commons.commonsmultipartresolver">
<!-- 上传文件的最大大小 ,单位字节 ,比如 1024 * 1024 = 1m-->
<property name="maxuploadsize" value="1048576"></property>
</bean>
【注意】excel每个列名要和数据库字段名一致!!
对于有date类型的数据,excel输入2019-12-12会变为日期格式数据,日期类型传到后台时会转成字符串,其格式会出错,就无法转换date类型,
所以excel表格一定要将时间相关数据用文本格式存储!!!
数据库对应实体类与时间相关属性要添加@datetimeformat(pattern="yyyy-mm-dd")注解
上一篇: thinkphp5路由心得
下一篇: Java多线程小总结
推荐阅读
-
Java实现批量导入Excel表格数据到数据库中
-
通过文本导入向导实现将网上的数据批量导入到WPS表格中
-
【Javaweb】poi实现通过上传excel表格批量导入数据到数据库
-
通过Java实现批量导入数据到SQLServer数据库
-
Java实现批量导入Excel表格数据到数据库中
-
【Javaweb】poi实现通过上传excel表格批量导入数据到数据库
-
php通过PHPExcel导入Excel表格到MySQL数据库的简单实例
-
php通过PHPExcel导入Excel表格到MySQL数据库的简单实例
-
通过文本导入向导实现将网上的数据批量导入到WPS表格中
-
JavaWeb一个完整的Servlet上传Excel表格使用poi解析至数据库实现(兼容2003,2007)。