Как загрузить электронную таблицу в C++
Aspose.Cells FOSS for C++ позволяет загружать и считывать существующие XLSX-таблицы без необходимости Microsoft Excel. Это руководство проходит процесс загрузки книги, доступа к листам и чтения значений ячеек с использованием классов Workbook, Worksheet и Cell.
Пошаговое руководство
Шаг 1: Настройте сборку
Добавьте Aspose.Cells FOSS for C++ в ваш проект CMake:
cmake_minimum_required(VERSION 3.15)
project(LoadSpreadsheet CXX)
set(CMAKE_CXX_STANDARD 17)
add_subdirectory(path/to/Aspose.Cells-FOSS-for-Cpp)
add_executable(LoadSpreadsheet main.cpp)
target_link_libraries(LoadSpreadsheet PRIVATE Aspose.Cells.Foss.Cpp)Шаг 2: Подключите необходимые заголовки
#include "aspose/cells_foss/Workbook.h"
#include "aspose/cells_foss/WorksheetCollection.h"
#include "aspose/cells_foss/Worksheet.h"
#include "aspose/cells_foss/Cell.h"
using namespace Aspose::Cells_FOSS;Шаг 3: Загрузите книгу
Передайте путь к файлу конструктору Workbook, чтобы загрузить существующий файл XLSX:
int main() {
Workbook workbook("input.xlsx");
// workbook is now loaded and ready to use
return 0;
}Шаг 4: Доступ к листу
Используйте Workbook::GetWorksheets() для получения коллекции листов, затем обращайтесь по индексу:
Worksheet& sheet = workbook.GetWorksheets()[0];
std::string name = sheet.GetName();Шаг 5: Чтение значений ячеек
Получайте ячейки по строке адреса и читайте их значения:
std::string text = sheet.GetCells()["A1"].GetStringValue();
double number = sheet.GetCells()["B2"].GetValue().AsDouble();
bool flag = sheet.GetCells()["C3"].GetValue().AsBool();Шаг 6: Сохранить любые изменения
После внесения изменений сохраните обратно в файл:
workbook.Save("output.xlsx");
workbook.Dispose();Распространённые проблемы и решения
Ошибка «Файл не найден» при загрузке Убедитесь, что путь к файлу правильный и файл существует. Используйте абсолютный путь, если рабочий каталог не ясен.
Пустая строка возвращается для числовой ячейки Использовать GetValue().AsDouble() вместо GetStringValue() — GetStringValue() возвращает пустую строку для ячеек, содержащих числа, а не текст.
Книга загружается, но ячейки выглядят пустыми Убедитесь, что файл XLSX не защищён паролем. Aspose.Cells FOSS для C++ не поддерживает зашифрованные файлы.
Ячейка с формулой возвращает неожиданное значение Ячейки с формулами хранят строку формулы, а не вычисленное значение. Формула вычисляется Excel при открытии файла. Используйте GetFormula() для получения текста формулы.
Память не освобождается после обработки Call workbook.Dispose() после завершения всех операций для освобождения неуправляемых ресурсов.
Часто задаваемые вопросы
Могу ли я загрузить несколько листов из одного файла?
Да. Используйте Workbook::GetWorksheets(), чтобы получить доступ ко всем листам и перебрать их по индексу. Вызовите sheet.GetName(), чтобы идентифицировать каждый лист по имени.
Могу ли я загрузить файлы XLSX с несколькими листами и читать данные с конкретного листа?
Да. Получайте доступ к листам по нулевому индексу: workbook.GetWorksheets()[1] возвращает второй лист.
Вызывает ли загрузка файла перерасчёт формул?
Нет. Библиотека загружает значения ячеек и строки формул так, как они сохранены в файле XLSX. Перерасчёт формул происходит в Excel или совместимом просмотрщике при открытии файла.
Что происходит, если путь к файлу содержит символы Unicode?
Передайте путь как std::string с правильной кодировкой для вашей платформы. Пути UTF-8 поддерживаются в Linux и macOS. В Windows убедитесь, что кодировка пути соответствует системной локали.
Безопасно ли загружать один и тот же файл несколько раз одновременно?
Библиотека не является потокобезопасной при одновремённом доступе к тому же экземпляру Workbook. Загружайте отдельные экземпляры Workbook для каждого потока.