精华内容
下载资源
问答
  • java实现excel导入导出

    2012-10-31 15:25:27
    java实现excel导入导出
  • Java实现Excel导入导出

    2020-09-01 02:30:15
    Excel源代码,ExcelCreate.java导出类和ExcelRead.java导入类 用到的poi底层架包有poi-3.6-20091214.jar,poi-contrib-3.6-20091214.jar poi-scratchpad-3.6-20091214.jar ExcelRead.java文件导入类 Public void ...
  • java实现Excel导入导出

    2015-03-02 16:24:46
    利用POI实现Excel导入导出java实现
  • 主要介绍了Java实现Excel导入导出数据库的方法,结合实例形式分析了java针对Excel的读写及数据库操作相关实现技巧,需要的朋友可以参考下
  • Java实现Excel导入导出功能

    热门讨论 2012-01-31 07:37:58
    Java实现Excel导入导出功能网络搜集,很好用
  • JAVA实现Excel导入导出

    2017-03-26 15:59:19
    JXL实现ExcelExcel导入导出首先要下载jxl的jar包 jxl2.6.12.jar下载 https://nchc.dl.sourceforge.net/project/jexcelapi/jexcelapi/2.6.12/jexcelapi_2_6_12.zip 创建工程导入jar包JXL实现Excel的创建JXL创建...

    JXL实现Excel的Excel导入导出

    首先要下载jxl的jar包
    jxl2.6.12.jar下载
    https://nchc.dl.sourceforge.net/project/jexcelapi/jexcelapi/2.6.12/jexcelapi_2_6_12.zip
    创建工程导入jar包

    这里写图片描述

    JXL实现Excel的创建

    JXL创建Excel文件

    /**
     * JXL创建Excel文件
     * @author c
     *
     */
    public class JxlExpExcel {
    
    
        public static void main(String[] args) {
            //用数组存储表头
            String[] title = {"id","name","sex"};
            //创建Excel文件
            File file = new File("jxl_test.xls");
            try {
                file.createNewFile();
                //创建工作簿
                WritableWorkbook workbook = Workbook.createWorkbook(file);
                WritableSheet sheet = workbook.createSheet("sheet1", 0);
    
                Label label = null;
    
                //第一行设置列名
                for(int i = 0; i<title.length; i++){
                    label = new Label(i, 0, title[i]);
                    sheet.addCell(label);
                }
    
                //追加数据
                for(int i = 1; i<=10; i++){
                    label = new Label(0, i, "a"+i);
                    sheet.addCell(label);
                    label = new Label(1, i, "user"+i);
                    sheet.addCell(label);
                    label = new Label(2, i, "男");
                    sheet.addCell(label);
                }
                //写入数据
                workbook.write();
    
                workbook.close();
    
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
    
    }

    运行后可以在工程目录下查看到jxl_test.xls文件
    打开查看内容:
    这里写图片描述


    JXL实现Excel的解析

    JXL解析Excel

    /**
     * JXL解析Excel
     * @author c
     *
     */
    public class JxlReadExcel {
    
        public static void main(String[] args) {
            try {
                //创建workbook
                Workbook workbook = Workbook.getWorkbook(new File("jxl_test.xls"));
                //获取第一个工作表sheet
                Sheet sheet = workbook.getSheet(0);
    
                //获取数据
                for (int i = 0; i < sheet.getRows(); i++) {
                    for (int j = 0; j < sheet.getColumns(); j++) {
                        Cell cell = sheet.getCell(j,i);
                        System.out.println(cell.getContents());
                    }
                    System.out.println();
                }
                workbook.close();
            }catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    运行结果如下:
    这里写图片描述


    POI实现Excel的Excel导入导出

    首先需要下载poi的jar包
    poi.3.15.jar下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/poi/release/bin/poi-bin-3.15-20160924.zip
    我们还需要导入commons.io.jar包
    commons.io. 2.5jar下载地址:
    https://mirrors.tuna.tsinghua.edu.cn/apache//commons/io/binaries/commons-io-2.5-bin.zip

    导入jar包

    这里写图片描述

    POI实现Excel的创建

    POI生成Excel文件

    /**
     * POI生成Excel文件
     * @author c
     *
     */
    public class PoiExpExcel {
    
        public static void main(String[] args) {
    
            //用数组存储表头
            String[] title = {"id","name","sex"};
    
            //创建Excel工作簿
            HSSFWorkbook workbook = new HSSFWorkbook();
            //创建一个工作表sheet
            HSSFSheet sheet = workbook.createSheet();
            //创建第一行
            HSSFRow row = sheet.createRow(0);
            HSSFCell cell = null;
            //插入第一行数据
            for (int i = 0; i < title.length; i++) {
                cell = row.createCell(i);
                cell.setCellValue(title[i]);
            }
    
            //追加数据
            for (int i = 1; i <= 10; i++) {
                HSSFRow nextRow = sheet.createRow(i);
                HSSFCell cell2 = nextRow.createCell(0);
                cell2.setCellValue("a" + i);
                cell2 = nextRow.createCell(1);
                cell2.setCellValue("user" + i);
                cell2 = nextRow.createCell(2);
                cell2.setCellValue("男");
            }
    
            File file = new File("poi_test.xls");
            try {
                file.createNewFile();
                //将excel存盘
                FileOutputStream stream = FileUtils.openOutputStream(file);
                workbook.write(stream);
                stream.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
        }
    
    }
    

    运行后可以在工程目录下查看到poi_test.xls文件
    查看里面的内容:
    这里写图片描述


    POI实现Excel的解析

    POI解析文件内容

    /**
     * POI解析文件内容
     * @author c
     *
     */
    public class PoiReadExcel {
    
        public static void main(String[] args) {
    
            //需要解析的Excel文件
            File file = new File("poi_test.xls");
            try {
                //创建Excel,读取文件内容
                HSSFWorkbook workbook = new HSSFWorkbook(FileUtils.openInputStream(file));
                //获取第一个工作表
            //  HSSFSheet sheet = workbook.getSheet("Sheet0");
                //读取默认第一个工作表sheet
                HSSFSheet sheet = workbook.getSheetAt(0);
    
                int firstRowNum = 0;
                //获取sheet中最后一行行号
                int lastRowNum = sheet.getLastRowNum();
                for (int i = 0; i < lastRowNum; i++) {
                    HSSFRow row = sheet.getRow(i);
                    //获取当前行最后单元格列号
                    int lastCellNum = row.getLastCellNum();
                    for (int j = 0; j < lastCellNum; j++) {
                        HSSFCell cell = row.getCell(j);
                        String value = cell.getStringCellValue();
                        System.out.println(value+" ");
                    }
                    System.out.println();
                }
    
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
        }
    
    }

    运行结果如下:
    这里写图片描述

    展开全文
  • java实现Excel导入导出源码,简单 易懂 有详细的注释
  • Java实现Excel导入导出,简洁明了,高质量代码。
  • 亲自多次测试无bug,java实现简单的导入导出excel工具类。
  • jexcelapi_2_6_12用java实现excel导入导出,例子在dome中
  • 主要为大家详细介绍了java实现Excel导入导出,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 从零开始,学会Java实现Excel导入导出

    万次阅读 多人点赞 2018-09-14 13:40:42
    一、读取Excel常用的三种方式 (本文讲解97-2003 或更高版本)最底下有码云地址,不用一个个敲 1、POI 2、JXL 3、FASTEXCEL 二、POI Apache POI 是Apache软件基金会的开放源码函式库,POI提供API给java程序对...

    一、读取Excel常用的三种方式 (本文讲解97-2003 或更高版本最底下有码云地址,不用一个个敲

    1、POI

    2、JXL

    3、FASTEXCEL

    二、POI

    Apache POI 是Apache软件基金会的开放源码函式库,POI提供API给java程序对Microsoft Office格式档案读和写的功能

    HSSF 是Horrible SpreadSheet Format的缩写,也即 “讨厌的电子表达格式”。通过 HSSF,你可以用纯java代码来读取、写入、修改Excel文件。

    知识点补充:

    HSSF - 读写Microsoft Excel 格式档案的功能。

    XSSF - 读写Microsoft Excel OOXML格式档案的功能。

    HWPF - 读写Microsoft Word 格式档案的功能。

    HSLF - 读写Microsoft PowerPoint格式档案的功能。

    HDGF - 读写Microsoft Visio格式档案的功能

    如果想生成 PDF 可以使用 iText 技术

           通过iText不仅可以生成PDF或者rtf 的文档,而且可以将XML、Html文件转化成PDF文件

          下载iText.jar 文件以后,只需要在系统的CLASSPATH中加入iText.jar的路径,在程序中就可以使用iText类库了。

    二、JXL

    java Execl是一开放的源码项目,可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。

    包括常见格式的设置:字体,颜色,背景,合并单元格等。

    三、POI 、 JXL 对比

    POI 效率高                                                                                JXL效率低

    POI 操作相对复杂                                                                      JXL操作简单

    POI 支持字体、数字、日期操作                                                 JXL支持字体、数字、日期操作

    POI 能修饰单元格属性                                                                JXL能支持修饰单元格属性,格式支持不如POI强大

    POI 支持公式,宏,图像图表一些企业应用上会非常实用          JXL 部分支持

    四、FastExcel

    FastExcel是一个采用纯java开发的excel文件读写组件,支持Excel 97-2003文件格式。

    FastExcel只能读取单元格的字符信息,而其他属性 如颜色、字体等就不支持了,因此FastExcel只需要很小的内存。

    五、开始学习 (这里是pom方式引入)

    1、Excel 实战 之 JXL

    首先第一步引入JXL

    <!-- jxl -->
    <dependency>
        <groupId>net.sourceforge.jexcelapi</groupId>
        <artifactId>jxl</artifactId>
        <version>2.6.10</version>
    </dependency>

    实战之创建Excel

    效果:

    完成

    实战之读取Excel、效果图

    完成

    1、Excel 实战 之 POI

    引入poi pom

    <!-- poi -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.9</version>
    </dependency>
    
    <!-- commons-io -->
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.2</version>
    </dependency>

    创建Excel 代码如下:

    效果图:

    读取Excel 代码如下:

    效果:

    以上支持97-2003版本的

    接下来就是高版本的Excel 讲解

    引入poi额外包

    <!-- poi高版本额外包 -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-examples</artifactId>
        <version>3.9</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-excelant</artifactId>
        <version>3.9</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.9</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml-schemas</artifactId>
        <version>3.9</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-scratchpad</artifactId>
        <version>3.9</version>
    </dependency>

    效果图:

    以上全部完成 接下来就是项目的代码

    码云:

    https://gitee.com/lw97/ExcelDemo.git

    对了,不用谢,我的名字叫雷锋!

     

     

    展开全文
  • java实现excel导入导出 代码及原理
  • Java使用poi实现excel导入导出导入导出已做成通用方法,内附说明文档
  • 1.开发环境 后台用springboot ...-- excel导出 start--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.16</vers

    1.开发环境

    后台用springboot
    前台纯html+js

    2.工程导入pom

            <!-- excel导出 start-->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>3.16</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>3.16</version>
            </dependency>
            <!-- excel导出 end-->
    

    3.写后端工具类

    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.*;
    import org.springframework.web.multipart.MultipartFile;
    
    import javax.servlet.http.HttpServletResponse;
    import java.net.URLEncoder;
    import java.text.SimpleDateFormat;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.*;
    
    /**
     * excel工具类
     */
    public class ExcelUtil {
        /**
         * 将Excel内容转换list
         * @param file
         * @param name
         * @return
         * @throws Exception
         */
        public static List<Map<String, Object>> excelToList(MultipartFile file, String name) throws Exception {
            Workbook workbook = WorkbookFactory.create(file.getInputStream());
            Sheet sheet = workbook.getSheet(name);
            //行数
            int num = sheet.getLastRowNum();
            //列数
            int col = sheet.getRow(0).getLastCellNum();
            List<Map<String, Object>> list = new ArrayList<>();
            String[] colName = new String[col];
            //获取列名
            Row row = sheet.getRow(0);
            for (int i = 0; i < col; i++) {
                String[] s = row.getCell(i).getStringCellValue().split("-");
                colName[i] = s[0];
            }
    
            //将一行中每列数据放入一个map中,然后把map放入list
            for (int i = 1; i <= num; i++) {
                Map<String, Object> map = new HashMap<>();
                Row row1 = sheet.getRow(i);
                if (row1 != null) {
                    for (int j = 0; j < col; j++) {
                        Cell cell = row1.getCell(j);
                        if (cell != null) {
                            cell.setCellType(Cell.CELL_TYPE_STRING);
                            map.put(colName[j], cell.getStringCellValue());
                        }
                    }
                }
                list.add(map);
            }
            return list;
        }
    
        /**
         * 导出集合到excel
         * @param response
         * @param name
         * @param list
         */
        public static void exportToExcel(HttpServletResponse response, String name, List<LinkedHashMap<String, Object>> list) {
            try {
                //文件名称
                String fileName = name + ".xls";
                HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
                HSSFSheet hssfSheet = hssfWorkbook.createSheet(name);
                int rowNum = 0;
                //新建行
                HSSFRow hssfRow = hssfSheet.createRow(rowNum++);
                //列
                int j = 0;
                if (list.size() > 0) {
                    for (String i : list.get(0).keySet()) {
                        //新建第一行
                        hssfRow.createCell(j++).setCellValue(i);
                    }
                    //将数据放入表中
                    for (int i = 0; i < list.size(); i++) {
                        //新建一行
                        HSSFRow row = hssfSheet.createRow(rowNum++);
                        Map map = list.get(i);
                        System.out.println(map);
                        j = 0;
                        for (Object obj : map.values()) {
                            if (obj != null) {
                                row.createCell(j++).setCellValue(obj.toString());
                            } else {
                                row.createCell(j++);
                            }
                        }
                    }
                }
                // 告诉浏览器用什么软件可以打开此文件
                response.setHeader("content-Type", "application/vnd.ms-excel");
                // 下载文件的默认名称
                response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8"));
                hssfWorkbook.write(response.getOutputStream());
    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /***
         * 解析Excel日期格式
         * @param strDate
         * @return
         */
        public static String ExcelDoubleToDate(String strDate) {
            if (strDate.length() == 5) {
                try {
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    Date tDate = DoubleToDate(Double.parseDouble(strDate));
                    return sdf.format(tDate);
                } catch (Exception e) {
                    e.printStackTrace();
                    return strDate;
                }
            }
            return strDate;
        }
    
        /**
         * 解析Excel日期格式
         * @param dVal
         * @return
         */
        public static Date DoubleToDate(Double dVal) {
            Date tDate = new Date();
            //系统时区偏移 1900/1/1 到 1970/1/1 的 25569 天
            long localOffset = tDate.getTimezoneOffset() * 60000;
            tDate.setTime((long) ((dVal - 25569) * 24 * 3600 * 1000 + localOffset));
            return tDate;
        }
    }
    

    直接拿去贴

    4.导出查询结果到excel

    1.写后端controller

        /**
         * 导出excel
         * @return
         */
        @RequestMapping("/exportMonitor")
        @ResponseBody
        public void exportMonitor(String monitorName,String monitorState,String monitorOccupyState,String monitorSwitchState ,String significant, HttpServletResponse response){
            Map<String,Object> param=new HashMap<String, Object>(8);
            param.put("monitorName",monitorName);
            param.put("monitorState",monitorState);
            param.put("monitorOccupyState",monitorOccupyState);
            param.put("monitorSwitchState",monitorSwitchState);
            param.put("significant",significant);
            List<LinkedHashMap<String,Object>> database=monitorService.getAllMonitorLinkedHashMap(param);
            ExcelUtil.exportToExcel(response,"monitor",database);
            //return ResultObj.returnObj(DatabaseUtil.returnDatabaseNoResult(true,"导出成功"));
        }
    

    注意,这里要用get形式,因为前台的地址是拼接起来的,这点很重要,看下面就知道了

    2.写前端js

    Monitor.export=function(){
        let export1 = document.getElementById('export');
        //字符串拼接,不然传的就是'undefined',真的是这个字符串传过去
        let params ='';
        if($("#monitorName").val()){
            params+='&monitorName';
        }
        if($("#monitorState").val()){
            params+='&monitorState';
        }
        if($("#monitorOccupyState").val()){
            params+='&monitorOccupyState';
        }
        if($("#monitorSwitchState").val()){
            params+='&monitorSwitchState';
        }
        if($("#significant").val()){
            params+='&significant';
        }
    	//截取前面的&
      export1.setAttribute('href',"/monitor/exportMonitor?"+params.substring(1,params.length));
    }
    

    这个export是关键字,不能用,懒得改名了,加了个1

    3.写前端html

         <a id="export" >
             <button type="button" class="btn btn-primary " onclick="Monitor.export()" id="importMonitor">
                 <i class="fa fa-search"></i>&nbsp;导出
             </button>
         </a>
    

    导出按钮,用a标签括起来,这里利用js的冒泡事件,js点击这个button,然后调用上面js的函数,这个函数改变这个a标签t的地址,函数执行完成之后,向上冒泡,相当于点击了a标签,a标签跳转后台页面。

    4.总结

    之前用过ajax执行,然后他返回的response里有一个xls的文件,这里已经改好了,我的就不回退回去了,借用别的老哥两张图
    在这里插入图片描述
    在这里插入图片描述
    出自https://blog.csdn.net/jinchunzhao123/article/details/88626077
    我的response跟他类似,这是我的后台
    在这里插入图片描述
    只有展示,浏览器没有自动下载
    之后将这个地址放在a标签里,使用herf跳转就完事了

    5.导入excel到数据库

    1.写后端controller

        /**
         * 导入excel
         * @param file
         * @return
         */
        @RequestMapping("/importMonitor")
        @ResponseBody
        public Object importMonitor(@RequestParam MultipartFile file){
            Map<String,Object> database=monitorService.importMonitor(file);
            return ResultObj.returnObj(database);
        }
    

    2.写service

        @Override
        public Map<String, Object> importMonitor(MultipartFile file) {
            Map<String,Object> param=new HashMap<String, Object>(8);
            try {
                List<Map<String,Object>> importList= ExcelUtil.excelToList(file,excelSelect);
                for (Map<String,Object> importMap: importList) {
                    String id= OddNumbersUtil.getNumber("monitor");
                    param.put("id",id);
                    param.put("monitorName",importMap.get("monitor_name"));
                    param.put("monitorNumebr",importMap.get("monitor_numebr"));
                    param.put("ip",importMap.get("ip"));
                    param.put("port",importMap.get("port"));
                    param.put("monitorState",1);
                    param.put("monitorOccupyState",1);
                    param.put("createTime",new Date());
                    param.put("createPerson",ShiroKit.getUser().name);
                    //param.put("updateTime",importMap.get("update_time"));
                    //param.put("updatePerson",importMap.get("update_person"));
                    param.put("imgUrl",importMap.get("img_url"));
                    param.put("contacts",importMap.get("contacts"));
                    param.put("contactNumber",importMap.get("contact_number"));
                    param.put("installDate",ExcelUtil.ExcelDoubleToDate(String.valueOf(importMap.get("install_date"))));
                    param.put("periodOfValidity",ExcelUtil.ExcelDoubleToDate(String.valueOf(importMap.get("period_of_validity"))));
                    param.put("expirationDate",ExcelUtil.ExcelDoubleToDate(String.valueOf(importMap.get("expiration_date"))));
                    param.put("deviceAddress",importMap.get("device_address"));
                    param.put("monitorSwitchState",1);
                    param.put("deviceType",importMap.get("device_type"));
                    param.put("modelType",importMap.get("model_type"));
                    param.put("significant",importMap.get("significant"));
                    param.put("locational",importMap.get("locational"));
                    param.put("manufacturersId",importMap.get("manufacturers_id"));
                    param.put("deviceCoding",importMap.get("device_coding"));
                    param.put("subordinateSubsystem",importMap.get("subordinate_subsystem"));
                    monitorMapper.addMonitor(param);
                }
                return DatabaseUtil.returnDatabaseNoResult(true,"导入成功");
            } catch (Exception e) {
                e.printStackTrace();
                return DatabaseUtil.returnDatabaseNoResult(true,"导入失败");
            }
        }
    

    这里略过接口,直接看实现类,里面有的地方用了ExcelUtil.ExcelDoubleToDate()函数,是因为excel读取的日期是一个数字,用这个函数可以转为规定的日期格式,这个函数详见上面的工具类

    2.写前端js

    方式1

        layui.use('upload', function(){
            var upload = layui.upload;
            //执行实例
            var uploadInst = upload.render({
                elem: '#importMonitor' //绑定元素
                ,url: 'monitor/importMonitor' //上传接口
                ,accept: 'file'
                ,exts: 'xls|xlsx|xlsm|xlt|xltx|xltm'
                ,done: function(res){
                    if(res.success){
                        layer.msg('导入成功');
                        stockRecord.table.refresh();
                    }else{
                        layer.msg(res.message());
                    }
                    //上传完毕回调
                }
                ,error: function(){
                    //请求异常回调
                }
            });
        });
    

    这是layui的上传文件,今天向同事学的,推荐使用这个,比较方便

    3.写前端html

    <#button name="导入excel" icon="fa" id="importMonitor"/>
    

    前台只要有一个元素承接就行了

    展开全文
  • JAVA实现Excel导入导出

    千次阅读 2020-05-13 13:45:04
    JAVA实现Excel导入导出 近期项目中需要实现导入excel数据到数据库,导出数据库的数据生成excel表格,由于第一次使用,做一下笔记方便以后使用. 一、Excel数据的导入 1.首先引入jar包,由于创建的是Maven项目,因此直接...

    近期项目中需要实现导入excel数据到数据库,导出数据库的数据生成excel表格,由于第一次使用,做一下笔记方便以后使用.

    一、Excel数据的导入

    1.首先引入jar包,由于创建的是Maven项目,因此直接在项目中的pom.xml中配置

    <!-- jxl.jar实现excel文件的获取 -->
    <dependency>
        <groupId>net.sourceforge.jexcelapi</groupId>
        <artifactId>jxl</artifactId>
        <version>2.6.12</version>
    </dependency>`
    

    你可以在该链接查找自己想要jar的版本


    2.获取前台传过来的文件.解析获取excel中的数据,存储到数据库
    1.service层代码

    public Map<String,Integer> saveExcel(MultipartFile file,String path,HttpServletRequest request){
    		log.info("excel文件的导入");
    		//返回值显示文件导入结果
    		Map<String, Integer> maps = new HashMap<>();
    		Integer sum = 0; ///总条数
    		Integer success = 0;//成功数
    		Integer fail = 0;//失败数
    		Integer flag = 1;//判断是否有有用的表
    		Workbook workbook = null;
    		try {
    			if(file!=null){
    				//错误信息
    				List<ExcelError> errors = new ArrayList<>();
    				//由于项目中使用的springMvc获取的文件类型为MultipartFile类型
    				//Workbook.getWorkbook获取的是file类型,尝试强转获取的文件类型为File,运行时报错
    				//此处使用项目中已经有的方法将获取的文件上传到服务器创建的文件中,在方法的最后判断文件是否存在,然后进行删除
    				fileService.uploadFile(request, file, path);
    				//通过当前类获取文件的绝对路径
    				String path1 = this.getClass().getClassLoader().getResource("../../").getPath()+path;
    				//文件的名字
    			    String fileName = file.getOriginalFilename();
    				//获取excel文件
    				workbook = Workbook.getWorkbook(new File(path1+"/"+fileName));
    				int oSheet=100;
    				//获取表名所对应的sheet,workbook.getNumberOfSheets()获取excel中有几张表
    				for(int i=0;i<workbook.getNumberOfSheets();i++){
    					if(workbook.getSheet(i).getName().equals("缴费、退费信息表")){
    						oSheet=i;
    					}
    				}
    				//订单
    				if(oSheet!=100){
    					Sheet sheet3 = workbook.getSheet(oSheet);
    					//订单信息list(每条数据添加进去,最后实现批量添加数据)
    					List<Order> orders = new ArrayList<>();
    					//循环行sheet2.getRows(),导入的excel信息是直接从第四行开始的
    					for (int i = 3; i < sheet3.getRows(); i++) {
    						boolean ssheet=true;
    						//信息数
    						sum++;
    						//循环列,从0开始,本次导入的excel格式是从第二列开始的
    						for (int j = 1; j < sheet3.getColumns(); j++) {
    							//当前行列对应的单元格
    							Cell cell = sheet3.getCell(j, i);
    							//获取行列所对应的内容
    							String contents = cell.getContents();
    							//错误信息
    							ExcelError error = new ExcelError();
    							//数据校验(不通过则ssheet=false,添加错误信息到errors ):校验过程中errors.add(error);
    						//当前行数据校验通过,导入数据到对象
    						if(ssheet){
    							//满足条件的条数++
    							success++;
    							Order order = new Order();:此处orders 数据添加...
    							orders.add(order);
    						}else{
    							//数据校验未通过
    							fail++;
    						}
    					}
    					//批量添加订单数据
    					if(orders.size()>0){
    						orderDao.insertOrders(orders);
    					}
    				}
    				//错误信息批量添加
    				if(errors.size()>0){
    					int n = errorDao.insertExcelError(errors);
    				}
    			//判断是否有有用的表
    			if(oSheet==100){
    				flag=0;
    				}
    			}
    			if(file==null){
    				//没有文件
    				maps.put("文件", 0);
    			}
    		} catch (Exception e) {
    			e.printStackTrace(); 
    		}finally{
    			workbook.close();
    			File img = new File(this.getClass().getClassLoader().getResource("../../").getPath()+path+"/"+file.getOriginalFilename());
    		    //判断文件是否存在,删除文件
    		    if(img.exists()){
    				img.delete(); 
    			} 
    		}
    		maps.put("flag", flag);//1:有有用的表;0:无有用的表
    		maps.put("sum", sum);//总数据条数
    		maps.put("success", success);//能成功添加的数据条数
    		maps.put("fail",fail);//失败的数据条数
    		return maps;
    	}
    
    

    2.批量添加数据导入,sql代码(使用的是mybatis);如果批量添加的数据中有唯一索引的数据可以使用REPLACE INTO替换INSERT INTO(在添加过程中发现唯一索引重复数据会自动删除原来的数据再添加,相当于更新数据!)
    < insert id=“insertOrders” parameterType=“java.util.List” > INSERT INTO order(ddname) VALUES < foreach collection =“orders” item=“order” separator =","> ( #{order.ddname} ) < /foreach> < /insert>
    二、Excel的导出并实现下载
    1.代码demo如下

    @RequestMapping("/out")
    public String outExcel(HttpServletResponse response,HttpServletRequest request){
    		log.info("service===outPutExcel");
    		
    		// 创建工作表
            WritableWorkbook book = null;
            response.reset();
            response.setCharacterEncoding("UTF-8");// 设置字符集
            try {
            	String path = this.getClass().getClassLoader().getResource("../..").getPath();
            	File schoolFile = new File(path+"/pages");
            	// 假如文件不存在,则创建 
    			if(!schoolFile.exists()){
    				schoolFile.mkdirs();
    			}
            	book = Workbook.createWorkbook(new File(path+"/excel/"+"信息表.xls"));
                WritableSheet sheet = book.createSheet("下载信息表1", 0);
                //内容设置同表一
                WritableSheet sheet1 = book.createSheet("下载信息表2", 1);
                //合并单元格
                sheet.mergeCells( 0 , 0 , 3 , 0 );
                //设置字体;  
                WritableFont font1 = new WritableFont(WritableFont.ARIAL,14,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,Colour.BLACK);  
                WritableCellFormat cellFormat1 = new WritableCellFormat(font1);  
                //设置背景颜色;  
                /* cellFormat1.setBackground(Colour.BLUE_GREY);  */
                //设置边框;  
                /*cellFormat1.setBorder(Border.ALL, BorderLineStyle.DASH_DOT);*/  
                //设置自动换行;  
                cellFormat1.setWrap(true);  
                //设置文字居中对齐方式;  
                cellFormat1.setAlignment(Alignment.CENTRE);  
                //设置垂直居中;  
                cellFormat1.setVerticalAlignment(VerticalAlignment.CENTRE); 
                //信息表title
                sheet.addCell(new jxl.write.Label(0, 0, "excel信息",cellFormat1));
                //设置单元格高
                sheet.setRowView( 0 , 400 );
                sheet.addCell(new jxl.write.Label(0, 1, "名字"));
                //设置单元格宽度
                sheet.setColumnView( 0 , 20 );
                sheet.addCell(new jxl.write.Label(1, 1, "身份证号"));
                sheet.setColumnView( 1 , 20 );
                sheet.addCell(new jxl.write.Label(2, 1, "年龄"));
                sheet.setColumnView( 2 , 30 );
                //追加数据
                for (int i = 0; i < 2; i++) {
                	//由于设置标题和title,列从0开始,行i+2;
                	sheet.addCell(new jxl.write.Label(0, i+2, "zk"));
                	//身份证等需要设置文本格式,否则下载点击后会无法再次显示原来数据
                	sheet.addCell(new jxl.write.Label(1, i+2, "612732201811113333"));
                	//设置单元格文本样式
                    WritableCellFormat wcfF = new WritableCellFormat(NumberFormats.TEXT); 
                    //定义一个列显示样式
                    CellView ddbh = new CellView();
                    ddbh.setFormat(wcfF);//把定义的单元格格式初始化进去
                    ddbh.setSize(20*265);//设置列宽度(不设置的话是0,不会显示)
            	    sheet1.setColumnView(1, ddbh);//设置工作表中第n列的样式
                	sheet.addCell(new jxl.write.Label(2, i+2, "123"));
    			}
                
                book.write();
                book.close();
            } catch (Exception e) {
                log.error("导出excel出现异常", e);
            } 
            try {
    			 String filename = "信息表.xls";
    			 String mimeType = request.getServletContext().getMimeType(filename);
    			//指明这是一个下载的respond
    			 response.setContentType(mimeType);
    			 log.info("要下载的文件名:"+filename);
    			 response.setHeader("Content-Disposition", 
    						"attachment;filename="+URLEncoder.encode(filename, "UTF-8"));
    			 String path = this.getClass().getClassLoader().getResource("../..").getPath()+"/excel/"+"信息表.xls";
    	    	 log.info("要下载的文件路径:"+path);
    	    	 File file = new File(path);
    	    	 //如果文件不存在
    	    	 if(!file.exists()){
    	    	     return null;
    	    	 }
    	    	 FileInputStream in = new FileInputStream(file);
    	    	 //创建输出流
    	    	 OutputStream out = response.getOutputStream();
    	    	 //缓存区
    	    	 byte buffer[] = new byte[1024];
    	    	 int length=0;
    	    	 log.info("下载文件了...");
    	    	 while ((length = in.read(buffer)) != -1) {  
    				    out.write(buffer, 0, length);  
    				    out.flush();
    				} 
    	    	 //关闭
    	    	 out.close();
    	    	 in.close();
    	    	return null;
    	    	
    		} catch (Exception e) {
    			e.printStackTrace();
    			return null;
    		}finally {
            	String path = this.getClass().getClassLoader().getResource("../..").getPath();
            	File img = new File(path+"/excel/"+"信息表.xls");
            	// 假如文件存在,则删除 
    			if(img.exists()){
    				img.delete(); 
    			}
            }
    	}
    
    

    2.下载结果展示
    1:下载过程

    2:下载结果

    二. Java利用POI实现导入导出Excel表格示例代码

    介绍

    Jakarta POI 是一套用于访问微软格式文档的Java API。Jakarta POI有很多组件组成,其中有用于操作Excel格式文件的HSSF和用于操作Word的HWPF,在各种组件中目前只有用于操作Excel的HSSF相对成熟。官方主页http://poi.apache.org/index.html,API文档http://poi.apache.org/apidocs/index.html

    实现

    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFCellStyle;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    
    public class ExcelOperate {
    
      public static void main(String[] args) {
        // 创建Excel表格
        createExcel(getStudent());
    
        // 读取Excel表格
        List<Student> list = readExcel();
        System.out.println(list.toString());
      }
    
      /**
       * 初始化数据
       * 
       * @return 数据
       */
      private static List<Student> getStudent() {
        List<Student> list = new ArrayList<Student>();
        Student student1 = new Student("小明", 8, "二年级");
        Student student2 = new Student("小光", 9, "三年级");
        Student student3 = new Student("小花", 10, "四年级");
        list.add(student1);
        list.add(student2);
        list.add(student3);
        return list;
      }
    
      /**
       * 创建Excel
       * 
       * @param list
       *      数据
       */
      private static void createExcel(List<Student> list) {
        // 创建一个Excel文件
        HSSFWorkbook workbook = new HSSFWorkbook();
        // 创建一个工作表
        HSSFSheet sheet = workbook.createSheet("学生表一");
        // 添加表头行
        HSSFRow hssfRow = sheet.createRow(0);
        // 设置单元格格式居中
        HSSFCellStyle cellStyle = workbook.createCellStyle();
        cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
    
        // 添加表头内容
        HSSFCell headCell = hssfRow.createCell(0);
        headCell.setCellValue("姓名");
        headCell.setCellStyle(cellStyle);
    
        headCell = hssfRow.createCell(1);
        headCell.setCellValue("年龄");
        headCell.setCellStyle(cellStyle);
    
        headCell = hssfRow.createCell(2);
        headCell.setCellValue("年级");
        headCell.setCellStyle(cellStyle);
    
        // 添加数据内容
        for (int i = 0; i < list.size(); i++) {
          hssfRow = sheet.createRow((int) i + 1);
          Student student = list.get(i);
    
          // 创建单元格,并设置值
          HSSFCell cell = hssfRow.createCell(0);
          cell.setCellValue(student.getName());
          cell.setCellStyle(cellStyle);
    
          cell = hssfRow.createCell(1);
          cell.setCellValue(student.getAge());
          cell.setCellStyle(cellStyle);
    
          cell = hssfRow.createCell(2);
          cell.setCellValue(student.getGrade());
          cell.setCellStyle(cellStyle);
        }
    
        // 保存Excel文件
        try {
          OutputStream outputStream = new FileOutputStream("D:/students.xls");
          workbook.write(outputStream);
          outputStream.close();
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    
      /**
       * 读取Excel
       * 
       * @return 数据集合
       */
      private static List<Student> readExcel() {
        List<Student> list = new ArrayList<Student>();
        HSSFWorkbook workbook = null;
    
        try {
          // 读取Excel文件
          InputStream inputStream = new FileInputStream("D:/students.xls");
          workbook = new HSSFWorkbook(inputStream);
          inputStream.close();
        } catch (Exception e) {
          e.printStackTrace();
        }
    
        // 循环工作表
        for (int numSheet = 0; numSheet < workbook.getNumberOfSheets(); numSheet++) {
          HSSFSheet hssfSheet = workbook.getSheetAt(numSheet);
          if (hssfSheet == null) {
            continue;
          }
          // 循环行
          for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
            HSSFRow hssfRow = hssfSheet.getRow(rowNum);
            if (hssfRow == null) {
              continue;
            }
    
            // 将单元格中的内容存入集合
            Student student = new Student();
    
            HSSFCell cell = hssfRow.getCell(0);
            if (cell == null) {
              continue;
            }
            student.setName(cell.getStringCellValue());
    
            cell = hssfRow.getCell(1);
            if (cell == null) {
              continue;
            }
            student.setAge((int) cell.getNumericCellValue());
    
            cell = hssfRow.getCell(2);
            if (cell == null) {
              continue;
            }
            student.setGrade(cell.getStringCellValue());
    
            list.add(student);
          }
        }
        return list;
      }
    }
    

    附上Student类的代码

    public class Student {
    
      private String name;
      private int age;
      private String grade;
    
      public Student() {
      }
    
      public Student(String name, int age, String grade) {
        super();
        this.name = name;
        this.age = age;
        this.grade = grade;
      }
    
      public String getName() {
        return name;
      }
    
      public void setName(String name) {
        this.name = name;
      }
    
      public int getAge() {
        return age;
      }
    
      public void setAge(int age) {
        this.age = age;
      }
    
      public String getGrade() {
        return grade;
      }
    
      public void setGrade(String grade) {
        this.grade = grade;
      }
    
      @Override
      public String toString() {
        return "Student [name=" + name + ", age=" + age + ", grade=" + grade
            + "]";
      }
    }
    

    测试结果

    导出的Excel表格
    在这里插入图片描述
    打印读取的Excel数据

    [Student [name=小明, age=8, grade=二年级], Student [name=小光, age=9, grade=三年级], Student [name=小花, age=10, grade=四年级]]
    

    第一次复写,肯定有理解不足或者错误的地方,请指正。

    展开全文
  • 最近很奇怪,客户各种各样奇葩的需求,导出个表格设计各种样式,真心无语,网上找了很多资料,新手就是这么坑爹,找东西都不能有点速度!没办法,水平所致。提供给跟我差不多水平的朋友参考。package ...
  • Java POI EXCEL导入导出

    2010-06-27 08:41:52
    Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,589
精华内容 8,635
关键字:

java实现excel导入导出

java 订阅