C++에서 XLSX 패키징 작업하기

C++에서 XLSX 패키징 작업하기

Aspose.Cells FOSS for C++는 .xlsx Open XML 형식으로 Excel 파일을 읽고 씁니다. 내부적으로 XlsxWorkbookSerializer 클래스는 모든 워크북 부품의 로드와 저장을 조정합니다. 이 가이드는 로드/저장 API 사용 방법과 패키징 계층이 자동으로 관리하는 내용을 설명합니다.

단계별 가이드

1단계: 빌드 설정

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)

2단계: 헤더 포함

#include "aspose/cells_foss/Workbook.h"
#include "aspose/cells_foss/Worksheet.h"
#include "aspose/cells_foss/Cell.h"

using namespace Aspose::Cells_FOSS;

3단계: 기존 XLSX 파일 로드

The Workbook(filePath) 생성자는 내부적으로 XlsxWorkbookSerializer::Load를 호출하여 모든 Open XML 파트를 압축 해제합니다:

int main() {
    Workbook workbook("input.xlsx");
    Worksheet& sheet = workbook.GetWorksheets()[0];
    std::string title = sheet.GetCells()["A1"].GetStringValue();
    return 0;
}

4단계: 워크북 수정

표준 API를 사용하여 셀, 스타일 또는 구조적 변경을 수행하십시오:

sheet.GetCells()["A1"].PutValue("Updated Title");
sheet.GetCells()["B2"].PutValue(99.0);
sheet.GetCells()["C3"].SetFormula("=B2*2");

5단계: 워크북 저장

모든 Open XML 파트를 XLSX 아카이브에 다시 패킹하려면 Workbook::Save(fileName)를 호출하십시오:

workbook.Save("output.xlsx");
workbook.Dispose();

형식은 .xlsx 확장자를 기준으로 추론됩니다. XlsxWorkbookSerializer::Save 메서드는 xl/workbook.xml, xl/worksheets/sheet*.xml, xl/styles.xml, xl/sharedStrings.xml 파트를 자동으로 기록합니다.


6단계: 패키징 레이어가 관리하는 내용 이해

패키징 내부와 직접 상호 작용할 필요가 없습니다. 직렬 변환기가 다음을 처리합니다:

Part관리자
통합 문서 구조XlsxWorkbookProperties
워크시트 데이터WorksheetXmlMapper
스타일 및 글꼴XlsxWorkbookStyles
공유 문자열SharedStringTableXmlMapper
문서 속성XlsxDocumentProperties
정의된 이름XlsxWorkbookDefinedNames

일반적인 문제 및 해결 방법

파일은 저장되지만 Excel에서 열리지 않습니다 출력 파일 경로에 사용되는 .xlsx 확장자. 다른 확장자로 저장하면 인식되지 않는 파일이 생성될 수 있습니다.

라운드 트립 후 스타일이 손실됩니다 Apply Cell::SetStyle(style) 호출하기 전에 Workbook::Save. 저장 후 수정된 스타일이 기록되지 않습니다.

파일이 비어 있는 상태로 로드됩니다 파일이 암호로 보호되지 않았으며 유효한 XLSX인지 확인하십시오 (아닌 .xls or .xlsm). 라이브러리는 지원합니다 .xlsx 만.

저장 후 정의된 이름이 누락됩니다 사용 Workbook::EnsureUniqueDefinedName() 저장하기 전에 범위 충돌을 해결합니다.

메모리가 해제되지 않음 Call workbook.Dispose() 저장 후 모든 내부 XLSX 패키징 리소스를 해제합니다.

자주 묻는 질문

XLSX 이외의 형식으로 저장할 수 있나요?

현재 v0.1 릴리스는 XLSX 저장만 지원합니다. CSV 로드는 지원하지만 CSV 저장은 제공되지 않습니다.

라이브러리가 내가 수정하지 않은 기존 파트를 보존합니까?

예. 직렬 변환기는 로드한 모든 파트를 라운드트립합니다. 수정되지 않은 워크시트 데이터, 스타일 및 정의된 이름은 저장 시 보존됩니다.

워크북 파트의 원시 XML을 검사할 수 있나요?

XmlDocument::SaveToUtf8() 메서드는 XML 문서를 문자열로 직렬화합니다. 그러나 XLSX 아카이브 파트에 대한 직접 접근은 공개 API에서 노출되지 않습니다. 사용자 정의 XML 처리를 위해 XmlDocument을 사용하세요.

대용량 파일을 위한 스트리밍 API이 있나요?

아니요. 현재 릴리스는 전체 워크북을 메모리로 로드합니다. 매우 큰 파일의 경우, 처리를 더 작은 워크북으로 나누는 것을 고려하세요.

로드한 동일한 파일에 저장하면 어떻게 되나요?

이것은 지원됩니다. 라이브러리는 파일을 디스크에 덮어쓰기 전에 새로운 내부 버퍼에 기록하므로 제자리 저장이 원본을 손상시키지 않습니다.

참조

 한국어