Робота з управлінням електронними таблицями
Робота з управлінням електронними таблицями
Клас Workbook є кореневим об’єктом для всіх операцій з електронними таблицями у Aspose.Cells FOSS для .NET. Він надає доступ до WorksheetCollection, визначених імен та життєвого циклу збереження/завантаження. Цей посібник охоплює завантаження з урахуванням помилок, організацію листів, налаштування друкованого макету та керування розташуванням рядків/стовпців/комірок.
Завантаження робочих книг з параметрами відновлення
Передайте шлях до файлу у конструктор Workbook, щоб завантажити існуючий файл XLSX. Надайте об’єкт LoadOptions з TryRepairPackage та TryRepairXml, встановленими у true, щоб спробувати відновити файли з незначними структурними пошкодженнями. Викидається 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.Worksheets повертає WorksheetCollection. Викличте Add(name), щоб додати новий лист за назвою; метод повертає індекс нового листа. Доступ до листів можна отримати за індексом, що починається з нуля, або за назвою. Встановіть 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 і додайте ручні розриви сторінок за допомогою AddHorizontalPageBreak та 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);Розмір рядків і стовпців
Отримайте доступ до Worksheet.Cells.Rows за індексом, щоб отримати об’єкт Row. Встановіть Row.Height (у пунктах), щоб керувати висотою рядка. Встановіть Row.IsHidden у true, щоб приховати рядок. Отримайте доступ до 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);Поради та кращі практики
- Використовуйте
WorksheetCollection.ActiveSheetName, щоб забезпечити вибір правильної вкладки під час відкриття файлу в Excel. - Встановіть полоси сторінки в дюймах (
LeftMarginInch,TopMarginInch) — це значення з плаваючою комою, а не цілі числа. - Приховування рядків/стовпців (
IsHidden = true) зберігає їх дані; видалення рядка видаляє дані назавжди. - Завжди викликайте
Workbook.Save()один раз наприкінці пакетної операції, а не після кожної зміни. - Об’єднуйте клітини в таблицях даних лише за потреби — об’єднані ділянки перешкоджають правильному сортуванню та автоматичному фільтруванню в межах об’єднаної області.
Поширені проблеми
| Проблема | Причина | Виправлення |
|---|---|---|
WorkbookLoadException під час завантаження | Пошкоджений ZIP або XML у XLSX | Встановіть LoadOptions.TryRepairPackage = true та TryRepairXml = true |
Add(name) повертає неправильний індекс | Використання назви листа як індексу | Add() повертає цілий індекс; використайте цей індекс для доступу до нового листа |
| Висота рядка не зберігається | Висота встановлена в 0 або від’ємне значення | Використайте додатне double-значення, наприклад 28d |
| Об’єднана клітинка показує неправильне значення | Значення записано в клітинку, що не є верхньою лівою в діапазоні об’єднання | Запишіть значення у верхню ліву клітинку перед викликом Cells.Merge() |
| Розрив сторінки не відображається | AddHorizontalPageBreak викликано після Save() | Встановити розриви сторінок перед викликом 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.VisibilityType | VisibilityType.Hidden або Visible |
Worksheet.TabColor | Колір вкладки (Color) |
Worksheet.PageSetup | Налаштування макету друку |
PageSetup.Orientation | PageOrientationType.Landscape або Portrait |
PageSetup.PaperSize | PaperSizeType.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 | Викидається, коли файл не підлягає відновленню |