Praca z zarządzaniem arkuszami kalkulacyjnymi

Praca z zarządzaniem arkuszami kalkulacyjnymi

Praca z zarządzaniem arkuszami kalkulacyjnymi

Klasa Workbook jest obiektem głównym dla wszystkich operacji na arkuszach kalkulacyjnych w Aspose.Cells FOSS dla .NET. Zapewnia dostęp do WorksheetCollection, zdefiniowanych nazw oraz cyklu życia zapisu/odczytu. Ten przewodnik obejmuje ładowanie odporne na błędy, organizację arkuszy, konfigurację układu wydruku oraz kontrolę układu wierszy/kolumn/komórek.


Ładowanie skoroszytów z opcjami naprawy

Przekaż ścieżkę do pliku do konstruktora Workbook, aby wczytać istniejący plik XLSX. Dostarcz obiekt LoadOptions z TryRepairPackage i TryRepairXml ustawionymi na true, aby spróbować odzyskać pliki z drobną korupcją strukturalną. WorkbookLoadException jest rzucany, gdy plik jest nieodwracalny.

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);
}

Dodawanie i organizowanie arkuszy

Workbook.Worksheets zwraca WorksheetCollection. Wywołaj Add(name), aby dodać nowy arkusz o podanej nazwie; metoda zwraca indeks nowego arkusza. Uzyskaj dostęp do arkuszy przez indeks zerowy lub przez nazwę. Ustaw WorksheetCollection.ActiveSheetName, aby kontrolować, która karta jest aktywna po otwarciu pliku.

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);

Ukrywanie i wyświetlanie arkuszy

Ustaw Worksheet.VisibilityType na VisibilityType.Hidden, aby ukryć arkusz bez jego usuwania. Ukryte arkusze są zachowane w pliku XLSX i można je ponownie wyświetlić, ustawiając VisibilityType.Visible. Kolor zakładki jest ustawiany za pomocą 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");

Konfigurowanie ustawień strony

Worksheet.PageSetup udostępnia wszystkie właściwości związane z drukowaniem. Użyj PageOrientationType, aby przełączać się między orientacją pionową a poziomą. Użyj PaperSizeType, aby wybrać rozmiar papieru. Zdefiniuj obszar wydruku przy pomocy PrintArea, ustaw powtarzające się wiersze/kolumny przy pomocy PrintTitleRows/PrintTitleColumns oraz dodaj ręczne podziały stron przy pomocy AddHorizontalPageBreak i AddVerticalPageBreak.

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);

Rozmiarowanie wierszy i kolumn

Uzyskaj dostęp do Worksheet.Cells.Rows przez indeks, aby otrzymać obiekt Row. Ustaw Row.Height (w punktach), aby kontrolować wysokość wiersza. Ustaw Row.IsHidden na true, aby ukryć wiersz. Uzyskaj dostęp do Worksheet.Cells.Columns przez indeks, aby otrzymać obiekt Column. Ustaw Column.Width (w jednostkach znakowych) oraz 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);

Scalanie komórek

Wywołaj Worksheet.Cells.Merge(firstRow, firstColumn, totalRows, totalColumns), aby scalić spójny prostokątny blok w jedną komórkę. Scalona komórka dziedziczy wartość komórki w lewym górnym rogu. Użyj Worksheet.Cells.MergedCells, aby odczytać wszystkie scalone obszary w załadowanym skoroszycie.

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);

Wskazówki i najlepsze praktyki

  • Użyj WorksheetCollection.ActiveSheetName, aby zapewnić, że właściwa karta zostanie wybrana po otwarciu pliku w Excelu.
  • Ustaw marginesy strony w calach (LeftMarginInch, TopMarginInch) — są to wartości zmiennoprzecinkowe, a nie całkowite.
  • Ukrywanie wierszy/kolumn (IsHidden = true) zachowuje ich dane; usunięcie wiersza usuwa dane trwale.
  • Zawsze wywołuj Workbook.Save() raz na końcu operacji wsadowej, a nie po każdej zmianie.
  • Łącz komórki oszczędnie w arkuszach danych — połączone obszary uniemożliwiają prawidłowe działanie sortowania i automatycznego filtrowania w całym połączonym obszarze.

Typowe problemy

ProblemPrzyczynaNaprawa
WorkbookLoadException przy ładowaniuUszkodzony ZIP lub XML w pliku XLSXUstaw LoadOptions.TryRepairPackage = true i TryRepairXml = true
Add(name) zwraca nieprawidłowy indeksUżywanie nazwy arkusza jako indeksuAdd() zwraca indeks typu int; użyj tego indeksu, aby uzyskać dostęp do nowego arkusza
Wysokość wiersza nie jest zachowywanaWysokość ustawiona na 0 lub wartość ujemnąUżyj dodatniej wartości typu double, takiej jak 28d
Połączona komórka wyświetla nieprawidłową wartośćWartość zapisana w komórce nie będącej w lewym górnym rogu zakresu scalaniaZapisz wartość w lewą górną komórkę przed wywołaniem Cells.Merge()
Podział strony się nie pojawiaAddHorizontalPageBreak wywołane po Save()Ustaw podziały stron przed wywołaniem Save()

FAQ

Ile arkuszy mogę dodać?

Format XLSX obsługuje do 1024 arkuszy na skoroszyt. Praktyczne limity zależą od dostępnej pamięci i rozmiaru pliku.

Czy mogę skopiować arkusz między skoroszytami?

Obecny interfejs API nie udostępnia metody CopyTo do kopiowania arkuszy między skoroszytami. Wczytaj oba pliki i przenieś dane komórka po komórce.

Jak mogę zmienić kolejność arkuszy?

Użyj dostępu indeksowego WorksheetCollection i zmień nazwy arkuszy, aby zmienić ich logiczną kolejność. Bezpośrednie przemieszczenie pozycyjne nie jest dostępne w obecnym interfejsie API.

Jakie jednostki używa PageSetup dla marginesów?

Wszystkie właściwości marginesów (LeftMarginInch, TopMarginInch itp.) są podawane w calach jako wartości double.

Czy Cells.Merge zastępuje istniejące dane w komórce?

Wartość komórki w lewym górnym rogu jest zachowana; wartości w pozostałych połączonych komórkach są usuwane.


API Reference Podsumowanie

Klasa / MetodaOpis
WorkbookObiekt główny — tworzyć, ładować, zapisywać skoroszyty
Workbook.WorksheetsZwraca WorksheetCollection
Workbook.Save(path)Zachowaj skoroszyt w formacie XLSX
WorksheetCollection.Add(name)Dodaj nowy arkusz o nazwie
WorksheetCollection.ActiveSheetNameAktywna karta przy otwarciu pliku
Worksheet.VisibilityTypeVisibilityType.Hidden lub Visible
Worksheet.TabColorKolor karty (Color)
Worksheet.PageSetupUstawienia układu wydruku
PageSetup.OrientationPageOrientationType.Landscape or Portrait
PageSetup.PaperSizePaperSizeType.PaperA4, etc.
PageSetup.AddHorizontalPageBreak(row)Wstaw poziomy podział strony
Cells.Rows[index].HeightWysokość wiersza w punktach
Cells.Rows[index].IsHiddenUkryj/pokaż wiersz
Cells.Columns[index].WidthSzerokość kolumny w jednostkach znakowych
Cells.Columns[index].IsHiddenUkryj/pokaż kolumnę
Cells.Merge(row, col, numRows, numCols)Scal prostokątny blok
Cells.MergedCellsLista scalonych obszarów w arkuszu
LoadOptions.TryRepairPackagePodejmij próbę naprawy ZIP przy ładowaniu
LoadOptions.TryRepairXmlPodejmij próbę naprawy XML przy ładowaniu
WorkbookLoadExceptionRzucany, gdy plik jest nie do odzyskania

Zobacz także

 Polski