目录
一、导入依赖
            
            
              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();
        }
    }
}
        2、结果
