记一次需求:jsp页面选择本地excel文件(.xls)第一列数据返回前端

导入axios包

前端jsp页面添加选择本地文件

采用表单的上传文件组件,效果如下:

 前端jsp页面编写:

<tr>
		<td class="tdTitle">
			<span class="param">证券代码选择</span></td>
		</td>
		<td class="tdBody" colspan=3>
			<input  type="file" id="select" name="select1" onChange="selectExcel()">
		</td>
</tr>

类型选择file,采用onChange事件,注意事件名不能与id相同.

否则会报方法is not a function错误..

方法编写如下:

var org_code="";
function selectExcel (){
	let formData = new window.FormData();			            
      formData.append('selectExcel',document.querySelector('input[type=file]').files[0]);
				let options = {  // 设置axios的参数
					url: "/tjfx/select/excel.action",//访问地址
					data: formData,
					method: 'post',
					headers: {
						'Content-Type': 'multipart/form-data'
					}
				};
				axios(options).then(resp => {
					if (resp.data != "") {
						org_code = resp.data;
						console.log(org_code);
					}
				});
		};

后端接收文件如下:

package zhcx.action;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;


@Controller
@RequestMapping(value="/select")
public class SelectExcelAction {

    @RequestMapping(value="/excel.action",method= RequestMethod.POST )
    public @ResponseBody String selectExcel( MultipartFile selectExcel)throws Exception{
        System.out.println("begin.....");
        String org_codes="";
        InputStream inputStream = selectExcel.getInputStream();
        //获取excel表
        HSSFWorkbook workbook = new HSSFWorkbook(inputStream);
        //获取excel表中的第一个sheet
        HSSFSheet sheet = workbook.getSheetAt(0);
        //循环每一行
        for(int rowNum= 1;rowNum <= sheet.getLastRowNum();rowNum++) {
            HSSFRow hssfRow=sheet.getRow(rowNum);
            if(hssfRow== null) {
                continue;
            }
            //只要第一列的数
            HSSFCell hssfcell=hssfRow.getCell(0);
            //转换为字符串
            String s1 = hssfcell.toString();
            //123456会变为123456.0,只要整数部分
            String s = s1.substring(0, 6);
            //表格数据符合6位数字
            if(s.matches("^\\d{6}$")){
                org_codes = org_codes+","+s;
            }
        }
        //去除最前面的逗号.
        String org_code = org_codes.substring(1);
        //关流
        inputStream.close();
        return org_code;
    }
}

注意:接受文件类型mutipartFile需要在xml中配置解析器

<!--	文件解析-->
<bean id="multipartResolver" 
       class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
</bean>

注意poi的使用,2003和2007的差别,.xls和.xlsx文件转换必能直接给文件后缀,需另存为才有效

注意路径:配置的项目路径和请求路径

读取的excel中的数值为double类型

字符串匹配正则表达式:用.matches方法,注意java的编译差别,"\"要写成"\\"

暂时需求中注意事项就先这么多

补充::写的功能在goolge浏览器和火狐浏览器可以正常访问,在ie浏览器因为浏览器问题不可访问,可以引入

<script type="text/javascript" src="<%=path1%>/zhcx/js/es6-promise.auto.min.js"></script>

es6-prmise.auto.min.js这个js可以将下面这段文字全部复制进一个新建文本文档,改名称为es6-prmise.auto.min.js即可得到这个js,用上面的script引入进可以了,但是注意,ie浏览器的版本为11.低版本会出现问题.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值