Apache POI Excel的读写

1、 POI介绍

Apache POI是用Java编写的免费开源的跨平台的Java API,Apache POI提供API给Java程 序对Microsoft Office格式档案读和写的功能,其中使用最多的就是使用POI操作Excel文 件。

jxl:专门操作Excel

maven坐标:

POI结构:

2、入门案例

2.1  Excel文件读取数据

使用POI可以从一个已经存在的Excel文件中读取数据。

//使用POI读取Excel文件中的数据
@Test
public void test1() throws Exception{
    //加载指定文件,创建一个Excel对象(工作簿)
    XSSFWorkbook excel = new XSSFWorkbook(new FileInputStream(new File("C:\\io\\score.xlsx")));
    //读取Excel文件中第一个Sheet标签页
    XSSFSheet sheet = excel.getSheetAt(0);
    //遍历Sheet标签页,获得每一行数据
    for (Row row : sheet) {
        //遍历行,获得每个单元格对象
        for (Cell cell : row) {
            System.out.println(cell.getStringCellValue());
        }
    }
    //关闭资源
    excel.close();
}

通过上面的入门案例可以看到,POI操作Excel表格封装了几个核心对象:

上面案例是通过遍历工作表获得行,遍历行获得单元格,最终获取单元格中的值。

还有一种方式就是获取工作表最后一个行号,从而根据行号获得行对象,通过行获取最 后一个单元格索引,从而根据单元格索引获取每行的一个单元格对象,代码如下:

//使用POI读取Excel文件中的数据
@Test
public void test2() throws Exception{
    //加载指定文件,创建一个Excel对象(工作簿)
    XSSFWorkbook excel = new XSSFWorkbook(new FileInputStream(new File("c:\\io\\score.xlsx")));
    //读取Excel文件中第一个Sheet标签页
    XSSFSheet sheet = excel.getSheetAt(0);
    //获得当前工作表中最后一个行号,需要注意:行号从0开始
    int lastRowNum = sheet.getLastRowNum();
    System.out.println("lastRowNum = " + lastRowNum);
    for(int i=0;i<=lastRowNum;i++){
        XSSFRow row = sheet.getRow(i);//根据行号获取每一行
        //获得当前行最后一个单元格索引
        short lastCellNum = row.getLastCellNum();
        System.out.println("lastCellNum = " + lastCellNum);
        for(int j=0;j<lastCellNum;j++){
            XSSFCell cell = row.getCell(j);//根据单元格索引获得单元格对象
            System.out.println(cell.getStringCellValue());
        }
    }
    //关闭资源
    excel.close();
}

 

2.2 Excel文件写入数据

使用POI可以在内存中创建一个Excel文件并将数据写入到这个文件,最后通过输出流将 内存中的Excel文件下载到磁盘。

//使用POI向Excel文件写入数据,并且通过输出流将创建的Excel文件保存到本地磁盘
@Test
public void test3() throws Exception{
    //在内存中创建一个Excel文件(工作簿)
    XSSFWorkbook excel = new XSSFWorkbook();
    //创建一个工作表对象
    XSSFSheet sheet = excel.createSheet("oracle");
    //在工作表中创建行对象
    XSSFRow title = sheet.createRow(0);
    //在行中创建单元格对象
    title.createCell(0).setCellValue("姓名");
    title.createCell(1).setCellValue("地址");
    title.createCell(2).setCellValue("年龄");

    XSSFRow dataRow = sheet.createRow(1);
    dataRow.createCell(0).setCellValue("小明");
    dataRow.createCell(1).setCellValue("北京");
    dataRow.createCell(2).setCellValue("20");

    //创建一个输出流,通过输出流将内存中的Excel文件写到磁盘
    FileOutputStream out = new FileOutputStream(new File("c:\\io\\hello.xlsx"));
    excel.write(out);
    out.flush();
    excel.close();
}

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Apache POI 是一个用于读写 Microsoft Office 格式文件的 Java 库。它可以用来修复损坏的 Excel 文件。下面是修复损坏的 Excel 文件的步骤: 1. 使用 POIFSFileSystem 对象读取 Excel 文件。 2. 使用 HSSFWorkbook 对象读取 Excel 文件中的工作簿。 3. 使用 HSSFSheet 对象读取工作簿中的工作表。 4. 使用 HSSFRow 对象读取工作表中的行。 5. 使用 HSSFCell 对象读取行中的单元格。 6. 如果损坏的单元格可以修复,则使用 HSSFCellStyle 对象设置单元格的样式。 7. 使用 HSSFCell 对象设置单元格的值。 8. 使用 FileOutputStream 对象将修复后的 Excel 文件写回磁盘。 以下是一个简单的示例: ```java import java.io.FileInputStream; import java.io.FileOutputStream; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; public class ExcelRepair { public static void main(String[] args) throws Exception { String filename = "corrupted.xlsx"; FileInputStream fis = new FileInputStream(filename); POIFSFileSystem fs = new POIFSFileSystem(fis); HSSFWorkbook wb = new HSSFWorkbook(fs); Sheet sheet = wb.getSheetAt(0); Row row = sheet.getRow(0); Cell cell = row.getCell(0); if (cell.getStringCellValue().equals("CORRUPTED")) { cell.setCellValue("FIXED"); } FileOutputStream fos = new FileOutputStream(filename); wb.write(fos); fos.close(); wb.close(); } } ``` 这个示例假设 Excel 文件中的第一个单元格的值为 "CORRUPTED",它将被替换为 "FIXED"。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bridge Fish

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值