Java - 基于 Apache POI 操作(创建或读取) Excel 文件

创建 Excel 文件

准备

新建 Maven Project,引入依赖:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.1.2</version>
</dependency>

创建行和列

import java.io.File;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class ExcelTests {
    
    

    public static void main(String[] args) throws IOException {
    
    
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("Sheet 1");
        
        for (int rowIndex = 0; rowIndex < 10; rowIndex++) {
    
    
            HSSFRow row = sheet.createRow(rowIndex); // 创建行
            for (int columnIndex = 0; columnIndex < 10; columnIndex++) {
    
    
                HSSFCell cell = row.createCell(columnIndex); // 创建列
                cell.setCellValue("R" + rowIndex + ":C" + columnIndex);
            }
        }
        
        workbook.write(new File("excel.xls"));
        workbook.close();
    }
}

在这里插入图片描述

设置列宽

设置列宽(第 19 行):

import java.io.File;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class ExcelTests {
    
    

    public static void main(String[] args) throws IOException {
    
    
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("Sheet 1"); // 工作表
        
        for (int rowIndex = 0; rowIndex < 10; rowIndex++) {
    
    
            HSSFRow row = sheet.createRow(rowIndex); // 创建行
            for (int columnIndex = 0; columnIndex < 10; columnIndex++) {
    
    
                if (rowIndex == 0 && columnIndex == 0) {
    
     // 首行首列
                    sheet.setColumnWidth(columnIndex, 256 * 20); // 设置列宽,第二个参数表示十个字符宽度
                }
                
                HSSFCell cell = row.createCell(columnIndex); // 创建列
                cell.setCellValue("R" + rowIndex + ":C" + columnIndex);
            }
        }
        
        workbook.write(new File("excel.xls"));
        workbook.close();
    }
}

注意:其他行的首列的宽度是受第一行、第一列的影响而变宽,并非我们设置的。

在这里插入图片描述

设置字体颜色

设置字体颜色(第 25 ~ 31 行):

import java.io.File;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.IndexedColors;

public class ExcelTests {
    
    

    public static void main(String[] args) throws IOException {
    
    
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("Sheet 1"); // 工作表
        
        for (int rowIndex = 0; rowIndex < 10; rowIndex++) {
    
    
            HSSFRow row = sheet.createRow(rowIndex); // 创建行
            for (int columnIndex = 0; columnIndex < 10; columnIndex++) {
    
    
                HSSFCell cell = row.createCell(columnIndex); // 创建列
                cell.setCellValue("R" + rowIndex + ":C" + columnIndex);
                
                if (rowIndex == columnIndex) {
    
    
                    HSSFFont font = workbook.createFont();
                    font.setColor(IndexedColors.RED.getIndex()); // 字体颜色
                    
                    HSSFCellStyle cellStyle = workbook.createCellStyle(); // 创建样式
                    cellStyle.setFont(font);
                    
                    cell.setCellStyle(cellStyle); // 设置样式
                }
            }
        }
        
        workbook.write(new File("excel.xls"));
        workbook.close();
    }
}

在这里插入图片描述

设置网页超链接

设置网页超链接(第 18、27 ~ 29 行):

import java.io.File;
import java.io.IOException;

import org.apache.poi.common.usermodel.HyperlinkType;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCreationHelper;
import org.apache.poi.hssf.usermodel.HSSFHyperlink;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class ExcelTests {
    
    

    public static void main(String[] args) throws IOException {
    
    
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("Sheet 1"); // 工作表
        
        HSSFCreationHelper creationHelper = workbook.getCreationHelper();
        
        for (int rowIndex = 0; rowIndex < 10; rowIndex++) {
    
    
            HSSFRow row = sheet.createRow(rowIndex); // 创建行
            for (int columnIndex = 0; columnIndex < 10; columnIndex++) {
    
    
                HSSFCell cell = row.createCell(columnIndex); // 创建列
                cell.setCellValue("R" + rowIndex + ":C" + columnIndex);
                
                if (columnIndex == 0) {
    
    
                    HSSFHyperlink hyperlink = creationHelper.createHyperlink(HyperlinkType.URL);
                    hyperlink.setAddress("https://www.baidu.com/");
                    cell.setHyperlink(hyperlink);
                }
            }
        }
        
        workbook.write(new File("excel.xls"));
        workbook.close();
    }
}

在这里插入图片描述

读取 Excel 文件

提示:以下使用的 Excel 文件来自上文最后一个。

读取行和列

import java.io.File;
import java.io.IOException;

import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

public class ExcelReadTests {
    
    

    public static void main(String[] args) throws IOException {
    
    
        Workbook workbook = WorkbookFactory.create(new File("excel.xls"));
        
        int nSheets = workbook.getNumberOfSheets();
        
        for (int sheetIndex = 0; sheetIndex < nSheets; sheetIndex++) {
    
    
            Sheet sheet = workbook.getSheetAt(sheetIndex);
            
            int nRow = sheet.getLastRowNum() + 1;
            for (int rowIndex = 0; rowIndex < nRow; rowIndex++) {
    
    
                Row row = sheet.getRow(rowIndex);
                if (row == null)
                    continue;
                
                int nColumn = row.getPhysicalNumberOfCells();
                for (int columnIndex = 0; columnIndex < nColumn; columnIndex++) {
    
    
                    System.out.printf("%s ", row.getCell(columnIndex).getStringCellValue());
                }
                
                System.out.println();
            }
        }
        
        workbook.close();
    }
}

输出:

R0:C0 R0:C1 R0:C2 R0:C3 R0:C4 R0:C5 R0:C6 R0:C7 R0:C8 R0:C9 
R1:C0 R1:C1 R1:C2 R1:C3 R1:C4 R1:C5 R1:C6 R1:C7 R1:C8 R1:C9 
R2:C0 R2:C1 R2:C2 R2:C3 R2:C4 R2:C5 R2:C6 R2:C7 R2:C8 R2:C9 
R3:C0 R3:C1 R3:C2 R3:C3 R3:C4 R3:C5 R3:C6 R3:C7 R3:C8 R3:C9 
R4:C0 R4:C1 R4:C2 R4:C3 R4:C4 R4:C5 R4:C6 R4:C7 R4:C8 R4:C9 
R5:C0 R5:C1 R5:C2 R5:C3 R5:C4 R5:C5 R5:C6 R5:C7 R5:C8 R5:C9 
R6:C0 R6:C1 R6:C2 R6:C3 R6:C4 R6:C5 R6:C6 R6:C7 R6:C8 R6:C9 
R7:C0 R7:C1 R7:C2 R7:C3 R7:C4 R7:C5 R7:C6 R7:C7 R7:C8 R7:C9 
R8:C0 R8:C1 R8:C2 R8:C3 R8:C4 R8:C5 R8:C6 R8:C7 R8:C8 R8:C9 
R9:C0 R9:C1 R9:C2 R9:C3 R9:C4 R9:C5 R9:C6 R9:C7 R9:C8 R9:C9 

获取单元格的超链接

获取单元格的超链接(第 31 行):

import java.io.File;
import java.io.IOException;

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;
import org.apache.poi.ss.usermodel.WorkbookFactory;

public class ExcelReadTests {
    
    

    public static void main(String[] args) throws IOException {
    
    
        Workbook workbook = WorkbookFactory.create(new File("excel.xls"));
        
        int nSheets = workbook.getNumberOfSheets();
        
        for (int sheetIndex = 0; sheetIndex < nSheets; sheetIndex++) {
    
    
            Sheet sheet = workbook.getSheetAt(sheetIndex);
            
            int nRow = sheet.getLastRowNum() + 1;
            for (int rowIndex = 0; rowIndex < nRow; rowIndex++) {
    
    
                Row row = sheet.getRow(rowIndex);
                if (row == null)
                    continue;
                
                int nColumn = row.getPhysicalNumberOfCells();
                for (int columnIndex = 0; columnIndex < nColumn; columnIndex++) {
    
    
                    Cell cell = row.getCell(columnIndex);
                    System.out.printf("%s ", cell.getStringCellValue());
                    if (columnIndex == 0) {
    
    
                        System.out.printf("(%s) ", cell.getHyperlink().getAddress());
                    }
                }
                
                System.out.println();
            }
        }
        
        workbook.close();
    }
}

输出:

R0:C0 (https://www.baidu.com/) R0:C1 R0:C2 R0:C3 R0:C4 R0:C5 R0:C6 R0:C7 R0:C8 R0:C9 
R1:C0 (https://www.baidu.com/) R1:C1 R1:C2 R1:C3 R1:C4 R1:C5 R1:C6 R1:C7 R1:C8 R1:C9 
R2:C0 (https://www.baidu.com/) R2:C1 R2:C2 R2:C3 R2:C4 R2:C5 R2:C6 R2:C7 R2:C8 R2:C9 
R3:C0 (https://www.baidu.com/) R3:C1 R3:C2 R3:C3 R3:C4 R3:C5 R3:C6 R3:C7 R3:C8 R3:C9 
R4:C0 (https://www.baidu.com/) R4:C1 R4:C2 R4:C3 R4:C4 R4:C5 R4:C6 R4:C7 R4:C8 R4:C9 
R5:C0 (https://www.baidu.com/) R5:C1 R5:C2 R5:C3 R5:C4 R5:C5 R5:C6 R5:C7 R5:C8 R5:C9 
R6:C0 (https://www.baidu.com/) R6:C1 R6:C2 R6:C3 R6:C4 R6:C5 R6:C6 R6:C7 R6:C8 R6:C9 
R7:C0 (https://www.baidu.com/) R7:C1 R7:C2 R7:C3 R7:C4 R7:C5 R7:C6 R7:C7 R7:C8 R7:C9 
R8:C0 (https://www.baidu.com/) R8:C1 R8:C2 R8:C3 R8:C4 R8:C5 R8:C6 R8:C7 R8:C8 R8:C9 
R9:C0 (https://www.baidu.com/) R9:C1 R9:C2 R9:C3 R9:C4 R9:C5 R9:C6 R9:C7 R9:C8 R9:C9 

参考

java操作excel常用的两种方式

猜你喜欢

转载自blog.csdn.net/qq_29761395/article/details/112707986