.NET에서 테이블 작업하는 방법

.NET에서 테이블 작업하는 방법

이 가이드는 프로그래밍 방식으로 테이블을 구축하고, 포맷하고, 읽는 방법을 보여줍니다. Aspose.Words FOSS for .NET, 사용하는 Table, Row, 그리고 Cell 클래스는 Aspose.Words.Tables 네임스페이스와 함께 DocumentBuilder. 이 가이드는 처음부터 테이블을 구성하고, 셀과 행을 빌드하면서 포맷하고, 테이블 전체 레이아웃 및 AutoFit을 제어하며, 선호 너비를 설정하고, 셀을 병합하고, 로드된 문서에 이미 존재하는 테이블을 읽는 내용을 다룹니다.

단계별 가이드

1단계: 패키지 설치

Aspose.Words FOSS for .NET는 아직 NuGet 패키지를 배포하지 않으므로 대신 소스에서 라이브러리를 빌드하십시오. https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git를 복제한 후 .NET SDK를 사용하여 Release 구성으로 Aspose.Words.sln을 빌드하고, 프로젝트에서 결과물인 Aspose.Words 어셈블리를 참조합니다. 이 라이브러리는 .NET Standard 2.0을 목표로 하므로 .NET Framework 4.6.2+ 및 .NET 6/8/10에서 실행됩니다.


2단계: 필요한 클래스 가져오기

핵심 문서 클래스(Document, DocumentBuilder)에 대한 using Aspose.Words; 지시문과, 이 가이드에서 다루는 테이블 전용 클래스 – Table, Row, Cell, CellFormat, RowFormat, PreferredWidth 및 관련 열거형에 대한 using Aspose.Words.Tables; 지시문을 추가합니다.


3단계: DocumentBuilder를 사용하여 새 테이블 만들기

Document와 DocumentBuilder을 생성하고 그것에 바인드한 뒤, DocumentBuilder.StartTable()를 호출하여 커서 위치에 테이블을 시작합니다. 행의 각 셀마다 DocumentBuilder.InsertCell()을 호출하고, 행을 마무리하려면 DocumentBuilder.EndRow()로 닫습니다. 테이블에 필요한 만큼 행을 반복하고, 전체 테이블은 DocumentBuilder.EndTable()로 닫습니다. 모든 StartTable()에는 대응되는 EndTable()가 필요하고, 모든 행에는 대응되는 EndRow()가 필요합니다. 그렇지 않으면 빌더의 내부 상태와 결과 문서 트리가 손상됩니다.


4단계: 셀과 행을 구축하면서 형식 지정하기

빌더가 만들려는 셀과 행에 서식을 적용하려면 InsertCell() 또는 EndRow()을 호출하기 전에 DocumentBuilder.CellFormat와 DocumentBuilder.RowFormat을 설정합니다 — 이 두 속성은 새 콘텐츠에 대한 템플릿 역할을 하며 이미 삽입된 셀에는 사후 적용되지 않습니다. CellFormat는 Borders, Shading, Width, WrapText, FitText, HorizontalMerge, VerticalMerge, VerticalAlignment, PreferredWidth와 네 개의 패딩 속성(LeftPadding, RightPadding, TopPadding, BottomPadding)을 노출하며, 이들은 모두 SetPaddings()로 한 번에 설정할 수 있습니다. RowFormat는 Borders, Height, HeightRule, AllowBreakAcrossPages, HeadingFormat를 노출합니다. 다음 행이나 셀에 새 값을 설정하기 전에 기본값으로 재설정하려면 CellFormat.ClearFormatting() 또는 RowFormat.ClearFormatting()을 호출하십시오.


5단계: 테이블 전체 레이아웃 및 AutoFit 설정

테이블이 존재하면, Table 객체에 직접 레이아웃 속성을 설정합니다: Alignment (TableAlignment), Bidi, LeftIndent, PreferredWidth, Style, StyleIdentifier, StyleName, StyleOptions (TableStyleOptions), 그리고 TextWrapping. 전체 테이블에 동일한 테두리 스타일, 두께, 색상을 적용하려면 Table.SetBorders()를 호출하고, 단일 면만 설정하려면 Table.SetBorder()을 사용합니다; ClearBorders()와 ClearShading()는 이를 초기화합니다. 선택된 동작에 따라 테이블과 셀의 크기를 조정하려면 Table.AutoFit(AutoFitBehavior)을 호출합니다 — 구조적 편집 후에도 다시 호출해야 합니다. 이는 실행 시점의 테이블 상태만을 반영하며 지속적으로 적용되지 않습니다.


6단계: 기본 및 셀 너비 설정

사용 가능한 페이지 너비에 맞게 레이아웃이 자동으로 조정되는 경우에는 정적 팩토리 메서드 PreferredWidth.FromPercent()를 사용하고, 고정 너비인 경우에는 PreferredWidth.FromPoints()을 사용하여 너비 값을 생성합니다; PreferredWidthType는 특정 PreferredWidth이 어떤 종류의 값(Auto, Percent, Points)을 가지고 있는지 보고합니다. 결과를 전체 테이블에 적용하려면 Table.PreferredWidth에, 개별 셀에 적용하려면 CellFormat.PreferredWidth에 할당합니다.


단계 7: 셀 병합

병합에 참여해야 할 셀에 CellFormat.HorizontalMerge 또는 CellFormat.VerticalMerge을 설정하여(두 경우 모두 CellMerge 유형) 셀을 병합된 상태로 표시합니다. 셀을 명시적으로 표시하지 않고 너비를 맞춰 겉보기만 병합된 경우, Table.ConvertToHorizontallyMergedCells()을 호출하여 해당 시각적 배열을 실제 CellMerge 상태의 셀로 변환합니다. CellVerticalAlignment는 병합 여부와 무관하게 셀 내에서 콘텐츠가 수직으로 정렬되는 방식을 제어합니다.


단계 8: 기존 문서에서 표 읽기

로드된 문서에 이미 존재하는 표를 작업하려면, 새로운 표를 만들지 말고 Body.Tables(또는 다른 Story의 Tables 속성) — TableCollection — 을 읽어야 합니다. Table.Rows는 RowCollection를 반환하고, Row.Cells은 CellCollection를 반환합니다; 이 세 가지 컬렉션 유형 모두 프로그래밍 방식 편집을 위해 Add(), Insert(), Remove(), RemoveAt(), Contains(), IndexOf()을 지원합니다. 행이나 셀을 삭제한 후에는 Table.EnsureMinimum(), Row.EnsureMinimum(), 또는 Cell.EnsureMinimum()을 호출하여 노드가 Word가 기대하는 최소 유효 구조—빈 행, 빈 셀, 또는 빈 단락—을 유지하도록 합니다.

일반적인 문제 및 해결 방법

저장된 문서가 손상된 것처럼 보이거나 저장 중 오류가 발생합니다. 행이나 테이블 자체가 절대 닫히지 않았습니다. 항상 쌍을 이루세요 DocumentBuilder.StartTable() 마지막과 함께 EndTable(), 그리고 모든 행을 로 닫으세요 EndRow() 다음으로 이동하거나 테이블을 종료하기 전에.

새 셀은 내가 설정한 서식을 가져오지 않습니다 CellFormat and RowFormat 는 에서 변경되었습니다 DocumentBuilder 영향을 받은 셀들이 이미 삽입된 후. 설정 DocumentBuilder.CellFormat / RowFormat 전에 InsertCell() or EndRow() 원하시는 형식의 콘텐츠를 생성하는 호출.

표는 내용을 편집한 후 내가 기대하는 방식으로 크기가 조정되지 않습니다. Table.AutoFit(AutoFitBehavior) 호출 시점의 표 구조만 반영합니다. 행, 셀 또는 내용을 추가하거나 제거하는 등 구조 편집을 한 후 레이아웃을 다시 맞춰야 한다면 다시 호출하십시오.

병합된 것처럼 보이는 셀은 다시 읽을 때 별개의 셀로 동작합니다. 셀은 너비만으로 매칭되었고, 플래그가 지정되지 않았습니다. CellMerge. 호출 Table.ConvertToHorizontallyMergedCells(), 또는 설정 CellFormat.HorizontalMerge / VerticalMerge 병합되어야 하는 셀에 명시적으로 적용하십시오.

행이나 셀을 삭제하면 표가 잘못된 상태가 됩니다 Word는 모든 Table, Row, 그리고 Cell 최소한의 유효 구조를 유지하도록 합니다. 프로그래밍 방식으로 콘텐츠를 제거한 후, 호출하십시오 EnsureMinimum() 방금 수정된 노드에 대해.

자주 묻는 질문

기존 테이블을 편집하는 대신 처음부터 테이블을 만드는 방법은?

다음 DocumentBuilder를 사용하십시오: StartTable()을 호출하고, 행의 각 셀에 대해 InsertCell()을 수행한 다음, 행을 닫으려면 EndRow()을 사용하고, 추가 행에 대해 반복하며, 테이블을 닫으려면 EndTable()을 사용하십시오.

로드된 문서에 이미 존재하는 테이블을 어떻게 가져오나요?

관심 있는 섹션의 Body에 있는 Tables 속성( TableCollection )을 읽거나, 헤더나 푸터와 같은 다른 Story에서도 읽으십시오.

표를 고정 너비가 아니라 페이지 너비의 백분율로 설정하려면 어떻게 해야 하나요?

Table.PreferredWidth = PreferredWidth.FromPercent(value)을(를) PreferredWidth.FromPoints(value) 대신 할당합니다.

SetBorders와 SetBorder으로 테두리를 설정하는 것의 차이점은 무엇인가요?

Table.SetBorders()은(는) 표의 모든 테두리에 한 번에 하나의 선 스타일, 두께 및 색상을 적용합니다; Table.SetBorder()은(는) 개별 면을 설정하여 각 면이 서로 다른 서식을 가질 수 있도록 합니다.

셀이나 행을 재사용하기 전에 서식을 초기화하려면 어떻게 해야 하나요?

셀의 CellFormat에 CellFormat.ClearFormatting()을 호출하거나, 행의 RowFormat에 RowFormat.ClearFormatting()을 호출합니다.

참조

 한국어