Java学习笔记:Excel文件的读写

Excel格式说明

1、Excel有xls、xlsx两种格式,推荐使用xlsx,因为没有行数限制。

2、整个Excel文件是一个Workbook,每个Workbook由多个Sheet组成,一个Sheet有多Row,一个Row有多个Cell。拿一个Excel文件去说明。

ExcelHelpers使用

1、看文档研究ExcelHelpers。它是对poi库的简单封装,更多功能看poi的文档。

2、注意的问题,如果使用公式的话,如果运行期间改变了数值,并且想得到计算后的单元格的值,需要手动调用evaluateAllFormulas()。

3、演示:使用代码读取遍历一个Excel文件。

4、演示:使用代码创建一个Excel文件,填充一些数据,然后保存。

Java学习笔记:Excel文件的读写_第1张图片

限定符和类型 方法和说明
static void close(org.apache.poi.ss.usermodel.Workbook wb)

关闭Workbook

static org.apache.poi.ss.usermodel.CellStyle createCellStyle(org.apache.poi.ss.usermodel.Cell cell)

创建CellStyle对象

static org.apache.poi.xssf.usermodel.XSSFChart createChart(org.apache.poi.ss.usermodel.Sheet sheet, int col1, int row1, int col2, int row2)

在sheet上创建一个图表对象,显示到左上角坐标为(col1,row1)、右下角坐标为(col2,row2)这个位置。

static org.apache.poi.xssf.usermodel.XSSFChart createChart(org.apache.poi.ss.usermodel.Sheet sheet, int dx1, int dy1, int dx2, int dy2, int col1, int row1, int col2, int row2)

在sheet上创建一个图表对象,显示到左上角坐标为(col1,row1)、右下角坐标为(col2,row2)这个位置。

static org.apache.poi.hssf.usermodel.HSSFWorkbook createXLS()

创建旧的2003格式(*.xls)的Excel文档Workbook对象。

static org.apache.poi.xssf.usermodel.XSSFWorkbook createXLSX()

创建新格式(*.xlsx)的Excel文档Workbook对象。

static void evaluateAllFormulas(org.apache.poi.ss.usermodel.Workbook wb)

重新计算workbook这个表格中所有的公式。

static org.apache.poi.ss.usermodel.Cell getCell(org.apache.poi.ss.usermodel.Sheet sheet, int rowIndex, int colIndex)

得到sheet的第rowIndex行的第colIndex列的单元格。

static Double getCellDoubleValue(org.apache.poi.ss.usermodel.Cell cell)

获得cell的Double类型的值,如果值是空的或者不存在这个单元格,则返回null。

static Double getCellDoubleValue(org.apache.poi.ss.usermodel.Sheet sheet, int rowIndex, int colIndex)

获得sheet的第rowIndex行的第colIndex列的Double类型的值,如果值是空的或者不存在这个单元格,则返回null。

static Integer getCellIntValue(org.apache.poi.ss.usermodel.Cell cell)

获得cell的Integer类型的值,如果值是空的或者不存在这个单元格,则返回null。

static Integer getCellIntValue(org.apache.poi.ss.usermodel.Sheet sheet, int rowIndex, int colIndex)

获得sheet的第rowIndex行的第colIndex列的Integer类型的值,如果值是空的或者不存在这个单元格,则返回null。

static java.time.LocalDateTime getCellLocalDateTimeValue(org.apache.poi.ss.usermodel.Cell cell)

获得cell的LocalDateTime类型的值,如果值是空的或者不存在这个单元格,则返回null。

static java.time.LocalDateTime getCellLocalDateTimeValue(org.apache.poi.ss.usermodel.Sheet sheet, int rowIndex, int colIndex)

获得sheet的第rowIndex行的第colIndex列的LocalDateTime类型的值,如果值是空的或者不存在这个单元格,则返回null。

static java.time.LocalDate getCellLocalDateValue(org.apache.poi.ss.usermodel.Cell cell)

获得cell的LocalDate类型的值,如果值是空的或者不存在这个单元格,则返回null。

static java.time.LocalDate getCellLocalDateValue(org.apache.poi.ss.usermodel.Sheet sheet, int rowIndex, int colIndex)

获得sheet的第rowIndex行的第colIndex列的LocalDate类型的值,如果值是空的或者不存在这个单元格,则返回null。

static String getCellStringValue(org.apache.poi.ss.usermodel.Cell cell)

获得cell的String类型的值,如果值是空的或者不存在这个单元格,则返回null。

static String getCellStringValue(org.apache.poi.ss.usermodel.Sheet sheet, int rowIndex, int colIndex)

获得sheet的第rowIndex行的第colIndex列的String类型的值,如果值是空的或者不存在这个单元格,则返回null。

static org.apache.poi.ss.usermodel.Workbook openFile(byte[] bytes)

打开Excel文件,文件的内容是bytes,返回文档的Workbook对象。

static org.apache.poi.ss.usermodel.Workbook openFile(File file)

打开Excel文件file,返回文档的Workbook对象。

static org.apache.poi.ss.usermodel.Workbook openFile(InputStream inStream)

打开inStream代表的Excel文件,返回文档的Workbook对象。

static org.apache.poi.ss.usermodel.Workbook openFile(String filename)

打开Excel文件filename,返回文档的Workbook对象。

static void saveToFile(org.apache.poi.ss.usermodel.Workbook workbook, File file)

把workbook保存到文件file中。

static void saveToFile(org.apache.poi.ss.usermodel.Workbook workbook, String filename)

把workbook保存到文件filename中。

static void setCellValue(org.apache.poi.ss.usermodel.Cell cell, Object value)

设置cell的值,根据传入的value类型会自动设置单元格的cellStyle。

static void setCellValue(org.apache.poi.ss.usermodel.Sheet sheet, int rowIndex, int colIndex, Object value)

设置sheet这个页的第rowIndex行的第colIndex列的值为value。

static byte[] toByteArray(org.apache.poi.ss.usermodel.Workbook workbook)

把workbook生成为内容的字节数组

 无论在界面上显示的是什么,编程都是从第零行第零列开始数的。

所以的数据类型都是继承与object类型的,因此传入String,int等类型都没事

package Part4;

import com.yzk18.docs.ExcelHelpers;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;

public class 遍历Excel文件1 {
    public static void main(String[] args) {
        Workbook workbook=ExcelHelpers.openFile("d:/temp/工作簿1.xlsx");
        for (int sheetIndex=0;sheetIndex 
  

遍历到有Null存在,出现了问题,DEbug一下

Java学习笔记:Excel文件的读写_第2张图片

Java学习笔记:Excel文件的读写_第3张图片

Java学习笔记:Excel文件的读写_第4张图片

Java学习笔记:Excel文件的读写_第5张图片

看它在表格的哪里 

可能在Excel文件中有些空cell中存在数据,调试一下如果遇到null就跳过

Java学习笔记:Excel文件的读写_第6张图片

又运到问题,sheet2打印不出来。继续找问题,Cannot invoke "org.apache.poi.ss.usermodel.Row.getFirstCellNum()" because "row" is null。它说我行是空。OK,那我就在行中加入,遇到null就跳过。

Java学习笔记:Excel文件的读写_第7张图片

 OK成功了

Java学习笔记:Excel文件的读写_第8张图片

 Excel遍历完整代码

package Part4;

import com.yzk18.docs.ExcelHelpers;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;

public class 遍历Excel文件1 {
    public static void main(String[] args) {
        Workbook workbook=ExcelHelpers.openFile("d:/temp/工作簿1.xlsx");
        for (int sheetIndex=0;sheetIndex

 创建Excel文件

Java学习笔记:Excel文件的读写_第9张图片代码

package Part4;

import com.yzk18.docs.ExcelHelpers;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class 创建Excel文件1 {
    public static void main(String[] args) {
        XSSFWorkbook worbook = ExcelHelpers.createXLSX();
        XSSFSheet sheet = worbook.createSheet();
        ExcelHelpers.setCellValue(sheet,0,0,"姓名");
        ExcelHelpers.setCellValue(sheet,0,1,"年龄");
        ExcelHelpers.setCellValue(sheet,0,2,"手机号");

        ExcelHelpers.setCellValue(sheet,1,0,"小明");
        ExcelHelpers.setCellValue(sheet,1,1,18);
        ExcelHelpers.setCellValue(sheet,1,2,"18888888888888");

        ExcelHelpers.setCellValue(sheet,2,0,"小红");
        ExcelHelpers.setCellValue(sheet,2,1,19);
        ExcelHelpers.setCellValue(sheet,2,2,"139999999999999");

        ExcelHelpers.saveToFile(worbook,"d:/temp/1.xlsx");
    }
}

效果

Java学习笔记:Excel文件的读写_第10张图片

 

你可能感兴趣的:(零基础玩java,java,开发语言,后端)