jxl解析excel表格

来源:互联网 发布:sql 新增字段默认值 编辑:程序博客网 时间:2024/04/27 08:49

基础工作要导入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();

1 0
原创粉丝点击