>>分享Java编程技术,对《Java面向对象编程》等书籍提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 22749 个阅读者 刷新本主题
 * 贴子主题:  通过Java读取Excel数据 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2021-08-10 03:28:19     消息  查看  搜索  好友  邮件  复制  引用

首先导入Excel操作相关依赖
        <dependency>
            <groupId>net.sourceforge.jexcelapi</groupId>
            <artifactId>jxl</artifactId>
            <version>2.6.10</version>
        </dependency>

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.9</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.9</version>
        </dependency>

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-scratchpad</artifactId>
            <version>3.9</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml-schemas -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
            <version>3.9</version>
        </dependency>

Excel文件读取操作的方法

   /**
     * 去读Excel的方法
     * @param filePath 要读取的excel文件路径
     * @return
     */

    public List readExcel(String filePath) {
        try {
            File file = new File(filePath);
            // 创建输入流,读取Excel
            InputStream is = new FileInputStream(file.getAbsolutePath());
            // jxl提供的Workbook类
            Workbook wb = Workbook.getWorkbook(is);
            // Excel的页签数量
            int sheet_size = wb.getNumberOfSheets();
            List<List<List>> result = new ArrayList<>();
            for (int index = 0; index < sheet_size; index++) {
                List<List> outerList = new ArrayList<>();
                // 每个页签创建一个Sheet对象
                Sheet sheet = wb.getSheet(index);
                // sheet.getRows()返回该页的总行数
                for (int i = 0, m = 0; i < sheet.getRows(); i++, m++) {
                    List<String> innerList = new ArrayList();
                    // sheet.getColumns()返回该页的总列数
                    for (int j = 0; j < sheet.getColumns(); j++) {
                        String cellinfo = sheet.getCell(j, i).getContents();
                        innerList.add(cellinfo);
                    }
                    outerList.add(m, innerList);
                }
                result.add(outerList);
            }
            //返回Excel全部数据的集合
            return result;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (BiffException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;

    }

Excel创建并写入数据的方法

   public void writeExcel(List<List<List>> excelAllList, String finalXlsxPath) throws WriteException, IOException {
        WritableWorkbook workbook;
        WritableSheet sheet;
        OutputStream os;
        File finalXlsxFile = new File(finalXlsxPath);
        //文件若不存在就新建一个
        if (!finalXlsxFile.exists()) {
            finalXlsxFile.createNewFile();
        }
        //创建输出流
        os = new FileOutputStream(dataFile);
        //创建工作薄
        workbook = Workbook.createWorkbook(os);
        int num = 1;
        for(List<List> excelList : excelAllList) {
            //创建新的一页
            sheet = workbook.createSheet("Sheet"+num, num-1);
            num++;
            for (int i = 0; i < excelList.size(); i++, r++) {
                List list = excelList.get(i);
                //迭代列,默认从0开始
                for (int j = 0; j < list.size(); j++) {
                    //创建单元格并添加到页中
                    String cellStr = list.get(j).toString();
                    Label label = new Label(j, r,cellStr);
                    sheet.addCell(label);
                }
            }
        }
        //把创建的内容写入到输出流中,并关闭输出流
        workbook.write();
        workbook.close();
        os.close();
    }

读写Excel方法示例

    /**
     *
     * @param inPath 输入的文件路径    如:C:\\Users\\Administrator\\Desktop\\data.xls
     * @param outPath 输出的文件路径
     * @throws IOException
     * @throws WriteException
     */

    public  void domain(String inPath,String outPath) throws IOException, WriteException {
        ReadExcel obj = new ReadExcel();
        List<List<List>> excelAllList = obj.readExcel(inPath);
        /**
         * 这里可以对数据集合进行自定义处理然后再输出
         * dosomthing(excelAllList)
         */

        writeExcel(excelAllList,outPath);
    }

代码已经过本人测试,请放心使用。目前仅支持.xls结尾的excel文件。
————————————————
原文链接:https://blog.csdn.net/c15158032319/article/details/83412889


程序猿的技术大观园:www.javathinker.net
  Java面向对象编程-->多线程(上)
  JavaWeb开发-->使用过滤器
  JSP与Hibernate开发-->Java对象持久化技术概述
  Java网络编程-->客户端协议处理框架
  精通Spring-->组合(Composition)API
  Vue3开发-->绑定表单
  [分享]遊藝場開分員會很難嗎?原來工作項目是這些!
  求素数
  类连接阶段的验证原理
  java实现动态编译并动态加载
  面试官:NIO的优化实现原理了解吗?图文结合教你如何正确避坑
  java.util.logging.Logger使用详解
  使用策略模式优化代码实践,如何让项目快速起飞
  好消息:孙卫琴老师等直播分享Java分布式架构专题
  HashMap中 get 和 put 操作的具体过程
  编程语言搜索量排行:用十年数据告诉你什么最受欢迎
  深入研究java.lang.ThreadLocal类
  使用javaNIO实现C/S模式的通信
  正则表达式:运算符优先级
  Java入门实用代码:查找字符串最后一次出现的位置
  Java性能优化总结
  更多...
 IPIP: 已设置保密
树形列表:   
1页 1条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。