您的位置:

Apache POI详解

一、要求的版本

Apache POI是一个用于读取和编写Microsoft Office格式文件(如Word、Excel和PowerPoint)的Java API。因此,对于使用Apache POI的Java应用程序来说,需要有一定版本的POI的支持。

推荐的POI版本是3.17,这个版本提供了一些新的API和对旧版本的一些修复。

要使用Apache POI,需要在项目中依赖于poi版本,maven可以这样写:

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

二、Apache POI Excel

1. apachepoint

Apache POI可以用来读写Excel文件,其中最重要的类是HSSFWorkbook和XSSFWorkbook。如果要创建.xls格式的excel文件,则使用HSSF类(HSSFWorkbook的底层实现);如果要创建.xlsx格式的excel文件,则使用XSSF类(XSSFWorkbook的底层实现)。

下面是一个简单的任务:向Excel文件中的单元格写入一个值:

//创建工作簿
Workbook workbook = new XSSFWorkbook();

//创建工作表
Sheet sheet = workbook.createSheet("Sheet1");

//创建单元格并写入值
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("hello world");

//将工作簿写入文件
FileOutputStream fileOutputStream = new FileOutputStream("test.xlsx");
workbook.write(fileOutputStream);
fileOutputStream.close();
workbook.close();

2. apache.poi转换pdf

Apache POI可以将Excel文件转换为PDF格式,有两种方法:Apache FOP和iText库。使用Apache FOP需要更多的配置,但生成的PDF文件的质量更好;使用iText库时,可能需要手动处理某些Excel格式。

下面是使用Apache FOP进行PDF转换的示例代码:

//创建工作簿
Workbook workbook = new XSSFWorkbook();

//创建工作表
Sheet sheet = workbook.createSheet("Sheet1");

//创建单元格并写入值
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("hello world");

//将Excel文件转换成PDF
PdfOptions pdfOptions = PdfOptions.create();
FOUserAgent foUserAgent = FopFactory.newInstance(new File(".")).newFOUserAgent();
ByteArrayOutputStream out = new ByteArrayOutputStream();
Fop fop = FopFactory.newInstance(new File(".")).newFop(MimeConstants.MIME_PDF, foUserAgent, out);
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(new DOMSource(workbook.getSheetAt(0).getPackagePart().getContents()), new SAXResult(fop.getDefaultHandler()));
byte[] pdfBytes = out.toByteArray();
out.close();
System.out.println(Arrays.toString(pdfBytes));

3. Apache POI设置单元格格式

Apache POI提供了一些类来设置单元格格式,其中最重要的类是CellStyle。使用CellStyle可以设置字体、颜色、对齐方式等等。

下面是一个简单的任务:设置单元格的字体为粗体:

//创建工作簿
Workbook workbook = new XSSFWorkbook();

//创建工作表
Sheet sheet = workbook.createSheet("Sheet1");

//创建单元格并写入值
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("hello world");

//设置单元格格式
CellStyle cellStyle = sheet.getWorkbook().createCellStyle();
Font font = sheet.getWorkbook().createFont();
font.setBold(true);
cellStyle.setFont(font);
cell.setCellStyle(cellStyle);

//将工作簿写入文件
FileOutputStream fileOutputStream = new FileOutputStream("test.xlsx");
workbook.write(fileOutputStream);
fileOutputStream.close();
workbook.close();

三、Apache POI Word

1. Apache POI操作word

Apache POI可以用来读写Word文件,其中最重要的类是XWPFDocument。如果要创建.docx格式的word文件,则使用XWPFDocument。

下面是一个简单的任务:向Word文件中写入一个段落:

//创建Word文档
XWPFDocument document = new XWPFDocument();

//创建段落
XWPFParagraph paragraph = document.createParagraph();

//创建文本
XWPFRun run = paragraph.createRun();
run.setText("hello world");

//将Word文档写入文件
FileOutputStream fileOutputStream = new FileOutputStream("test.docx");
document.write(fileOutputStream);
fileOutputStream.close();
document.close();

2. Apache POI与JDK版本

使用Apache POI需要与Java Development Kit(JDK)配合使用,因此需要确保使用的JDK版本与Apache POI兼容。Apache POI 4.x系列需要JDK8或更高版本,而Apache POI 3.x系列需要JDK5或更高版本。

3. Apache POI读取Excel

除了可以写入Excel文件之外,Apache POI还可以读取Excel文件内容。下面是一个简单的示例:

//读取Excel文件
File file = new File("test.xlsx");
Workbook workbook = WorkbookFactory.create(file);

//获取工作表
Sheet sheet = workbook.getSheetAt(0);

//遍历行和单元格
for (Row row : sheet) {
    for (Cell cell : row) {
        System.out.print(cell.getStringCellValue() + "\t");
    }
    System.out.println();
}

workbook.close();

4. Apache POI删除行很慢选取

在操作大型Excel文件时,删除行可能会变得非常慢。这是因为POI在内存中保存整个工作表,并且删除行需要重新排列行,这需要变幻所有行的位置。

下面是一个快速删除行的示例:

//删除指定行
XSSFSheet sheet = workbook.getSheetAt(0);
int rowToRemove = 0;
int lastRowNum = sheet.getLastRowNum();
if (rowToRemove >= 0 && rowToRemove < lastRowNum) {
    sheet.shiftRows(rowToRemove + 1, lastRowNum, -1);
}
if (rowToRemove == lastRowNum) {
    Row removingRow = sheet.getRow(rowToRemove);
    if (removingRow != null) {
        sheet.removeRow(removingRow);
    }
}

四、结语

本文介绍了Apache POI的一些基本操作,包括对Excel和Word文件的读写、格式设置、转换和删除。通过使用Apache POI,Java应用程序可以轻松地生成和处理Microsoft Office文件。如果您需要更多的帮助或信息,请参考Apache POI官方文档。