Jak załadować arkusz kalkulacyjny w C++
Aspose.Cells FOSS for C++ umożliwia ładowanie i odczytywanie istniejących arkuszy XLSX bez wymogu posiadania Microsoft Excel. Ten przewodnik prowadzi przez ładowanie skoroszytu, dostęp do arkuszy i odczyt wartości komórek przy użyciu klas Workbook, Worksheet i Cell.
Przewodnik krok po kroku
Krok 1: Skonfiguruj kompilację
Dodaj Aspose.Cells FOSS for C++ do swojego projektu 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)Krok 2: Dołącz wymagane nagłówki
#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;Krok 3: Załaduj skoroszyt
Przekaż ścieżkę do pliku do konstruktora Workbook, aby wczytać istniejący plik XLSX:
int main() {
Workbook workbook("input.xlsx");
// workbook is now loaded and ready to use
return 0;
}Krok 4: Dostęp do arkusza
Użyj Workbook::GetWorksheets(), aby pobrać kolekcję arkuszy, a następnie uzyskaj dostęp według indeksu:
Worksheet& sheet = workbook.GetWorksheets()[0];
std::string name = sheet.GetName();Krok 5: Odczytaj wartości komórek
Uzyskaj dostęp do komórek za pomocą ciągu adresu i odczytaj ich wartości:
std::string text = sheet.GetCells()["A1"].GetStringValue();
double number = sheet.GetCells()["B2"].GetValue().AsDouble();
bool flag = sheet.GetCells()["C3"].GetValue().AsBool();Krok 6: Zapisz wszelkie zmiany
Po wprowadzeniu zmian, zapisz ponownie do pliku:
workbook.Save("output.xlsx");
workbook.Dispose();Typowe problemy i rozwiązania
Błąd: plik nie został znaleziony podczas ładowania Sprawdź, czy ścieżka do pliku jest prawidłowa i plik istnieje. Użyj ścieżki bezwzględnej, jeśli katalog roboczy jest niepewny.
Zwrócono pusty ciąg dla komórki numerycznej Użyj GetValue().AsDouble() zamiast GetStringValue() — GetStringValue() zwraca pusty ciąg dla komórek, które zawierają liczby zamiast tekstu.
Skoroszyt ładuje się, ale komórki wyglądają na puste Upewnij się, że plik XLSX nie jest zabezpieczony hasłem. Aspose.Cells FOSS dla C++ nie obsługuje zaszyfrowanych plików.
Komórka formuły zwraca nieoczekiwaną wartość Komórki formuł przechowują ciąg formuły, a nie obliczoną wartość. Formuła jest oceniana przez Excel podczas otwierania pliku. Użyj GetFormula() aby pobrać tekst formuły.
Pamięć nie jest zwalniana po przetwarzaniu Call workbook.Dispose() po zakończeniu wszystkich operacji, aby zwolnić niezarządzane zasoby.
Najczęściej zadawane pytania
Czy mogę wczytać wiele arkuszy z jednego pliku?
Tak. Użyj Workbook::GetWorksheets(), aby uzyskać dostęp do wszystkich arkuszy i iterować po indeksie. Wywołaj sheet.GetName(), aby zidentyfikować każdy arkusz po nazwie.
Czy mogę wczytać pliki XLSX z wieloma arkuszami i odczytać z konkretnego?
Tak. Uzyskaj dostęp do arkuszy według indeksu zerowego: workbook.GetWorksheets()[1] zwraca drugi arkusz.
Czy wczytanie pliku wyzwala przeliczanie formuł?
Nie. Biblioteka wczytuje wartości komórek i ciągi formuł tak, jak są zapisane w pliku XLSX. Przeliczanie formuł odbywa się w Excelu lub kompatybilnym czytniku w momencie otwarcia pliku.
Co się stanie, jeśli ścieżka do pliku zawiera znaki Unicode?
Przekaż ścieżkę jako std::string z odpowiednim kodowaniem dla Twojej platformy. Ścieżki UTF-8 są obsługiwane w systemach Linux i macOS. W systemie Windows upewnij się, że kodowanie ścieżki odpowiada ustawieniom regionalnym systemu.
Czy bezpieczne jest jednoczesne wielokrotne wczytywanie tego samego pliku?
Biblioteka nie jest bezpieczna wątkowo przy jednoczesnym dostępie do tej samej instancji Workbook. Ładuj oddzielne instancje Workbook na każdy wątek.