使用电子表格管理

使用电子表格管理

使用电子表格管理

本指南展示了如何使用 Aspose.Cells FOSS for Java 创建、加载、修改和保存 Excel 工作簿。您将学习如何使用 Workbook、WorksheetCollection、Worksheet、Cells 和 Cell 类进行端到端的电子表格管理。


创建新工作簿

使用无参构造函数创建空工作簿。将自动添加一个名为 Sheet1 的空白工作表。

import com.aspose.cells.foss.Workbook;
import com.aspose.cells.foss.WorksheetCollection;
import com.aspose.cells.foss.Worksheet;

Workbook workbook = new Workbook();
WorksheetCollection sheets = workbook.getWorksheets();
Worksheet sheet = sheets.get(0);
System.out.println("Sheet name: " + sheet.getName()); // Sheet1

从文件加载工作簿

将文件路径传递给 Workbook(fileName) 构造函数,以打开现有的 .xlsx 或 .ods 文件。当需要控制格式检测或密码处理时,使用 Workbook(fileName, options) 提供 LoadOptions。

import com.aspose.cells.foss.Workbook;
import com.aspose.cells.foss.LoadOptions;

// Simple load
Workbook workbook = new Workbook("data/report.xlsx");

// Load with explicit options
LoadOptions opts = new LoadOptions();
Workbook workbookWithOpts = new Workbook("data/report.xlsx", opts);

从流加载工作簿

Workbook(stream) 和 Workbook(stream, options) 接受任何 java.io.InputStream。当文件来自网络资源、数据库 BLOB 或内存字节数组时,这非常有用。

import com.aspose.cells.foss.Workbook;
import java.io.FileInputStream;
import java.io.InputStream;

try (InputStream is = new FileInputStream("data/template.xlsx")) {
    Workbook workbook = new Workbook(is);
    System.out.println("Worksheets: " + workbook.getWorksheets().getCount());
}

访问和管理工作表

Workbook.getWorksheets() 返回一个 WorksheetCollection。可通过索引或名称检索工作表,遍历所有工作表,并根据需要添加或删除工作表。

import com.aspose.cells.foss.Workbook;
import com.aspose.cells.foss.WorksheetCollection;
import com.aspose.cells.foss.Worksheet;

Workbook workbook = new Workbook();
WorksheetCollection sheets = workbook.getWorksheets();

// Access by index
Worksheet first = sheets.get(0);
System.out.println(first.getName()); // Sheet1

// Add a named sheet
int idx = sheets.add("Summary");
Worksheet summary = sheets.get(idx);
summary.setName("Summary");

// Iterate all sheets
for (Worksheet ws : sheets) {
    System.out.println("Sheet: " + ws.getName());
}

// Remove a sheet by name
sheets.removeAt("Sheet1");
System.out.println("Remaining sheets: " + sheets.getCount());

读取和写入单元格值

使用 Worksheet.getCells() 导航到单元格,它返回一个 Cells 集合。可通过名称(例如 "A1")或零基行/列索引检索 Cell。使用 putValue() 写入原始值,使用 getValue() / getStringValue() 读取它们。

import com.aspose.cells.foss.Workbook;
import com.aspose.cells.foss.Worksheet;
import com.aspose.cells.foss.Cells;
import com.aspose.cells.foss.Cell;

Workbook workbook = new Workbook();
WorksheetCollection sheets = workbook.getWorksheets();
Worksheet sheet = sheets.get(0);
Cells cells = sheet.getCells();

// Write values
cells.get("A1").putValue("Product");
cells.get("B1").putValue("Units Sold");

// Write by row/column index (0-based)
Cell a2 = cells.get(1, 0);
a2.putValue("Widget A");

Cell b2 = cells.get(1, 1);
b2.putValue(1200);

// Read back
System.out.println(a2.getStringValue()); // Widget A
System.out.println(b2.getValue());       // 1200

设置单元格公式

通过 setFormula() 将公式字符串分配给单元格。Aspose.Cells 在工作簿保存时或显式触发计算时评估公式。

import com.aspose.cells.foss.Workbook;
import com.aspose.cells.foss.Cells;
import com.aspose.cells.foss.Cell;

Workbook workbook = new Workbook();
WorksheetCollection sheets = workbook.getWorksheets();
Cells cells = sheets.get(0).getCells();

cells.get("A1").putValue(100);
cells.get("A2").putValue(200);

Cell a3 = cells.get("A3");
a3.setFormula("=SUM(A1:A2)");
System.out.println("Formula: " + a3.getFormula()); // =SUM(A1:A2)

保存工作簿

使用 Workbook.save(fileName) 将工作簿写入磁盘。输出格式由文件扩展名决定;对于 Excel 工作簿,请使用 .xlsx。

import com.aspose.cells.foss.Workbook;

Workbook workbook = new Workbook();
workbook.getWorksheets().get(0).getCells().get("A1").putValue("Hello");

// Save to file -- format inferred from .xlsx extension
workbook.save("output/result.xlsx");

释放资源

Workbook 实现了 AutoCloseable。使用 try-with-resources 代码块,以确保工作簿的内部资源在使用后能够及时释放。

import com.aspose.cells.foss.Workbook;

try (Workbook workbook = new Workbook("data/large.xlsx")) {
    workbook.save("output/large_modified.xlsx");
}
// workbook.close() called automatically

提示与最佳实践

  • 对于大文件,请始终使用 try-with-resources(try (Workbook wb = new Workbook(...)))以避免文件句柄保持打开状态。
  • 在热点循环中,优先使用 cells.get(row, column) 而不是 cells.get(cellName);整数重载可避免重复的单元格名称解析。
  • 在按索引访问工作表之前调用 workbook.getWorksheets().getCount(),以避免 IndexOutOfBoundsException。
  • 在 add() 之后使用 setName() 明确命名工作表,以便下游代码能够通过名称而非脆弱的索引来查找它们。
  • 不要在 setFormula() 之后立即依赖公式结果;如果在同一会话中需要计算值,请先保存或重新加载。

常见问题

问题原因修复
WorkbookLoadException 在 new Workbook(fileName) 上文件路径不正确或文件被锁定验证路径是否存在且可读;关闭占用该文件的其他应用程序
get(index) 抛出 IndexOutOfBoundsException工作表索引超出 getCount() - 1在访问之前检查 sheets.getCount();使用 add() 创建新工作表
公式单元格返回空的 getValue()公式未在内存中自动计算保存工作簿并重新加载以获取公式结果
输出文件在 save() 之后损坏错误的文件扩展名确保文件名以 .xlsx 结尾;格式根据扩展名推断

FAQ

如何重命名工作表?

通过索引从 WorksheetCollection 检索 Worksheet 对象,并使用新的显示名称调用 setName(name):

workbook.getWorksheets().get(0).setName("Sales Data");

如何检查工作簿中有多少工作表?

对 Workbook.getWorksheets() 返回的 WorksheetCollection 调用 getCount(),以获取工作表的总数:

int count = workbook.getWorksheets().getCount();

我可以一次调用添加多个工作表吗?

No. 每张工作表调用一次 worksheets.add(sheetName)。每次调用返回新创建工作表的索引。

我该如何检查单元格值的类型?

通过名称检索 Cell 并调用 getType(),它返回一个 CellValueType 枚举值:

Cell cell = cells.get("A1");
System.out.println(cell.getType()); // CellValueType enum value

API Reference 摘要

类 / 方法描述
Workbook()创建一个包含一个空白工作表的空工作簿
Workbook(fileName)从文件路径加载工作簿
Workbook(stream)从InputStream加载工作簿
Workbook(fileName, options)使用LoadOptions加载工作簿
Workbook.getWorksheets()返回 WorksheetCollection
Workbook.save(fileName)保存到文件(根据扩展名推断格式)
Workbook.save(stream, format)保存到流,使用显式的 SaveFormat
WorksheetCollection.get(index)返回零基索引的工作表
WorksheetCollection.get(name)按名称返回工作表
WorksheetCollection.add(sheetName)添加具名工作表;返回其索引
WorksheetCollection.getCount()工作簿中的工作表数量
WorksheetCollection.removeAt(sheetName)按名称删除工作表
Worksheet.getCells()返回此工作表的 Cells 集合
Worksheet.getName() / setName()获取或设置工作表标签名称
Cells.get(cellName)通过名称返回一个 Cell(例如 “A1”)
Cells.get(row, column)通过基于零的行/列返回一个 Cell
Cell.putValue(value)向单元格写入值
Cell.getValue()将单元格值读取为 Object
Cell.getStringValue()将单元格值读取为一个 String
Cell.setFormula(formula)设置一个公式字符串(例如 "=SUM(A1:A2)")
LoadOptions工作簿加载的配置
SaveFormat格式常量的枚举(格式从文件扩展名推断;未传递给 save())

另请参阅

 中文