.NET에서 스프레드시트 로드하는 방법
Aspose.Cells FOSS for .NET은 단일 생성자 호출만으로 기존 XLSX 스프레드시트를 열 수 있게 하며, 경미한 구조적 손상이 있는 파일에 대해 내결함성 로딩 경로를 제공합니다. NuGet에서 dotnet add package Aspose.Cells_FOSS를 사용하여 라이브러리를 설치하십시오.
단계별 가이드
1단계: 패키지 설치
dotnet add package Aspose.Cells_FOSS패키지가 존재하는지 확인하십시오:
dotnet list package | grep Aspose.Cells_FOSS2단계: 네임스페이스 가져오기
C# 파일 상단에 이 지시문을 추가하십시오:
using Aspose.Cells_FOSS;3단계: XLSX 파일 로드
Workbook 생성자에 파일 경로를 전달하십시오. 라이브러리는 XLSX 파일을 읽고 메모리 내 워크북 객체를 채웁니다.
using Aspose.Cells_FOSS;
var wb = new Workbook("data.xlsx");
Console.WriteLine("Loaded " + wb.Worksheets.Count + " sheet(s)");
Console.WriteLine("First sheet: " + wb.Worksheets[0].Name);
Console.WriteLine("A1 value: " + wb.Worksheets[0].Cells["A1"].StringValue);4단계: 결함 허용 복구 옵션으로 로드
ZIP 또는 XML 손상이 있을 수 있는 파일의 경우, LoadOptions 객체를 제공하고 TryRepairPackage와 TryRepairXml을 true로 설정합니다. 파일을 복구할 수 없는 경우를 대비해 try/catch 안에 호출을 감싸서 WorkbookLoadException을 사용합니다.
using Aspose.Cells_FOSS;
var opts = new LoadOptions
{
TryRepairPackage = true,
TryRepairXml = true,
};
try
{
var wb = new Workbook("possibly-corrupt.xlsx", opts);
Console.WriteLine("Loaded successfully");
}
catch (WorkbookLoadException ex)
{
Console.WriteLine("Unrecoverable file: " + ex.Message);
}5단계: 로드 진단 확인
로드한 후, Workbook.LoadDiagnostics을 검사하여 라이브러리가 수리를 적용했는지 확인하십시오. HasRepairs은 수리가 적용된 경우 true이며, 데이터가 폐기될 수 있는 경우 HasDataLossRisk은 true입니다. 개별 DiagnosticEntry 레코드에 접근하려면 Issues를 반복하십시오.
using Aspose.Cells_FOSS;
var opts = new LoadOptions { TryRepairPackage = true, TryRepairXml = true };
var wb = new Workbook("file.xlsx", opts);
var diag = wb.LoadDiagnostics;
if (diag.HasRepairs)
{
Console.WriteLine("Repairs were applied. Data loss risk: " + diag.HasDataLossRisk);
foreach (var entry in diag.Issues)
Console.WriteLine($" [{entry.Severity}] {entry.Code}: {entry.Message}");
}
else
{
Console.WriteLine("File loaded cleanly — no repairs.");
}6단계: 워크시트 데이터에 액세스
로드한 후에는 인덱스 또는 이름으로 워크시트를 액세스하고, Cell.StringValue 또는 Cell.Value를 사용하여 셀 값을 읽습니다.
using Aspose.Cells_FOSS;
var wb = new Workbook("data.xlsx");
// By index
var sheet = wb.Worksheets[0];
Console.WriteLine("Sheet: " + sheet.Name);
Console.WriteLine("A1: " + sheet.Cells["A1"].StringValue);
// By name
var named = wb.Worksheets["Report"];
if (named != null)
Console.WriteLine("Report!B2: " + named.Cells["B2"].StringValue);일반적인 문제 및 해결책
WorkbookLoadException은(는) 복구 옵션을 사용해도 발생합니다.
이는 파일의 ZIP 구조가 너무 손상되어 복구 알고리즘으로 복구할 수 없음을 의미합니다. 파일이 유효한 ZIP 아카이브인지 확인하십시오(예: unzip -t file.xlsx을(를) 시도해 보세요). 파일이 완전히 손상된 경우, 어떤 라이브러리로도 열 수 없습니다.
로드된 워크북에 예상보다 시트가 적습니다.
복구 작업 중에 누락된 부분을 참조하던 워크시트가 삭제되었을 수 있습니다. LoadDiagnostics.Issues에서 DataLossRisk = true가 포함된 항목을 확인하고 사용자에게 알리세요.
로드 후 셀 값이 비어 있습니다.
올바른 워크시트 인덱스 또는 이름에 접근하고 있는지 확인하십시오. wb.Worksheets.Count을 사용하여 예상되는 시트 수를 확인하십시오. 또한 XLSX 파일이 비밀번호로 보호되어 있지 않은지 확인하십시오(비밀번호로 보호된 파일은 현재 지원되지 않습니다).
Workbook 생성자가 큰 파일에서 멈춥니다.
생성자는 동기식이며 전체 파일을 메모리로 로드합니다. 매우 큰 파일의 경우, UI가 응답성을 유지하도록 로드를 백그라운드 스레드에서 실행하십시오.
DiagnosticEntry.Severity는 Error을 표시하지만 HasRepairs는 false입니다.HasRepairs는 오류가 감지되었는지 여부가 아니라 수리가 성공적으로 적용되었는지를 반영합니다. Error‑심각도 항목에 RepairApplied = false가 포함된 경우 문제는 감지되었지만 수리할 수 없었음을 의미합니다 — 이를 가능한 데이터 무결성 경고로 처리하십시오.
자주 묻는 질문
스트림에서 파일 경로 대신 XLSX 파일을 로드할 수 있나요?
예. Workbook 생성자는 Stream 객체를 받아들이는 오버로드가 있습니다. 내결함성 로딩이 필요하면 스트림과 함께 LoadOptions 인스턴스를 전달하십시오.
라이브러리가 비밀번호로 보호된 XLSX 파일 로드를 지원합니까?
비밀번호로 보호된 파일은 현재 API 범위에 포함되지 않습니다. 이를 로드하려고 시도하면 WorkbookLoadException가 발생합니다.
로드된 워크북에서 활성 시트를 어떻게 확인합니까?
Workbook.Worksheets.ActiveSheetName을 읽어 파일이 저장될 때 마지막으로 활성화된 시트의 이름을 가져옵니다.
여러 개의 XLSX 파일을 동시에 로드할 수 있나요?
예. 각 Workbook 인스턴스는 독립적입니다. 공유 상태 없이 별도의 스레드에서 여러 Workbook 객체를 인스턴스화할 수 있습니다.
수식 셀이 로드되고 캐시된 결과가 없으면 어떻게 됩니까?
Cell.StringValue은 빈 문자열을 반환합니다. Cell.Formula은 여전히 수식 문자열을 반환합니다. 캐시된 값은 Excel(또는 호환 애플리케이션)이 파일을 열고 저장할 때만 채워집니다.