目录
一、导入依赖
XML
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.16</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.16</version>
</dependency>
二、使用的相关类
1、XSSFWorkbook
构造方法
|------------------------------|-------------------------------|
| 方法 | 描述 |
| XSSFWorkbook() | 创建一个新的空白表 |
| XSSFWorkbook(InputStream is) | 从输入流加载现有的表 |
| XSSFWorkbook(String path) | 从指定文件路径加载现有的表 |
| XSSFWorkbook(OPCPackage pkg) | 使用 OPCPackage 对象创建表,这通常用于高级用途 |
创建表
|-----------------------------------------|-----------------|
| 方法 | 描述 |
| XSSFSheet createSheet(String sheetName) | 创建一个新的表,并指定表的名称 |
| XSSFSheet getSheetAt(int index) | 通过索引获取表 |
| XSSFSheet getSheet(String name) | 通过名称获取表 |
操作表
|--------------------------------------|-----------|
| 方法 | 描述 |
| int getNumberOfSheets() | 获取表的数量 |
| void removeSheetAt(int index) | 删除指定索引处的表 |
| XSSFSheet cloneSheet(int sheetIndex) | 克隆表 |
保存表
|------------------------------|-----------------------|
| 方法 | 描述 |
| void write(OutputStream out) | 将表内容写入输出流,通常用于将表保存到文件 |
| void write(File file) | 将表内容写入指定的文件 |
| void close() | 关闭表,释放资源 |
样式和格式
|---------------------------------|-------------|
| 方法 | 描述 |
| XSSFCellStyle createCellStyle() | 创建一个新的单元格样式 |
| XSSFFont createFont() | 创建一个新的字体对象 |
| short createDataFormat() | 创建一个新的数据格式 |
日期处理
|-----------------------------------------------------|--------------------------------------|
| 方法 | 描述 |
| void setCreationHelper(CreationHelper createHelper) | 设置表的 CreationHelper,用于日期处理和其他数据类型的转换 |
密码保护
|------------------------|----------------------|
| 方法 | 描述 |
| void lockStructure() | 锁定表的结构,防止用户对表的结构进行更改 |
| void unlockStructure() | 解锁表的结构,允许用户对表的结构进行更改 |
其他
|-------------------------------------------------------------------|---------------|
| 方法 | 描述 |
| int getActiveSheetIndex() | 获取当前表的索引 |
| void setActiveSheet(int sheetIndex) | 设置当前表的索引 |
| XSSFFormulaEvaluator getCreationHelper().createFormulaEvaluator() | 用于计算公式的创建和计算器 |
2、XSSFSheet
获取属性和信息
|-------------------------------|-------------------|
| 方法 | 描述 |
| int getPhysicalNumberOfRows() | 获取表中的物理行数,即非空行的数量 |
| int getFirstRowNum() | 获取第一个行的索引,通常为0 |
| int getLastRowNum() | 获取最后一个行的索引 |
| String getSheetName() | 获取表的名称 |
行操作
|-------------------------------------------------|----------------|
| 方法 | 描述 |
| XSSFRow createRow(int rowIndex) | 创建一个新的行,指定行的索引 |
| XSSFRow getRow(int rowIndex) | 获取表中指定行索引的行对象 |
| void removeRow(XSSFRow row) | 从表中删除指定的行 |
| void shiftRows(int startRow, int endRow, int n) | 向下或向上移动表中的行 |
列操作
|-------------------------------------------------|----------|
| 方法 | 描述 |
| int getColumnWidth(int columnIndex) | 获取指定列的宽度 |
| void setColumnWidth(int columnIndex, int width) | 设置指定列的宽度 |
表的属性
|---------------------------------------|----------|
| 方法 | 描述 |
| boolean getDisplayFormulas() | 获取是否显示公式 |
| void setDisplayFormulas(boolean show) | 设置是否显示公式 |
合并单元格
|-----------------------------------------------------|----------------|
| 方法 | 描述 |
| void addMergedRegion(CellRangeAddress region) | 合并单元格区域 |
| void addMergedRegionUnsafe(CellRangeAddress region) | 合并单元格区域(不检查冲突) |
| void removeMergedRegion(int index) | 移除合并单元格区域 |
保护表
|--------------------------------------|------------------|
| 方法 | 描述 |
| void protectSheet(String password) | 保护表并设置密码 |
| void unprotectSheet(String password) | 取消保护表(需要提供正确的密码) |
页眉和页脚
|--------------------|--------|
| 方法 | 描述 |
| Header getHeader() | 获取表的页眉 |
| Footer getFooter() | 获取表的页脚 |
注释
|--------------------------------------------------|--------|
| 方法 | 描述 |
| XSSFRichTextString getSheetComment() | 获取表的注释 |
| void setSheetComment(XSSFRichTextString comment) | 设置表的注释 |
其它
|-----------------------------------------------------------------------------|------------------------|
| 方法 | 描述 |
| XSSFDrawing createDrawingPatriarch() | 创建绘图对象,用于插入图表和图形 |
| XSSFDataValidationHelper getDataValidationHelper() | 获取数据有效性帮助器,用于创建数据有效性约束 |
| void setPrintArea(int startColumn, int endColumn, int startRow, int endRow) | 设置要打印的区域 |
| boolean isSelected() | 检查表是否被选中 |
| void setSelected(boolean select) | 设置表是否被选中 |
3、XSSFRow
获取属性和信息
|--------------------------------|------------------------|
| 方法 | 描述 |
| int getRowNum() | 获取行的索引,从0开始 |
| int getPhysicalNumberOfCells() | 获取该行的物理单元格数量,即非空单元格的数量 |
单元格操作
|--------------------------------------|------------------------|
| 方法 | 描述 |
| XSSFCell createCell(int columnIndex) | 创建一个新的单元格,指定单元格在行中的列索引 |
| XSSFCell getCell(int columnIndex) | 获取行中指定列索引的单元格 |
| void removeCell(XSSFCell cell) | 从行中删除指定的单元格 |
| int getFirstCellNum() | 获取第一个单元格的列索引 |
| int getLastCellNum() | 获取最后一个单元格的列索引,包括空单元格 |
设置行高和默认列宽
|-------------------------------------|---------------------|
| 方法 | 描述 |
| void setHeight(short height) | 设置行的高度(以20分之1个点为单位) |
| void setZeroHeight(boolean zHeight) | 设置行是否为零高度(隐藏行) |
其它方法
|-------------------------------------------------------------------|----------------------|
| 方法 | 描述 |
| void shiftCellsRight(int firstCellNum, int lastCellNum, int step) | 将行中指定范围内的单元格向右移动 |
| void shiftCellsLeft(int firstCellNum, int lastCellNum, int step) | 将行中指定范围内的单元格向左移动 |
| void shiftCellsRight(int firstCellNum, int lastCellNum) | 将行中指定范围内的单元格向右移动一个位置 |
| void shiftCellsLeft(int firstCellNum, int lastCellNum) | 将行中指定范围内的单元格向左移动一个位置 |
4、XSSFCell
获取单元格的内容
|-------------------------------|-------------------------------------------------|
| 方法 | 描述 |
| String getStringCellValue() | 获取单元格中的文本值,无论单元格中的内容是文本、数字、日期或其他数据类型,都会以字符串形式返回 |
| double getNumericCellValue() | 获取单元格中的数值(仅适用于数值类型的单元格) |
| boolean getBooleanCellValue() | 获取单元格中的布尔值(仅适用于布尔类型的单元格) |
| String getCellFormula() | 获取单元格中的公式 |
设置单元格的内容
|-------------------------------------|-------------|
| 方法 | 描述 |
| void setCellValue(double value) | 设置单元格的值为数值 |
| void setCellValue(String value) | 设置单元格的值为文本 |
| void setCellValue(boolean value) | 设置单元格的值为布尔值 |
| void setCellFormula(String formula) | 设置单元格的公式 |
单元格样式
|----------------------------------------|-----------------------|
| 方法 | 描述 |
| XSSFCellStyle getCellStyle() | 获取单元格的样式对象,以便修改单元格的样式 |
| void setCellStyle(XSSFCellStyle style) | 设置单元格的样式 |
单元格类型和属性
|-------------------------------|--------------------------|
| 方法 | 描述 |
| int getCellType() | 获取单元格的类型,返回常量值(CellType) |
| boolean getBooleanCellValue() | 获取布尔类型的单元格值 |
| int getColumnIndex() | 获取单元格所在的列索引 |
单元格注释
|-------------------------------------------------------|---------------------|
| 方法 | 描述 |
| XSSFRichTextString getRichStringCellValue() | 获取富文本字符串对象(支持格式化文本) |
| XSSFRichTextString setCellValue(RichTextString value) | 设置单元格的富文本字符串值 |
其它方法
|----------------------------------------|----------------------------|
| 方法 | 描述 |
| void setCellType(int cellType) | 设置单元格的类型,可以是 CellType 常量之一 |
| void setCellStyle(CellStyle style) | 设置单元格的日期格式 |
| void setCellType(CellType cellType) | 设置单元格的类型,可以是 CellType 常量之一 |
| void setCellErrorValue(byte errorCode) | 设置单元格的错误值 |
| boolean isPartOfArrayFormulaGroup() | 检查单元格是否属于数组公式组 |
| void removeCellComment() | 移除单元格的注释 |
三、代码和结果
1、代码
java
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Export {
public static void main(String[] args){
//表名:
String sheetName = "test";
//表头:
String[] arr02 = {"姓名","年龄","成绩"};
List<String> heaList = Arrays.asList(arr02);
//写入文件路径:
String filePath = "E:\\test\\"+sheetName+".xls";
//数据
List<String> data=new ArrayList<>();
data.add("1");
data.add("1");
data.add("1");
List<List<String>> contentList=new ArrayList<>();
contentList.add(data);
contentList.add(data);
contentList.add(data);
exportToExcel(sheetName,heaList,contentList,filePath);
}
/*
* sheetName:表名
* heaaList:表头
* contentList:表内容
* filePath:写入文件地址
* */
public static void exportToExcel(String sheetName, List<String> heaList, List<List<String>> contentList, String filePath){
//创建sheet页
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet(sheetName);
//创建表头(第一行)
XSSFRow row = sheet.createRow(0);
for (int i = 0; i < heaList.size() ; i++) {
XSSFCell cell = row.createCell(i);
cell.setCellValue(heaList.get(i));
}
//创建表内容
//List<List<String>>,一条内容存储多个列表对象
for (int i = 0; i <contentList.size() ; i++) {
row = sheet.createRow(i+1);
for (int j = 0; j < contentList.get(i).size(); j++) {
row.createCell(j).setCellValue(contentList.get(i).get(j));
}
}
//写入文件
File file = new File(filePath);
try {
//将文件保存到指定位置
workbook.write(new FileOutputStream(file));
System.out.println("写入文件成功");
} catch (IOException e) {
e.printStackTrace();
}
}
}