zoukankan      html  css  js  c++  java
  • Java操作Excel

    我们这里主要使用POI解析excel,POI的官网是:http://poi.apache.org/。

       

    • 使用到的依赖

      <!-- 这个是解析excel文档的poi -->

      <dependency>

      <groupId>org.apache.poi</groupId>

      <artifactId>poi-ooxml</artifactId>

      <version>3.10-FINAL</version>

      </dependency>

    • 操作步骤
      • 读数据的详细操作步骤
        • 打开excel

          Workbook wb = WorkbookFactory.create(new File(excelPath)); // 方式一,传入一个文件

          Workbook wb = WorkbookFactory.create(new FileInputStream(excelPath)); // 方式二:传入一个写入流

        • 获取excel中的sheet

          Sheet sheet = wb.getSheet("Sheet1"); // 根据sheet名获取

          Sheet sheet = wb.getSheetAt(0); // 根据sheet的下标获取,

        • 获取sheet中的行

          Row row = sheet.getRow(0); // 获取一行,通常是从0开始的

        • 获取行中的cell

          Cell cell = row.getCell(0); // 索引是从0开始的

        • 对cell中的数据进行处理

          String str = cell.getStringCellValue(); // 获取String类型cell的值

      • 写数据的详细操作步骤
        • 打开excel

          Workbook wb = WorkbookFactory.create(new File(excelPath));

        • 创建sheet(读取也行)

          Sheet sheet = wb.createSheet("新建一个sheet");

        • 创建行(读取也行)

          Row row = sheet.createRow(2);

        • 创建单元格(读取也行)

          Cell cell = row.createCell(3);

        • 往单元格中写相应的数据类型

          cell.setCellValue("测试数据");

        • 创建写入流

          OutputStream os = new FileOutputStream(new File(excelPath));

        • 写入excel

          wb.write(os);

        • 关闭写入流

          os.close();

      • 其他的小知识
        • 获取共有多少行
          • 不建议使用sheet.getPhysicalNumberOfRows();因为这个方法会自动忽略中间的空行。如果中间存在空行,该方法获取的值就会比实际的少
          • 推荐使用sheet.getLastRowNum();来获取行数,但是处理过程中小心空行
        • 获取共有多少列
          • 不建议使用row.getPhysicalNumberOfCells();同样的原因
          • 推荐使用row.getFirstCellNum()等
      • 一些小知识点
        • HSSFworkbook,XSSFworkbook,SXSSFworkbook,WorkbookFactory的区别于联系
          • HSSFworkbook:操作Excel2003以前的版本,扩展名是.xls
          • XSSFworkbook操作Excel2007以后的版本,扩展名是.xlsx
          • 当行数操作65536行之后,不使用SXSSFworkbook会报错
          • WorkbookFactory自适应的产生HSSFworkbook,XSSFworkbook
    • 集成小demo
      • 读取excel中的所有数据
                package operateExcel;
                
                import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
                import org.apache.poi.ss.usermodel.*;
                
                import java.io.File;
                import java.io.IOException;
                
                /**
                 * 获取excel中的所有数据
                 */
                public class OperateExcelTest {
                    public static void main(String[] args) {
                        String excelPath = "C:\Users\huabingood\Desktop\增量图书数据\20180718新.xlsx";
                
                        Workbook wb = null;
                
                        try {
                            // 1.打开excel
                            wb = WorkbookFactory.create(new File(excelPath));
                            // 2.获取sheet
                            Sheet sheet = wb.getSheetAt(0);
                            int line = sheet.getFirstRowNum();   // 这里实际上是获取的是第一行的行号
                            int lastline = sheet.getLastRowNum();
                            sheet.getPhysicalNumberOfRows();
                            // 循环遍历所有的行
                            for (; line <= lastline; line++) {
                                // 3.获取一行
                                Row row = sheet.getRow(line);
                
                                int cellNum = row.getFirstCellNum();
                                int lastCellNum = row.getLastCellNum();
                                for (; cellNum <= lastCellNum; cellNum++) {
                                    // 防止该行的数据为空
                                    if (null != row) {
                                        // 4.获取一列
                                        Cell cell = row.getCell(cellNum);
                                        if (null != cell) {
                                            // 如果单元格的数据不是string就会出错
                                            String str = cell.getStringCellValue();
                                            System.out.println(str);
                                        }
                                    }
                                }
                
                            }
                
                        } catch (IOException e) {
                            e.printStackTrace();
                        } catch (InvalidFormatException e) {
                            e.printStackTrace();
                        }
                    }
        } 

           

      • 往excel中写数据
                package operateExcel;
                
                import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
                import org.apache.poi.ss.usermodel.*;
                
                import java.io.File;
                import java.io.FileOutputStream;
                import java.io.IOException;
                import java.io.OutputStream;
                
                public class OperateExcel2 {
                    public static void main(String[] args) {
                        String excelPath = "C:\Users\huabingood\Desktop\增量图书数据\20180718新.xlsx";
                        OutputStream os = null;
                
                
                        Workbook wb = null;
                
                        try {
                            // 1.获取excel
                            wb = WorkbookFactory.create(new File(excelPath));
                            // 2.创建sheet
                            Sheet sheet = wb.createSheet("新建一个sheet");
                            // 3.创建一个新行
                            Row row = sheet.createRow(2);
                            // 4.创建一个新的单元格
                            Cell cell = row.createCell(3);
                            // 5.往单元格中写入相应的数据
                            cell.setCellValue("测试数据");
                
                            // 6.打开一个写入流
                            os = new FileOutputStream(new File(excelPath));
                            // 7.写入
                            wb.write(os);
                
                        } catch (IOException e) {
                            e.printStackTrace();
                        } catch (InvalidFormatException e) {
                            e.printStackTrace();
                        } finally {
                            if (null != os) {
                                try {
                                    // 8.关闭写入流
                                    os.close();
                                } catch (IOException e) {
                                    e.printStackTrace();
                                }
                            }
                        }
                    }
        } 
    • 参考资料【感谢你的努力让我进步】

       

      

  • 相关阅读:
    SDL_mixer 播放wav
    SDL_mixer 播放mp3
    [转]音频基础知识及编码原理
    [转]QT父子与QT对象delete
    [转]QT中嵌入SDL
    [转]PCM文件格式
    [转]ffmpeg库音频解码示例
    C# 向PivotItem中添加子控件
    初识 Windows Phone 7
    C#语言使用Windows phone 中的数据数据绑定
  • 原文地址:https://www.cnblogs.com/yanghuabin/p/9525461.html
Copyright © 2011-2022 走看看