스프레드시트 관리 작업

스프레드시트 관리 작업

스프레드시트 관리 작업

Workbook 클래스는 Aspose.Cells FOSS for .NET에서 모든 스프레드시트 작업의 루트 객체입니다. WorksheetCollection, 정의된 이름, 저장/로드 생명주기에 접근할 수 있습니다. 이 가이드는 내결함성 로드, 워크시트 조직, 인쇄 레이아웃 구성 및 행/열/셀 레이아웃 제어를 다룹니다.


복구 옵션을 사용한 워크북 로드

Workbook 생성자에 파일 경로를 전달하여 기존 XLSX 파일을 로드합니다. TryRepairPackageTryRepairXmltrue으로 설정된 LoadOptions 객체를 제공하여 경미한 구조적 손상이 있는 파일의 복구를 시도합니다. 파일을 복구할 수 없을 때는 WorkbookLoadException가 발생합니다.

using Aspose.Cells_FOSS;

var options = new LoadOptions
{
    TryRepairPackage = true,
    TryRepairXml = true,
};

try
{
    var wb = new Workbook("data.xlsx", options);
    Console.WriteLine("Sheets: " + wb.Worksheets.Count);
    Console.WriteLine("Cell A1: " + wb.Worksheets[0].Cells["A1"].StringValue);
}
catch (WorkbookLoadException ex)
{
    Console.WriteLine("Unrecoverable: " + ex.Message);
}

워크시트 추가 및 조직

Workbook.WorksheetsWorksheetCollection을 반환합니다. Add(name)를 호출하여 이름으로 새 워크시트를 추가합니다; 이 메서드는 새 시트의 인덱스를 반환합니다. 워크시트는 0부터 시작하는 인덱스 또는 이름으로 접근할 수 있습니다. 파일이 열릴 때 활성화될 탭을 제어하려면 WorksheetCollection.ActiveSheetName을 설정합니다.

using Aspose.Cells_FOSS;

var wb = new Workbook();

// Rename the default sheet
wb.Worksheets[0].Name = "Summary";

// Add sheets
var dataIdx = wb.Worksheets.Add("Data");
var archiveIdx = wb.Worksheets.Add("Archive");

// Set active sheet
wb.Worksheets.ActiveSheetName = "Data";

// Write to sheets by name
wb.Worksheets["Summary"].Cells["A1"].PutValue("Overview total");
wb.Worksheets["Data"].Cells["A1"].PutValue("Raw rows start here");

wb.Save("organised.xlsx");

// Verify
var loaded = new Workbook("organised.xlsx");
Console.WriteLine("Active: " + loaded.Worksheets.ActiveSheetName);
Console.WriteLine("Sheet count: " + loaded.Worksheets.Count);

워크시트 숨기기 및 표시

Worksheet.VisibilityType을(를) VisibilityType.Hidden으로 설정하면 시트를 삭제하지 않고 숨길 수 있습니다. 숨긴 시트는 XLSX 파일에 보존되며 VisibilityType.Visible를 설정하면 다시 표시할 수 있습니다. 탭 색상은 Worksheet.TabColor을(를) 통해 설정합니다.

using Aspose.Cells_FOSS;

var wb = new Workbook();
wb.Worksheets[0].Name = "Visible";
var hiddenIdx = wb.Worksheets.Add("Internal");
var hiddenSheet = wb.Worksheets[hiddenIdx];

hiddenSheet.VisibilityType = VisibilityType.Hidden;
hiddenSheet.Cells["A1"].PutValue("Internal data");

wb.Worksheets["Visible"].TabColor = Color.FromArgb(255, 70, 130, 180);

wb.Save("hidden.xlsx");

페이지 설정 구성

Worksheet.PageSetup은(는) 모든 인쇄 관련 속성을 노출합니다. PageOrientationType을(를) 사용하여 세로와 가로 방향을 전환합니다. PaperSizeType을(를) 사용하여 용지 크기를 선택합니다. PrintArea으로 인쇄 영역을 정의하고, PrintTitleRows/PrintTitleColumns로 반복 행/열을 설정하며, AddHorizontalPageBreakAddVerticalPageBreak으로 수동 페이지 나눔을 추가합니다.

using Aspose.Cells_FOSS;

var wb = new Workbook();
var ws = wb.Worksheets[0];

// Sample data
for (var r = 0; r < 60; r++)
    ws.Cells[r, 0].PutValue("Row " + (r + 1));

var ps = ws.PageSetup;
ps.Orientation = PageOrientationType.Landscape;
ps.PaperSize = PaperSizeType.PaperA4;
ps.LeftMarginInch = 0.5d;
ps.RightMarginInch = 0.5d;
ps.TopMarginInch = 0.75d;
ps.BottomMarginInch = 0.75d;
ps.PrintArea = "$A$1:$H$60";
ps.PrintTitleRows = "$1:$1";
ps.CenterHeader = "Sales Report";
ps.LeftFooter = "Confidential";
ps.RightFooter = "Page &P of &N";
ps.PrintGridlines = true;
ps.CenterHorizontally = true;
ps.AddHorizontalPageBreak(30);

wb.Save("paged.xlsx");

var loaded = new Workbook("paged.xlsx");
Console.WriteLine("Orientation: " + loaded.Worksheets[0].PageSetup.Orientation);
Console.WriteLine("Print area: " + loaded.Worksheets[0].PageSetup.PrintArea);

행 및 열 크기 조정

인덱스로 Worksheet.Cells.Rows에 접근하여 Row 객체를 가져옵니다. Row.Height(포인트 단위)를 설정하여 행 높이를 제어합니다. Row.IsHiddentrue로 설정하면 행을 숨길 수 있습니다. 인덱스로 Worksheet.Cells.Columns에 접근하여 Column 객체를 가져옵니다. Column.Width(문자 단위)와 Column.IsHidden을 설정합니다.

using Aspose.Cells_FOSS;

var wb = new Workbook();
var ws = wb.Worksheets[0];

// Populate data
for (var r = 0; r < 5; r++)
    for (var c = 0; c < 4; c++)
        ws.Cells[r, c].PutValue($"R{r + 1}C{c + 1}");

// Row height and visibility
ws.Cells.Rows[0].Height = 28d;   // Header taller
ws.Cells.Rows[3].IsHidden = true; // Hide row 4

// Column width and visibility
ws.Cells.Columns[0].Width = 22d;
ws.Cells.Columns[3].IsHidden = true;

wb.Save("layout.xlsx");

var loaded = new Workbook("layout.xlsx");
Console.WriteLine("Row 0 height: " + loaded.Worksheets[0].Cells.Rows[0].Height);
Console.WriteLine("Col 0 width: " + loaded.Worksheets[0].Cells.Columns[0].Width);

셀 병합

Worksheet.Cells.Merge(firstRow, firstColumn, totalRows, totalColumns)을(를) 호출하여 연속된 직사각형 블록을 단일 셀로 병합합니다. 병합된 셀은 왼쪽 위 셀의 값을 상속합니다. 로드된 워크북에서 모든 병합 영역을 다시 읽어오려면 Worksheet.Cells.MergedCells을(를) 사용합니다.

using Aspose.Cells_FOSS;

var wb = new Workbook();
var ws = wb.Worksheets[0];

// Title spanning A1:D1
ws.Cells["A1"].PutValue("Quarterly Sales Report");
ws.Cells.Merge(0, 0, 1, 4);

// Section header spanning A3:D3
ws.Cells["A3"].PutValue("Region: North");
ws.Cells.Merge(2, 0, 1, 4);

// Column headers
ws.Cells["A4"].PutValue("Product"); ws.Cells["B4"].PutValue("Q1");
ws.Cells["C4"].PutValue("Q2");      ws.Cells["D4"].PutValue("Q3");

wb.Save("report.xlsx");

var loaded = new Workbook("report.xlsx");
Console.WriteLine("Merged regions: " + loaded.Worksheets[0].Cells.MergedCells.Count);

팁 및 모범 사례

  • Excel에서 파일을 열 때 올바른 탭이 선택되도록 WorksheetCollection.ActiveSheetName를 사용하십시오.
  • 페이지 여백을 인치 단위(LeftMarginInch, TopMarginInch)로 설정하십시오 — 이 값들은 정수가 아니라 부동 소수점 값입니다.
  • 행/열을 숨기는 경우(IsHidden = true) 데이터가 보존되지만, 행을 삭제하면 데이터가 영구적으로 제거됩니다.
  • 각 변경 후가 아니라 배치 작업이 끝날 때 한 번만 Workbook.Save()를 호출하십시오.
  • 데이터 시트에서 셀 병합은 최소화하십시오 — 병합된 영역은 정렬 및 자동 필터가 병합된 영역 전체에서 올바르게 작동하지 못하게 합니다.

일반적인 문제

문제원인해결 방법
WorkbookLoadException 로드 시XLSX 파일의 ZIP 또는 XML 손상LoadOptions.TryRepairPackage = trueTryRepairXml = true를 설정하십시오.
Add(name)가 잘못된 인덱스를 반환합니다시트 이름을 인덱스로 사용Add()가 정수 인덱스를 반환합니다; 해당 인덱스로 새 시트를 접근하십시오
행 높이가 유지되지 않음높이가 0 또는 음수 값으로 설정됨양의 double 값(예: 28d)을 사용하십시오
병합된 셀에 잘못된 값이 표시됩니다값이 병합 범위의 좌상단이 아닌 셀에 기록되었습니다Cells.Merge()를 호출하기 전에 값을 좌상단 셀에 기록하십시오
페이지 나누기가 표시되지 않음AddHorizontalPageBreakSave() 이후에 호출됨호출하기 전에 페이지 나누기를 설정합니다 Save()

FAQ

워크시트를 몇 개 추가할 수 있나요?

XLSX 형식은 워크북당 최대 1024개의 시트를 지원합니다. 실제 제한은 사용 가능한 메모리와 파일 크기에 따라 달라집니다.

워크북 간에 워크시트를 복사할 수 있나요?

현재 API 인터페이스는 교차 워크북 시트 복사를 위한 CopyTo 메서드를 제공하지 않습니다. 두 파일을 로드한 다음 셀 단위로 데이터를 전송하십시오.

워크시트 순서를 어떻게 재배열하나요?

WorksheetCollection 인덱스 접근을 사용하고 시트 이름을 바꿔 논리적 순서를 변경하십시오. 직접적인 위치 이동은 현재 API 인터페이스에 포함되어 있지 않습니다.

PageSetup은(는) 여백에 어떤 단위를 사용합니까?

모든 여백 속성(LeftMarginInch, TopMarginInch 등)은 double 값으로 인치 단위입니다.

Cells.Merge은(는) 기존 셀 데이터를 대체합니까?

왼쪽 상단 셀 값은 보존되고; 다른 병합된 셀들의 값은 삭제됩니다.


API Reference 요약

클래스 / 메서드설명
Workbook루트 객체 — 워크북을 생성, 로드, 저장합니다
Workbook.Worksheets다음 WorksheetCollection을 반환합니다
Workbook.Save(path)워크북을 XLSX 형식으로 저장
WorksheetCollection.Add(name)이름으로 새 워크시트를 추가
WorksheetCollection.ActiveSheetName파일을 열 때 활성 탭
Worksheet.VisibilityTypeVisibilityType.Hidden or Visible
Worksheet.TabColor탭 색상 (Color)
Worksheet.PageSetup인쇄 레이아웃 설정
PageSetup.OrientationPageOrientationType.Landscape 또는 Portrait
PageSetup.PaperSizePaperSizeType.PaperA4, 등.
PageSetup.AddHorizontalPageBreak(row)수평 페이지 구분 삽입
Cells.Rows[index].Height포인트 단위 행 높이
Cells.Rows[index].IsHidden행 숨기기/보이기
Cells.Columns[index].Width문자 단위 열 너비
Cells.Columns[index].IsHidden열 숨기기/보이기
Cells.Merge(row, col, numRows, numCols)직사각형 블록을 병합
Cells.MergedCells시트의 병합된 영역 목록
LoadOptions.TryRepairPackage로드 시 ZIP 복구 시도
LoadOptions.TryRepairXml로드 시 XML 복구 시도
WorkbookLoadException파일을 복구할 수 없을 때 발생함

참조

 한국어