java 导入excel文件保存到数据库(一)(jxl方式,直接复制)

目录

java 导入excel文件保存到数据库(二)(poi方式,兼容xls、xlsx)

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 所需依赖
 <!-- https://mvnrepository.com/artifact/net.sourceforge.jexcelapi/jxl -->
        <dependency>
            <groupId>net.sourceforge.jexcelapi</groupId>
            <artifactId>jxl</artifactId>
            <version>2.6.12</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/jexcelapi/jxl -->
        <dependency>
            <groupId>jexcelapi</groupId>
            <artifactId>jxl</artifactId>
            <version>2.4.2</version>
        </dependency>
1.3 测试代码
	@RequestMapping(value="/upload")
	@ResponseBody
	public String upload_excel(@RequestParam("file") MultipartFile file, HttpServletResponse response,HttpServletRequest request)throws Exception {		
		//这种方法会在本地产生临时文件,用完后需要删除
		if (file.exists()) {
			file.delete();
			System.out.println(1111111111);
			int i;
			Sheet sheet;
			Workbook book;
			List<Map> list=new ArrayList<>();
			Cell cell1,cell2,cell3,cell4,cell5,cell6,cell7;
			String bt1;
			try {
				//文件必须放到D盘下,excel需要另存为xls格式
				book= Workbook.getWorkbook(file.getInputStream());
				//获得第一个工作表对象(ecxel中sheet的编号从0开始,0,1s,2,3,....)
				sheet=book.getSheet(0);
				//获取左上角的单元格
				cell1=sheet.getCell(0,0);
				System.out.println("标题:"+cell1.getContents());
				i=1;
				//存表头集合
				List<String> 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<String,String>  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文件

<script type="text/javascript" src="../../../assets/js/jquery-1.7.2.js"></script>
<script type="text/javascript" src="../../../assets/js/ajaxfileupload.js"></script>
2.2 方法

添加标签

<input type="file" id="file" name="file"  @change="uploadFile123(this)"  title="导入excel"/>

调用方法

 function uploadFile123(file){

	// var index = layer.msg('正在上传,请稍候',{icon: 16,time:false,shade:0.8});
	$.ajaxFileUpload({
			url :  httpurl+'/payroll/upload' ,
			secureuri : false, //一般设置为false
			fileElementId : 'file', //文件上传空间的id属性  <input type="file" id="file" name="file" />
			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}]

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值