新手淘宝客在百度推广网站么做,wordpress站点统计插件,无锡网站建设高端,养老服务业扶持政策第1部分#xff1a;引言
1.1 Apache POI简介
Apache POI是一个开源的Java库#xff0c;用于处理Microsoft Office文档。自2001年首次发布以来#xff0c;它已经成为Java社区中处理Office文档事实上的标准。Apache POI支持HSSF#xff08;用于旧版本的Excel格式#xff0…第1部分引言
1.1 Apache POI简介
Apache POI是一个开源的Java库用于处理Microsoft Office文档。自2001年首次发布以来它已经成为Java社区中处理Office文档事实上的标准。Apache POI支持HSSF用于旧版本的Excel格式即.xls和XSSF用于Excel 2007及以后版本即.xlsx两种Excel格式以及其他Office文档格式。
1.2 为什么选择Apache POI进行Excel操作
跨平台性作为Java库Apache POI可以在任何支持Java的平台上运行无需依赖特定的操作系统。开源和免费Apache POI是一个开源项目允许开发者免费使用和修改。功能丰富支持创建、编辑、格式化、图表绘制等多种Excel操作。社区支持拥有活跃的开发者社区提供持续的更新和技术支持。与Java集成度高无缝集成到Java应用程序中易于学习和使用。
第2部分Apache POI概览
2.1 Apache POI的历史和发展
Apache POI最初由Andrew C. Oliver于2001年开发目的是提供一个能够读写Microsoft Office文件格式的Java库。随着时间的推移Apache POI不断发展壮大现在已经成为Apache软件基金会的一个顶级项目。它支持包括Excel、Word、PowerPoint在内的多种Office文档格式。
2.2 支持的文件格式
Apache POI支持多种Excel文件格式主要包括
HSSF (Horrible SpreadSheet Format)用于读写旧版的Excel格式.xls。XSSF (Excel Spreadsheet XML Format)用于读写较新的Excel格式.xlsx基于Office Open XML标准。SXSSF用于读写大型Excel文件支持在内存使用较低的情况下进行操作。
2.3 与其他库的比较
与其他Excel操作库相比Apache POI具有以下优势
全面性支持几乎所有Excel功能包括宏、图表、数据透视表等。成熟度经过多年的发展Apache POI已经非常稳定和成熟。社区活跃拥有一个活跃的开发者社区不断有新的功能和改进被加入。
2.4 核心组件
Apache POI由以下几个核心组件构成
POI-OLE用于处理OLE2文件格式如早期的Excel文件。POI-HSSF专门用于处理HSSF格式的Excel文件。POI-SXSSF用于处理SXSSF格式的Excel文件。POI-XSSF用于处理XSSF格式的Excel文件。POI-HWPF用于处理Word文档。POI-HSLF用于处理PowerPoint演示文稿。
2.5 示例创建一个简单的Excel文件
下面是一个使用Apache POI创建一个简单Excel文件的示例
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.FileOutputStream;
import java.io.IOException;public class SimpleExcelExample {public static void main(String[] args) throws IOException {try (Workbook workbook new XSSFWorkbook()) {Sheet sheet workbook.createSheet(Simple Sheet);Row row sheet.createRow(0);Cell cell row.createCell(0);cell.setCellValue(Hello, Apache POI!);CellStyle style workbook.createCellStyle();style.setFillForegroundColor(IndexedColors.YELLOW.index);style.setFillPattern(CellStyle.SOLID_FOREGROUND);cell.setCellStyle(style);try (FileOutputStream outputStream new FileOutputStream(simple.xlsx)) {workbook.write(outputStream);}}}
}2.6 示例读取Excel文件
以下示例展示了如何使用Apache POI读取Excel文件中的数据
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.FileInputStream;
import java.io.IOException;public class ReadExcelExample {public static void main(String[] args) throws IOException {try (Workbook workbook new XSSFWorkbook(new FileInputStream(simple.xlsx))) {Sheet sheet workbook.getSheetAt(0);for (Row row : sheet) {for (Cell cell : row) {switch (cell.getCellType()) {case STRING:System.out.println(cell.getStringCellValue());break;case NUMERIC:System.out.println(cell.getNumericCellValue());break;// 可以根据需要添加其他类型的处理}}}}}
}第3部分环境搭建
3.1 安装Java开发环境
在使用Apache POI之前确保你的计算机上安装了Java开发环境JDK。可以从Oracle官网下载最新版本的JDK。安装完成后配置环境变量使得java和javac命令可以在命令行中直接使用。
3.2 添加Apache POI依赖到项目
Apache POI可以通过多种方式添加到你的项目中。以下是几种常见的方法
3.2.1 使用Maven
如果你的项目使用Maven进行依赖管理可以在pom.xml文件中添加以下依赖
!-- https://mvnrepository.com/artifact/org.apache.poi/poi --
dependencygroupIdorg.apache.poi/groupIdartifactIdpoi/artifactIdversion5.2.2/version
/dependency!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --
dependencygroupIdorg.apache.poi/groupIdartifactIdpoi-ooxml/artifactIdversion5.2.2/version
/dependency3.2.2 使用Gradle
对于使用Gradle的项目在build.gradle文件中添加以下依赖
dependencies {implementation org.apache.poi:poi:5.2.2implementation org.apache.poi:poi-ooxml:5.2.2
}3.2.3 手动下载和配置
如果不想使用依赖管理工具可以从Apache POI官网下载所需的JAR文件并将其添加到项目的类路径中。
3.3 配置开发工具IDE以支持Apache POI
大多数现代IDE如IntelliJ IDEA、Eclipse等都支持Maven和Gradle可以自动识别并下载依赖。确保你的IDE配置正确可以识别并索引Apache POI库。
3.4 示例使用Maven创建一个简单的项目
以下是一个使用Maven创建的简单项目的目录结构和pom.xml配置示例
simple-poi-project
|-- pom.xml
-- src-- main|-- java-- com.example-- SimpleExcelExample.javapom.xml:
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.example/groupIdartifactIdsimple-poi-project/artifactIdversion1.0-SNAPSHOT/versiondependencies!-- Apache POI dependencies --dependencygroupIdorg.apache.poi/groupIdartifactIdpoi/artifactIdversion5.2.2/version/dependencydependencygroupIdorg.apache.poi/groupIdartifactIdpoi-ooxml/artifactIdversion5.2.2/version/dependency/dependencies
/project3.5 示例创建和配置Eclipse项目
如果你使用Eclipse作为开发工具可以按照以下步骤创建和配置项目
打开Eclipse选择File New Java Project。输入项目名称例如SimplePoiProject然后点击Finish。右键点击项目选择Configure Convert to Maven Project。在弹出的窗口中添加Apache POI依赖然后点击Finish。
3.6 示例使用IntelliJ IDEA创建项目
如果你使用IntelliJ IDEA可以按照以下步骤创建和配置项目
打开IntelliJ IDEA选择File New Project。选择Maven然后点击Next。输入项目名称和位置点击Next。在Artifact Coordinates页面添加Apache POI依赖然后点击Finish。
第4部分基础操作
4.1 创建一个新的Excel文件
使用Apache POI创建一个新的Excel文件涉及到几个关键步骤初始化工作簿Workbook创建工作表Sheet以及添加行Row和单元格Cell。以下是一个创建新Excel文件并写入一些基础数据的示例
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.FileOutputStream;
import java.io.IOException;public class CreateNewExcel {public static void main(String[] args) throws IOException {Workbook workbook new XSSFWorkbook(); // 创建新的工作簿Sheet sheet workbook.createSheet(First Sheet); // 创建新的工作表// 在第一行第一列创建单元格并写入数据Row row sheet.createRow(0);Cell cell row.createCell(0);cell.setCellValue(Apache POI);// 设置单元格样式CellStyle style workbook.createCellStyle();style.setAlignment(HorizontalAlignment.CENTER);cell.setCellStyle(style);try (FileOutputStream outputStream new FileOutputStream(newExcel.xlsx)) {workbook.write(outputStream); // 写入文件}workbook.close(); // 关闭工作簿}
}4.2 读取现有的Excel文件
读取Excel文件需要使用Apache POI的读取功能。以下示例展示了如何打开一个现有的Excel文件并读取其内容
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.FileInputStream;
import java.io.IOException;public class ReadExistingExcel {public static void main(String[] args) throws IOException {try (Workbook workbook new XSSFWorkbook(new FileInputStream(existingExcel.xlsx))) {Sheet sheet workbook.getSheetAt(0); // 获取第一个工作表for (Row row : sheet) {for (Cell cell : row) {switch (cell.getCellType()) {case STRING:System.out.println(cell.getStringCellValue());break;case NUMERIC:System.out.println(cell.getNumericCellValue());break;// 可以添加更多case来处理不同类型的单元格}}}}}
}4.3 工作簿Workbook和工作表Sheet的概念
工作簿Workbook代表整个Excel文件可以包含多个工作表。工作表Sheet是工作簿中的一个单独的表格可以包含行和列。
4.4 添加多个工作表
以下示例展示了如何在同一个工作簿中添加多个工作表
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.Sheet;public class AddMultipleSheets {public static void main(String[] args) {Workbook workbook new XSSFWorkbook();Sheet sheet1 workbook.createSheet(Sheet 1);Sheet sheet2 workbook.createSheet(Sheet 2);// 在每个工作表中添加一些数据sheet1.createRow(0).createCell(0).setCellValue(Data in Sheet 1);sheet2.createRow(0).createCell(0).setCellValue(Data in Sheet 2);// 保存工作簿到文件try {workbook.write(new FileOutputStream(multipleSheets.xlsx));} catch (IOException e) {e.printStackTrace();}workbook.close();}
}4.5 设置单元格样式
Apache POI允许你设置单元格的样式包括字体、颜色、边框等。以下示例展示了如何设置单元格的背景颜色和字体样式
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.openxmlformats.schemas.drawingml.x2006.main.CTScheme;import java.io.FileOutputStream;
import java.io.IOException;public class CellStyles {public static void main(String[] args) throws IOException {Workbook workbook new XSSFWorkbook();Sheet sheet workbook.createSheet(Styled Sheet);Row row sheet.createRow(0);Cell cell row.createCell(0);// 设置单元格样式CellStyle style workbook.createCellStyle();XSSFFont font ((XSSFWorkbook) workbook).createFont();font.setFontName(Arial);font.setFontHeightInPoints((short) 14);font.setBold(true);font.setColor(IndexedColors.RED.getIndex());style.setFont(font);cell.setCellValue(Styled Cell);cell.setCellStyle(style);try (FileOutputStream outputStream new FileOutputStream(styledExcel.xlsx)) {workbook.write(outputStream);}workbook.close();}
}第5部分数据读写
5.1 写入数据到单元格
在Excel中写入数据到单元格是基本操作之一。Apache POI提供了多种方法来设置单元格的值包括字符串、数字、布尔值等。以下是一些写入数据的基本示例
5.1.1 写入字符串和数字
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.FileOutputStream;
import java.io.IOException;public class WriteDataToCells {public static void main(String[] args) throws IOException {try (Workbook workbook new XSSFWorkbook();FileOutputStream outputStream new FileOutputStream(writeData.xlsx)) {Sheet sheet workbook.createSheet(Data Sheet);Row row sheet.createRow(0);// 第一列写入字符串Cell cell1 row.createCell(0);cell1.setCellValue(Hello, Apache POI!);// 第二列写入数字Cell cell2 row.createCell(1);cell2.setCellValue(1234.56);workbook.write(outputStream);}}
}5.1.2 写入布尔值和公式
import org.apache.poi.ss.usermodel.*;public class WriteBooleanAndFormula {public static void main(String[] args) {Workbook workbook new XSSFWorkbook();Sheet sheet workbook.createSheet(Boolean and Formula);Row row sheet.createRow(1);// 写入布尔值Cell cell1 row.createCell(0);cell1.setCellValue(true);// 写入公式Cell cell2 row.createCell(1);cell2.setCellFormula(SUM(1, 2, 3, 4));// 此处省略文件写入和关闭工作簿的代码}
}5.2 读取单元格数据
读取单元格数据同样重要Apache POI提供了多种方法来获取不同类型的单元格数据。以下是读取数据的示例
5.2.1 读取不同类型的单元格数据
import org.apache.poi.ss.usermodel.*;import java.io.FileInputStream;
import java.io.IOException;public class ReadDifferentCellTypes {public static void main(String[] args) throws IOException {try (Workbook workbook new XSSFWorkbook(new FileInputStream(readData.xlsx))) {Sheet sheet workbook.getSheetAt(0);Row row sheet.getRow(0);Cell cell1 row.getCell(0);System.out.println(String Cell: cell1.getStringCellValue());Cell cell2 row.getCell(1);System.out.println(Numeric Cell: cell2.getNumericCellValue());// 此处省略其他单元格类型的读取代码}}
}5.3 单元格样式和格式化
单元格样式和格式化是提高Excel文件可读性和专业性的重要手段。以下是设置单元格样式和格式化的示例
5.3.1 设置数字格式和字体样式
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;public class CellStyleAndFormatting {public static void main(String[] args) {Workbook workbook new XSSFWorkbook();Sheet sheet workbook.createSheet(Formatted Data);Row row sheet.createRow(0);Cell cell row.createCell(0);// 设置数字格式cell.setCellValue(12345.67);cell.setCellStyle(createNumberFormat(workbook, #,##0.00));// 设置字体样式CellStyle style createFontStyle(workbook, Bold, IndexedColors.BLACK.getIndex());cell.setCellStyle(style);// 此处省略文件写入和关闭工作簿的代码}private static CellStyle createNumberFormat(Workbook workbook, String format) {CellStyle style workbook.createCellStyle();style.setDataFormat(workbook.createDataFormat().getFormat(format));return style;}private static CellStyle createFontStyle(Workbook workbook, String fontName, short color) {CellStyle style workbook.createCellStyle();XSSFFont font ((XSSFWorkbook) workbook).createFont();font.setFontName(fontName);font.setBold(true);font.setColor(color);style.setFont(font);return style;}
}5.4 合并单元格
合并单元格是Excel中常用的功能用于在多个单元格中显示一个值。以下是合并单元格的示例
import org.apache.poi.ss.usermodel.*;public class MergeCells {public static void main(String[] args) {Workbook workbook new XSSFWorkbook();Sheet sheet workbook.createSheet(Merged Cells);Row row sheet.createRow(0);// 创建单元格并合并Cell cell1 row.createCell(0);cell1.setCellValue(Merged Cell);sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 2)); // 合并第0行第0到2列// 此处省略文件写入和关闭工作簿的代码}
}欢迎关注vx公众号