上一篇
Java中复制Excel文件可以使用Apache POI库,使用
FileInputStream读取源Excel文件,然后使用
FileOutputStream将内容写入目标文件。
Java中复制Excel文件或数据,通常涉及到使用Apache POI库,Apache POI是一个强大的Java库,用于读取和写入Microsoft Office格式的文件,包括Excel(.xls和.xlsx),以下是详细的步骤和示例代码,展示如何使用Apache POI来复制Excel文件。
添加Apache POI依赖
你需要在你的项目中添加Apache POI的依赖,如果你使用的是Maven项目,可以在pom.xml文件中添加以下依赖:

<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version> <!-请根据实际情况选择版本 -->
</dependency>
复制Excel文件
假设你有一个Excel文件source.xlsx,你想要复制它并生成一个新的文件copy.xlsx,以下是实现这一功能的Java代码:

import org.apache.poi.ss.usermodel.;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.;
public class ExcelCopyExample {
public static void main(String[] args) {
String sourceFilePath = "path/to/source.xlsx";
String copyFilePath = "path/to/copy.xlsx";
try {
// 读取源Excel文件
FileInputStream sourceFileInputStream = new FileInputStream(sourceFilePath);
Workbook sourceWorkbook = new XSSFWorkbook(sourceFileInputStream);
// 创建新的工作簿用于复制
Workbook copyWorkbook = new XSSFWorkbook();
// 复制所有工作表
for (int i = 0; i < sourceWorkbook.getNumberOfSheets(); i++) {
Sheet sourceSheet = sourceWorkbook.getSheetAt(i);
Sheet copySheet = copyWorkbook.createSheet(sourceSheet.getSheetName());
// 复制行和单元格
for (Row sourceRow : sourceSheet) {
Row copyRow = copySheet.createRow(sourceRow.getRowNum());
for (Cell sourceCell : sourceRow) {
Cell copyCell = copyRow.createCell(sourceCell.getColumnIndex(), sourceCell.getCellType());
switch (sourceCell.getCellType()) {
case STRING:
copyCell.setCellValue(sourceCell.getStringCellValue());
break;
case NUMERIC:
copyCell.setCellValue(sourceCell.getNumericCellValue());
break;
case BOOLEAN:
copyCell.setCellValue(sourceCell.getBooleanCellValue());
break;
case FORMULA:
copyCell.setCellFormula(sourceCell.getCellFormula());
break;
default:
copyCell.setBlank();
break;
}
}
}
}
// 写入目标文件
FileOutputStream copyFileOutputStream = new FileOutputStream(copyFilePath);
copyWorkbook.write(copyFileOutputStream);
// 关闭资源
sourceFileInputStream.close();
copyFileOutputStream.close();
sourceWorkbook.close();
copyWorkbook.close();
System.out.println("Excel文件复制成功!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
代码解释
- 读取源文件:使用
FileInputStream读取源Excel文件,并通过XSSFWorkbook加载工作簿。 - 创建新工作簿:使用
XSSFWorkbook创建一个新的工作簿,用于存储复制的内容。 - 复制工作表:遍历源工作簿中的所有工作表,并在新工作簿中创建对应的工作表。
- 复制行和单元格:遍历源工作表中的每一行和每一单元格,将内容复制到新工作表中,根据单元格的类型(字符串、数字、布尔值、公式等),设置相应的值。
- 写入目标文件:使用
FileOutputStream将新工作簿写入目标文件。 - 关闭资源:关闭所有打开的文件流和工作簿,以释放资源。
注意事项
- 文件路径:确保
sourceFilePath和copyFilePath指向正确的文件路径。 - 内存管理:对于大型Excel文件,复制操作可能会消耗较多内存,建议在处理大文件时进行适当的内存管理。
- 单元格类型:在复制单元格时,需要根据单元格的类型设置相应的值,以确保数据的准确性。
相关问答FAQs
Q1: 如何确保复制的Excel文件中的公式仍然有效?
A1: 在复制单元格时,如果单元格包含公式,可以使用copyCell.setCellFormula(sourceCell.getCellFormula())来保留公式,这样,复制后的Excel文件中的公式仍然会生效。
Q2: 如果源Excel文件中有多个工作表,复制时是否会保留所有工作表?

