dbf文件用excel打开乱码_每日一课 | Apache POI 用Java读写Excel文件

b333600f5124687f1f98c66782a4c542.gif

在本文中,我们将讨论如何使用Apache POI读写Excel文件

1. Apache POI库的基本定义

本节简要介绍有关Excel读写期间使用的基本类。

  1. HSSF在类名之前添加前缀,以指示与Microsoft Excel 2003文件相关的操作。

  2. XSSF在类名之前添加前缀,以指示与Microsoft Excel 2007文件或更高版本相关的操作。

  3. XSSFWorkbookHSSFWorkbook是充当Excel工作簿的类

  4. HSSFSheetXSSFSheet是充当Excel工作表的类

  5. Row定义一个Excel行

  6. Cell定义参照行寻址的Excel单元格。 

2.下载Apache POI

使用Maven依赖关系可以轻松获得Apache POI库。

pom.xml 

<dependency><groupId>org.apache.poigroupId><artifactId>poi-ooxmlartifactId><version>3.15version>dependency>

3. Apache POI库–编写简单的Excel

以下代码显示了如何使用Apache POI库编写一个简单的Excel文件。该代码使用二维数据数组来保存数据。数据被写入XSSFWorkbook对象。XSSFSheet是正在处理的工作表。代码如下所示:

ApachePOIExcelWrite.java 

package com.mkyong;import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.xssf.usermodel.XSSFSheet;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;public class ApachePOIExcelWrite {private static final String FILE_NAME = "/tmp/MyFirstExcel.xlsx";public static void main(String[] args) {
        XSSFWorkbook workbook = new XSSFWorkbook();
        XSSFSheet sheet = workbook.createSheet("Datatypes in Java");Object[][] datatypes = {
                {"Datatype", "Type", "Size(in bytes)"},
                {"int", "Primitive", 2},
                {"float", "Primitive", 4},
                {"double", "Primitive", 8},
                {"char", "Primitive", 1},
                {"String", "Non-Primitive", "No fixed size"}
        };
        int rowNum = 0;
        System.out.println("Creating excel");for (Object[] datatype : datatypes) {
            Row row = sheet.createRow(rowNum++);
            int colNum = 0;for (Object field : datatype) {
                Cell cell = row.createCell(colNum++);if (field instanceof String) {
                    cell.setCellValue((String) field);
                } else if (field instanceof Integer) {
                    cell.setCellValue((Integer) field);
                }
            }
        }try {
            FileOutputStream outputStream = new FileOutputStream(FILE_NAME);
            workbook.write(outputStream);
            workbook.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("Done");
    }
}

执行上述代码后,您将获得以下excel作为输出。

58251efcb60efd02004188faac62dfad.png

4. Apache POI库–读取Excel文件

以下代码说明了如何使用Apache POI库读取Excel文件。函数getCellTypeEnum在版本3.15中已弃用,并且将从版本4.0 getCellType命名为getCellType

ApachePOIExcelRead.java 

package com.mkyong;import org.apache.poi.ss.usermodel.*;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.util.Iterator;public class ApachePOIExcelRead {private static final String FILE_NAME = "/tmp/MyFirstExcel.xlsx";public static void main(String[] args) {try {
            FileInputStream excelFile = new FileInputStream(new File(FILE_NAME));
            Workbook workbook = new XSSFWorkbook(excelFile);
            Sheet datatypeSheet = workbook.getSheetAt(0);
            Iterator iterator = datatypeSheet.iterator();while (iterator.hasNext()) {
                Row currentRow = iterator.next();
                Iterator cellIterator = currentRow.iterator();while (cellIterator.hasNext()) {
                    Cell currentCell = cellIterator.next();//getCellTypeEnum shown as deprecated for version 3.15//getCellTypeEnum ill be renamed to getCellType starting from version 4.0if (currentCell.getCellTypeEnum() == CellType.STRING) {
                        System.out.print(currentCell.getStringCellValue() + "--");
                    } else if (currentCell.getCellTypeEnum() == CellType.NUMERIC) {
                        System.out.print(currentCell.getNumericCellValue() + "--");
                    }
                }
                System.out.println();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

执行上面的代码后,您将获得以下输出。 

Datatype--Type--Size(in bytes)--
int--Primitive--2.0--
float--Primitive--4.0--
double--Primitive--8.0--
char--Primitive--1.0--
String--Non-Primitive--No fixed size--

参考文献:

  1. 有关弃用getCellTypeEnum的详细信息

  2. 关于弃用的Apache POI参考

  3. Apache POI Maven回购

  4. Apache POI API文档

翻译自: https://mkyong.com/java/apache-poi-reading-and-writing-excel-file-in-java/

推荐阅读--

当一个程序员飞速敲键盘时,他在干嘛?

卧槽!最新编程语言排名,Java 沦为老二。。

为何程序员上班时间总戴个耳机,看完恍然大悟...

每日一课 | 如何将Java对象读取和写入文件

每日一课 | Java Final关键字示例

81ce39e0-8131-eb11-8da9-e4434bdf6706.svg

球分享

83ce39e0-8131-eb11-8da9-e4434bdf6706.svg

球点赞

99007f37659f85579471ca0f92ab9e49.gif

球在看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值