java 导入excel文件保存到数据库(亲身实践,直接复制)

java 导入excel文件保存到数据库(亲身实践,直接复制),第1张

java 导入excel文件保存到数据库(亲身实践,直接复制) java 导入excel文件保存到数据库

本文所用项目为Springboot项目,基本依赖数据库配置不过多赘述!

1.后台服务端 1.1技术介绍

jxl是一个开源的Java Excel API项目,通过Jxl,Java可以很方便的 *** 作微软的Excel文档。除了Jxl之外,还有Apache的一个POI项目,也可以 *** 作Excel,两者相比之下:Jxl使用方便,但功能相对POI比较弱,很多时候,一个软件应用程序需要生成Microsoft Excel文件格式的报告。有时,一个应用程序甚至希望将Excel文件作为输入数据。例如,一个公司开发的应用程序将财务部门需要所有输出生成自己的Excel。

1.2 所需依赖
 
        
            net.sourceforge.jexcelapi
            jxl
            2.6.12
        
        
        
            jexcelapi
            jxl
            2.4.2
        
1.3 测试代码
	@RequestMapping(value="/upload")
	@ResponseBody
	public String upload_excel(@RequestParam("file") MultipartFile file, HttpServletResponse response,HttpServletRequest request)throws Exception {
		File toFile = null;
		if (file.equals("") || file.getSize() <= 0) {
			file = null;
		} else {
			//需要将前端的MultipartFile 转为file,用到下面的方法,
			InputStream ins = null;
			ins = file.getInputStream();
			toFile = new File(file.getOriginalFilename());
			//工具方法在最下方
			inputStreamToFile(ins, toFile);
			ins.close();
		}

		//这种方法会在本地产生临时文件,用完后需要删除
		if (toFile.exists()) {
			toFile.delete();
			System.out.println(1111111111);
			int i;
			Sheet sheet;
			Workbook book;
			List list=new ArrayList<>();
			Cell cell1,cell2,cell3,cell4,cell5,cell6,cell7;
			String bt1;
			try {
				//文件必须放到D盘下,excel需要另存为xls格式
				book= Workbook.getWorkbook(new File("D://"+toFile.getName()));
				//获得第一个工作表对象(ecxel中sheet的编号从0开始,0,1s,2,3,....)
				sheet=book.getSheet(0);
				//获取左上角的单元格
				cell1=sheet.getCell(0,0);
				System.out.println("标题:"+cell1.getContents());
				i=1;
				//存表头集合
				List bt=new ArrayList();
				//取表头,表格有多少列,k就是多少
				for (int k = 0; k < 33; k++) {
					bt1=sheet.getCell(k,0).getContents();
					//这个方法是将表头改成自己想需要的字段名,逻辑就是if判断(如果不需要,请注释下一行)
					bt1=btChange(bt1);
						bt.add(k, bt1);
				}
				//获取除表头外行的数据
				while(true)
				{
					Map  map=new HashMap<>();
					//获取每一行的单元格
					for (int j = 0; j <33 ; j++) {
						cell1=sheet.getCell(j,i);//(列,行)
						//map中的key
						String key=bt.get(j);
						//下面判断语句时作者代码需要,剔除账号和序号那一列的数据,如果不需要,请
						if(key.equals("账号")){
						}else if(key.equals("序号")){
						}
						else {
							map.put(key,cell1.getContents());
						}
					}
					list.add(i-1, map);
					//直接遍历到最后一行,遍历完i++会抛出异常,可以自己修改
					if("".equals(cell1.getContents())==true)    //如果读取的数据为空
						break;
					   i++;
				}
				book.close();
			}
			catch(ArrayIndexOutOfBoundsException e)  {
				return "success";
			}catch (Exception e){
				return  "false";
			}
			finally {
				//数据集合list
				//可以添加保存数据库操作
			}
		}
		return "success";
	}
	//转换方法
	private static void inputStreamToFile(InputStream ins, File file) {
		try {
			OutputStream os = new FileOutputStream(file);
			int bytesRead = 0;
			byte[] buffer = new byte[8192];
			while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
				os.write(buffer, 0, bytesRead);
			}
			os.close();
			ins.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
2. 前端代码 2.1 js包

只需要这两个js文件



2.2 方法

添加标签


调用方法

 function uploadFile123(file){
	alert("请把文件夹放到D盘根目录下,打开另存为xls格式,否则会上传失败")
	// var index = layer.msg('正在上传,请稍候',{icon: 16,time:false,shade:0.8});
	$.ajaxFileUpload({
			url :  httpurl+'/payroll/upload' ,
			secureuri : false, //一般设置为false
			fileElementId : 'file', //文件上传空间的id属性  
			type : 'post',
			dataType : 'text', //返回值类型 一般设置为
			success : function(result) //服务器成功响应处理函数
			{
				alert(result)

			},
			error : function(result)//服务器响应失败处理函数
			{

			}
		}
	);

	return false;
}
3. 运行结果 3.1文件截图

3.2 数据集合
  • 方便插入数据库,我把表头提取首字母了。(代码有备注,如果业务逻辑需要,自己添加代码就行了)

[{sds=103.49, lsxbt=0, zfbt=1757, kylbx=507.355, zwgz=1250, gwjt=655, bksds=0, dwfdzynj=285.4, syshbt=585, dky=0, cgbt=0, bfgz=0, zfgjj=1761, kyanglbx=856.2, baseSALARY=563, REALWAGES=3550.925, kghf=77.595, dwfdsybxj=19.4, jtbt=250, NAME=arices, kfhj=3772.535, WAGESPAYABLE=5060, ybhj=7323.46, qtkk=0, dwfdghf=77.595, dwfdylbx=429.765, dwfdyanglbx=570.8, dwfdgjj=880.5, kzynj=428.1, ksybx=38.795, dke=0}, {sds=2, lsxbt=2, zfbt=2, kylbx=2, zwgz=2, gwjt=2, bksds=1, dwfdzynj=2, syshbt=2, dky=2, cgbt=2, bfgz=2, zfgjj=2, kyanglbx=2, baseSALARY=2, REALWAGES=2, kghf=2, dwfdsybxj=2, jtbt=2, NAME=21213, kfhj=2, WAGESPAYABLE=2, ybhj=2, qtkk=1, dwfdghf=2, dwfdylbx=2, dwfdyanglbx=2, dwfdgjj=2, kzynj=2, ksybx=1, dke=2}]

插入数据库代码就不写了,喜欢的请点个赞,如有问题私聊作者,作者会尽快恢复的!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5574884.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存