Hoe werk je met XLSX Packaging in C++
Aspose.Cells FOSS voor C++ leest en schrijft Excel-bestanden in het .xlsx Open XML-formaat. Intern regelt de XlsxWorkbookSerializer-klasse het laden en opslaan van alle werkboekonderdelen. Deze gids legt uit hoe je de load/save API gebruikt en wat de verpakkingslaag automatisch beheert.
Stapsgewijze handleiding
Stap 1: Stel de build in
cmake_minimum_required(VERSION 3.15)
project(XlsxPackaging CXX)
set(CMAKE_CXX_STANDARD 17)
add_subdirectory(path/to/Aspose.Cells-FOSS-for-Cpp)
add_executable(XlsxPackaging main.cpp)
target_link_libraries(XlsxPackaging PRIVATE Aspose.Cells.Foss.Cpp)Stap 2: Headers opnemen
#include "aspose/cells_foss/Workbook.h"
#include "aspose/cells_foss/Worksheet.h"
#include "aspose/cells_foss/Cell.h"
using namespace Aspose::Cells_FOSS;Stap 3: Laad een bestaand XLSX-bestand
De Workbook(filePath)-constructor roept intern XlsxWorkbookSerializer::Load aan om alle Open XML-onderdelen uit te pakken:
int main() {
Workbook workbook("input.xlsx");
Worksheet& sheet = workbook.GetWorksheets()[0];
std::string title = sheet.GetCells()["A1"].GetStringValue();
return 0;
}Stap 4: Wijzig het Werkboek
Voer alle cel-, stijl- of structurele wijzigingen uit met de standaard API:
sheet.GetCells()["A1"].PutValue("Updated Title");
sheet.GetCells()["B2"].PutValue(99.0);
sheet.GetCells()["C3"].SetFormula("=B2*2");Stap 5: Sla het Werkboek op
Roep Workbook::Save(fileName) aan om alle Open XML-onderdelen terug te pakken in een XLSX-archief:
workbook.Save("output.xlsx");
workbook.Dispose();Het formaat wordt afgeleid van de .xlsx-extensie. De XlsxWorkbookSerializer::Save-methode verwerkt het automatisch schrijven van de xl/workbook.xml, xl/worksheets/sheet*.xml, xl/styles.xml en xl/sharedStrings.xml onderdelen.
Stap 6: Begrijp wat de verpakkingslaag beheert
U hoeft niet rechtstreeks met de interne verpakkingsmechanismen te communiceren. De serializer verwerkt:
| Part | Beheerd door |
|---|---|
| Werkboekstructuur | XlsxWorkbookProperties |
| Werkbladgegevens | WorksheetXmlMapper |
| Stijlen en lettertypen | XlsxWorkbookStyles |
| Gedeelde strings | SharedStringTableXmlMapper |
| Documenteigenschappen | XlsxDocumentProperties |
| Gedefinieerde namen | XlsxWorkbookDefinedNames |
Veelvoorkomende problemen en oplossingen
Bestand wordt opgeslagen, maar opent niet in Excel Zorg ervoor dat het uitvoerbestandspad de .xlsx extensie. Opslaan met een andere extensie kan een niet-erkend bestand opleveren.
Stijlen verloren na round-trip Apply Cell::SetStyle(style) voor het aanroepen Workbook::Save. Stijlen die na opslaan zijn aangepast, worden niet weggeschreven.
Bestand laadt als leeg Controleer of het bestand niet met een wachtwoord is beveiligd en een geldig XLSX is (niet .xls or .xlsm). De bibliotheek ondersteunt .xlsx alleen.
Gedefinieerde namen ontbreken na opslaan Gebruik Workbook::EnsureUniqueDefinedName() voordat u opslaat om eventuele scopeconflicten op te lossen.
Geheugen niet vrijgegeven Call workbook.Dispose() na het opslaan om alle interne XLSX-verpakkingsbronnen vrij te geven.
Veelgestelde vragen
Kan ik opslaan in andere formaten dan XLSX?
De huidige v0.1-release ondersteunt alleen opslaan naar XLSX. Laden van CSV wordt ondersteund, maar opslaan naar CSV is niet beschikbaar.
Behoudt de bibliotheek de bestaande delen die ik niet heb gewijzigd?
Ja. De serializer maakt een round-trip van alle delen die hij laadt. Niet-gewijzigde werkbladgegevens, stijlen en gedefinieerde namen worden bij het opslaan bewaard.
Kan ik de ruwe XML van een werkmaponderdeel inspecteren?
De XmlDocument::SaveToUtf8()-methode serialiseert een XML-document naar een string. Directe toegang tot XLSX-archiefonderdelen wordt echter niet blootgesteld in de publieke API. Gebruik XmlDocument voor aangepaste XML-verwerking.
Is er een streaming API voor grote bestanden?
Nee. De huidige release laadt de volledige werkmap in het geheugen. Voor zeer grote bestanden kun je overwegen je verwerking op te delen in kleinere werkmappen.
Wat gebeurt er als ik hetzelfde bestand overschrijf dat ik heb geladen?
Dit wordt ondersteund. De bibliotheek schrijft naar een nieuwe interne buffer voordat het bestand op schijf wordt overschreven, zodat opslaan op de plaats de bron niet beschadigt.