一、环境配置
我们通过学习知道,java操作Excel时需要在maven工程中的pom.xml文件添加poi-ooxml的依赖包,眼下我们选择的版本是3.17,因为相对稳定且使用率较高。配置路径以及结果如下:
二、poi-ooxml源码类学习
我们安装好依赖后按照业务需要,即操作Excel表格(当前不涉及Excel的写入,只有读取操作),会学习到四个源码类,分别是XSSFWorkbook源码类、XSSFSheet源码类、XSSFRow源码类和XSSFCell源码类。学习源码的一个大体节奏是通过源码类先学习类的构造方法,然后是普通方法最后汇总源码方法,进行流水线开发。现在我先把四个源码类的常用方法总结下来,具体如下。
2.1 XSSFWorkbook源码类
[ public class XSSFWorkbook extends POIXMLDocument implements Workbook ]。(路径:poi-ooxml-3.17.jar–>org.apache.poi.xssf.usermodel–>XSSFWorkbook.clss):
//构造方法
public XSSFWorkbook();
public XSSFWorkbook(XSSFWorkbookType workbookType);
// public XSSFWorkbook(OPCPackage pkg) throws IOException;
// public XSSFWorkbook(InputStream is) throws IOException;
public XSSFWorkbook(File file) throws IOException, InvalidFormatException;
//---上面构造方法引出File源码类,通过实例话File类拿到File类的对象,传参,获取XSSFWorkbook的对象。
public XSSFWorkbook(String path) throws IOException;
//普通方法
public XSSFSheet cloneSheet(int sheetNum);
public XSSFSheet cloneSheet(int sheetNum, String newName);
public XSSFSheet createSheet();
public XSSFSheet createSheet(String sheetname);
public XSSFSheet getSheet(String name);
public XSSFSheet getSheetAt(int index);
public int getSheetIndex(String name);
public int getSheetIndex(Sheet sheet);
public String getSheetName(int sheetIx);
public void removeSheetAt(int index);
public void setSheetName(int sheetIndex, String sheetname);
2.2 XSSFSheet源码类
[ public class XSSFSheet extends POIXMLDocumentPart implements Sheet ]。上面我们观察到普通方法内创建Sheet、获取Sheet等方法最终都会得到一个sheet对象,那么XSSFSheet源码类又有哪些方法提供给我们使用呢?
// 构造方法
protected XSSFSheet();
protected XSSFSheet(PackagePart part);
注意:XSSFSheet源码类的构造方法都是被保护类型的,不能直接调用,我们可以通过XSSFWorkbook源码类拿到sheet对象,操作XSSFSheet源码类中的方法。
// 普通方法
public XSSFWorkbook getWorkbook();
public String getSheetName();
public int getColumnWidth(int columnIndex);
public int getDefaultColumnWidth();
public boolean isColumnHidden(int columnIndex);
public void setColumnHidden(int columnIndex, boolean hidden);
public void setColumnWidth(int columnIndex, int width);
public void setDefaultColumnWidth(int width)
public int getFirstRowNum();
public int getLastRowNum();
public short getDefaultRowHeight();
public void setDefaultRowHeight(short height);
public XSSFRow createRow(int rownum);
public XSSFRow getRow(int rownum);
public void removeRow(Row row);
2.3 XSSFRow源码类
[ public class XSSFRow implements Row, Comparable ]。上面我们可以看到由XSSFWorkbook类对象操作XSSFSheet类中的方法可以得到XSSFRow类的对象。得到行对象后就可以操作XSSFRow源码类中的方法。
// 构造方法
protected XSSFRow(CTRow row, XSSFSheet sheet);
同XSSFSheet源码类,XSSFRow源码类的构造方法也是被保护的,解决方法类似。
// 普通方法
public XSSFSheet getSheet();
public XSSFCell createCell(int columnIndex);
public XSSFCell createCell(int columnIndex, CellType type);
public XSSFCell getCell(int cellnum);
public short getFirstCellNum();
public short getLastCellNum(); // 特殊点:从1开始计数。
public int getRowNum();
public void setRowNum(int rowIndex);
public void removeCell(Cell cell);
2.4 XSSFCell源码类
[ public final class XSSFCell implements Cell ]。同样的道理,我们来看一下XSSFCell源码类中都有哪些构造方法和普通方法。
// 构造方法
protected XSSFCell(XSSFRow row, CTCell cell);
// 普通方法
public XSSFSheet getSheet();
public XSSFRow getRow();
public boolean getBooleanCellValue();
public void setCellValue(boolean value);
public double getNumericCellValue();
public void setCellValue(double value);
public String getStringCellValue();
public void setCellValue(String str);
public XSSFRichTextString getRichStringCellValue();
public void setCellValue(RichTextString str);
public String getCellFormula();
public void setCellFormula(String formula)<