一、要求的版本
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官方文档。