jxl解析excel表格

基础工作要导入commons.fileupload.jar、commons.io-1.4.0.jar、jxl.jar
前台传入一个excel文件,后台在不向服务器保存excel文件的情况下,对excel进行解析,并处理其中数据

前台页面:

<form id="searchForm" method="post" action="/importProd" enctype="multipart/form-data">
    <div class="import">
        <p>
            <a href="javascript:void(0)" onclick="temple()">产品模板</a>
            <input type="file" name="importExcel" id="importExcel" value="浏览" class="validate[required]">
        <p>
        <p style="margin-top:40px">
            <button type="submit" class="btn btn-success">导入</button>&nbsp;&nbsp;   
        </p>
        </div>
</form>

后台接受并处理:
a.后台接收的controller签名中使用@RequestParam标签来接收参数,用一个元素类型为MultipartFile类型的数组来接收
b.参数名称与前台页面input标签name名称一致

@RequestMapping(value = "/importProd",produces = "text/plain;charset=UTF-8")
    @ResponseBody
    public String importProd(@RequestParam MultipartFile[] importExcel,MultipartHttpServletRequest request,HttpServletResponse response) {
        String validateMsg = "";
        try {
            if (importExcel != null && importExcel.length > 0) {
                for (int i = 0; i < importExcel.length; i++) {//循环上传的文件
                    MultipartFile file = importExcel[i];
                    // 保存文件
                    InputStream is = file.getInputStream();//将上传的文件直接写入InputStream输入流,不进行服务器保存操作
                    List<String> list = productListService.saveProd(is,params);//params为controller中定义的一个接收请求参数的全局变量
                }
            }
            //String path = Global.getConfig("REFER_UPLOAD_ADDRESS");
            response.setHeader("Content-type", "text/html;charset=UTF-8");  
            response.setCharacterEncoding("UTF-8");
            response.getWriter().write("产品导入完成");
            response.getWriter().flush();
            return null;
        } catch (Exception e) {
            e.printStackTrace();
                try {
                    response.getWriter().write("产品导入失败,请检查是否已经导入.");
                    response.getWriter().flush();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
        return null;
    }
public String saveProd(InputStream is,Map<String,String> params){
        Workbook wb = null;  
        try {
            wb = Workbook.getWorkbook(is);//通过InputStream输入流来获得excel文件
            Sheet sheet = wb.getSheet(0);//wb.getSheet(n)为获取excel中的第几个sheet页,当有过个sheet页时需循环获取
            List<String> list = new ArrayList<String>();
            if(sheet!=null){
                for (int i = 2; i < 10; i++) {
                    Cell[] cells = sheet.getRow(i);
                    list.add(cells[2].getContents());//取每行的第三个值
                }
            }
        return list;

总结读取解析excel原理:
1、通过input标签上传excel文件,标签type=“file”,标签所在的form表单增加一个enctype=”multi-part/form-data”属性
2、后台controller使用@RequestParam标签来接收前台传来的文件请求,封装在与前台input标签name属性同名的请求参数中
3、由于未向服务器中做文件的存储操作,则直接利用file.getInpuStream()来获得输入流
4、从输入流中利用Workbook.getWorkbook(is)获取excel对象
5、分析excel对象:
一个excel对象包含n个sheet页,一个sheet包含n行记录,一行记录包含n个字段,
所以,特殊情况下,想解析获得字段值,需进行多层多层for循环嵌套
6、a、获取Excel对象
Workbook wb = Workbok.getWorkbook(is);
b、获取Excel中的sheet页
Sheet sheet = wb.getSheet(0);//下标为0时,获取第一个sheet页
c、获取某sheet页中的行
Cell[] cells = sheet.getRow(0);//下标为0时,获取sheet页的第一行
d、获取某行的第中的字段
cells[0].getContents();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值