Работа с управлением электронными таблицами
Работа с управлением электронными таблицами
В этом руководстве показано, как создавать, загружать, изменять и сохранять книги Excel с использованием Aspose.Cells FOSS для Java. Вы узнаете, как работать с классами 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. Получите Cell по имени (например, "A1") или по индексу строки/столбца, начиная с нуля. Используйте 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) для записи рабочей книги на диск. Формат вывода определяется расширением файла; используйте .xlsx для Excel-рабочих книг.
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. - Явно задавайте имена листов с помощью
setName()послеadd(), чтобы последующий код мог находить их по имени, а не по ненадёжному индексу. - Не полагайтесь на результаты формул сразу после
setFormula(); сначала сохраните или перезагрузите, если вам нужны вычисленные значения в той же сессии.
Общие проблемы
| Проблема | Причина | Исправление |
|---|---|---|
WorkbookLoadException на new Workbook(fileName) | Неверный путь к файлу или файл заблокирован | Проверьте, что путь существует и доступен для чтения; закройте другие приложения, удерживающие файл |
get(index) выбрасывает IndexOutOfBoundsException | Индекс листа превышает getCount() - 1 | Проверьте sheets.getCount() перед доступом; используйте add() для создания нового листа |
Ячейка формулы возвращает пустой getValue() | Формулы не вычисляются автоматически в памяти | Сохраните книгу и перезапустите её, чтобы получить результаты формул |
Выходной файл повреждён после save() | Неправильное расширение файла | Убедитесь, что имя файла заканчивается на .xlsx; формат определяется по расширению |
FAQ
Как переименовать лист?
Получите объект Worksheet по индексу из WorksheetCollection и вызовите setName(name) с новым отображаемым именем:
workbook.getWorksheets().get(0).setName("Sales Data");Как проверить, сколько листов в книге?
Вызовите getCount() на WorksheetCollection, возвращённом Workbook.getWorksheets(), чтобы получить общее количество листов:
int count = workbook.getWorksheets().getCount();Можно ли добавить несколько листов одним вызовом?
Нет. Вызовите worksheets.add(sheetName) один раз на лист. Каждый вызов возвращает индекс только что созданного листа.
Как проверить тип значения ячейки?
Получите Cell по имени и вызовите getType(), который возвращает значение перечисления CellValueType:
Cell cell = cells.get("A1");
System.out.println(cell.getType()); // CellValueType enum valueAPI 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()) |