工作簿是 ReoGrid 中的顶层容器。它包含多个工作表,并管理文件 I/O、设置和事件。

328

组件结构: 215

控件即工作簿

ReoGrid 控件实例本身就是一个工作簿。你可以直接使用它来访问工作簿级别的功能:

var workbook = reoGridControl1;

访问工作表

当前工作表

获取当前活动的工作表:

var sheet = reoGridControl.CurrentWorksheet;

切换活动工作表:

reoGridControl.CurrentWorksheet = reoGridControl.Worksheets[2];

注意: CurrentWorksheet 不能设置为 null —— 控件必须始终有至少一个活动的工作表。

通过索引或名称访问

// By zero-based index
var sheet1 = reoGridControl.Worksheets[0];

// By name
var sheet2 = reoGridControl.Worksheets["Sheet2"];

查找工作表索引

int index = reoGridControl.GetWorksheetIndex("Sheet2");
// or
int index = reoGridControl.GetWorksheetIndex(mySheet);

通过名称查找工作表

var sheet = reoGridControl.GetWorksheetByName("Sheet2");

检查名称是否可用

bool available = reoGridControl.CheckWorksheetNameAvailable("NewSheet");

工作表数量

int count = reoGridControl.WorksheetCount;
// or
int count = reoGridControl.Worksheets.Count;

检查是否为空

bool empty = reoGridControl.IsEmpty;

工作表管理

创建工作表

// Create with auto-assigned name (Sheet1, Sheet2, etc.)
var sheet = reoGridControl.CreateWorksheet();

// Create with a specified name
var sheet = reoGridControl.CreateWorksheet("MySheet");

// Create with name and duplicate-check
var sheet = reoGridControl.CreateWorksheet("MySheet", checkNameExists: true);

// NewWorksheet is an alias for CreateWorksheet
var sheet = reoGridControl.NewWorksheet("MySheet");

注意: 与 Excel 相同,ReoGrid 不允许同一工作簿中存在两个同名的工作表。

添加和插入工作表

// Add at the end
reoGridControl.AddWorksheet(sheet);

// Insert at a specific position (zero-based index)
reoGridControl.InsertWorksheet(1, sheet);

// Via the Worksheets collection
reoGridControl.Worksheets.Add(sheet);
reoGridControl.Worksheets.Insert(1, sheet);

工作表通过电子表格底部的工作表标签控件进行切换: 217

删除工作表

// Remove by index
reoGridControl.RemoveWorksheet(0);

// Remove by instance
reoGridControl.RemoveWorksheet(sheet);

// Via the Worksheets collection
reoGridControl.Worksheets.Remove(sheet);
reoGridControl.Worksheets.RemoveAt(0);

复制工作表

// Copy the first worksheet and insert the copy at position 1
var copy = reoGridControl.CopyWorksheet(0, 1);

// Copy with a new name
var copy = reoGridControl.CopyWorksheet(0, 1, "CopiedSheet");

// Copy by worksheet instance
var copy = reoGridControl.CopyWorksheet(sheet, 2, "AnotherCopy");

移动工作表

// Move the worksheet at index 0 to index 3
reoGridControl.MoveWorksheet(0, 3);

// Move by worksheet instance
reoGridControl.MoveWorksheet(sheet, 2);

从工作表获取父工作簿

var workbook = sheet.Workbook;

工作表集合

Worksheets 属性返回一个支持完整 CRUD 操作的 WorksheetCollection

var worksheets = reoGridControl.Worksheets;

// Iterate all worksheets
foreach (var sheet in worksheets)
{
    Console.WriteLine(sheet.Name);
}

// Check if a worksheet exists
bool exists = worksheets.Contains(sheet);

// Get count
int count = worksheets.Count;

// Create directly from collection
var newSheet = worksheets.Create("NewSheet");

// Clear all worksheets
worksheets.Clear();

工作表名称和标签外观

更改工作表名称

sheet.Name = "Sales Data";

标签背景色

自定义工作表标签的背景色:

sheet.NameBackColor = new SolidColor(Color.LightBlue);

标签文字颜色

自定义工作表标签的文字颜色:

sheet.NameTextColor = new SolidColor(Color.DarkBlue);

只读模式

将整个工作簿设置为只读模式:

reoGridControl.Readonly = true;

工作簿设置

// Set a setting
reoGridControl.SetSettings(WorkbookSettings.View_ShowSheetTabControl, false);

// Check a setting
bool hasSheetTab = reoGridControl.HasSettings(WorkbookSettings.View_ShowSheetTabControl);

// Get all settings
var settings = reoGridControl.GetSettings();

可用的 WorkbookSettings

设置说明
View_ShowSheetTabControl在底部显示工作表标签控件
View_ShowScrolls显示水平和垂直滚动条
View_ShowHorScroll显示水平滚动条
View_ShowVerScroll显示垂直滚动条

控件外观

使用 ControlAppearanceStyle 自定义网格控件的视觉外观:

var appearance = reoGridControl.ControlStyle;

// Change selection border width
appearance.SelectionBorderWidth = 2.0f;

// Change grid line width
appearance.GridLineWidth = 0.5f;

// Change individual colors
appearance[ControlAppearanceColors.GridBackground] = new SolidColor(Color.White);
appearance[ControlAppearanceColors.GridLine] = new SolidColor(Color.LightGray);
appearance[ControlAppearanceColors.SelectionBorder] = new SolidColor(Color.Blue);
appearance[ControlAppearanceColors.SelectionFill] = new SolidColor(60, 0, 0, 255);

// Column header colors
appearance[ControlAppearanceColors.ColHeadNormalStart] = new SolidColor(Color.WhiteSmoke);
appearance[ControlAppearanceColors.ColHeadNormalEnd] = new SolidColor(Color.LightGray);
appearance[ControlAppearanceColors.ColHeadText] = new SolidColor(Color.Black);

// Row header colors
appearance[ControlAppearanceColors.RowHeadNormal] = new SolidColor(Color.WhiteSmoke);
appearance[ControlAppearanceColors.RowHeadText] = new SolidColor(Color.Black);

// Sheet tab colors
appearance[ControlAppearanceColors.SheetTabBackground] = new SolidColor(Color.White);
appearance[ControlAppearanceColors.SheetTabText] = new SolidColor(Color.Black);
appearance[ControlAppearanceColors.SheetTabSelected] = new SolidColor(Color.Blue);

外观颜色键

颜色键说明
GridBackground工作表背景
GridText默认文字颜色
GridLine网格线颜色
SelectionBorder选区边框颜色
SelectionFill选区填充颜色
ColHeadNormalStart/End列标题渐变色(正常状态)
ColHeadHoverStart/End列标题渐变色(悬停状态)
ColHeadSelectedStart/End列标题渐变色(选中状态)
ColHeadFullSelectedStart/End列标题渐变色(完全选中)
ColHeadText列标题文字颜色
RowHeadNormal行标题背景(正常状态)
RowHeadHover行标题背景(悬停状态)
RowHeadSelected行标题背景(选中状态)
RowHeadFullSelected行标题背景(完全选中)
RowHeadText行标题文字颜色
SheetTabBorder工作表标签边框颜色
SheetTabBackground工作表标签背景
SheetTabText工作表标签文字颜色
SheetTabSelected活动工作表标签颜色
OutlinePanelBorder大纲面板边框
OutlinePanelBackground大纲面板背景
OutlineButtonBorder大纲展开/折叠按钮边框
OutlineButtonText大纲按钮文字
LeadHeadNormal引导标题(左上角)正常颜色
LeadHeadHover引导标题悬停颜色
LeadHeadSelected引导标题选中颜色

更多详情请参阅控件外观

文件 I/O(保存与加载)

保存

// Save to file (format auto-detected from extension)
reoGridControl.Save("workbook.xlsx");

// Save with explicit format
reoGridControl.Save("workbook.xlsx", FileFormat.Excel2007);

// Save with encoding
reoGridControl.Save("workbook.csv", FileFormat.CSV, Encoding.UTF8);

// Save to stream
reoGridControl.Save(stream, FileFormat.Excel2007);

加载

// Load from file
reoGridControl.Load("workbook.xlsx");

// Load with explicit format
reoGridControl.Load("workbook.xlsx", FileFormat.Excel2007);

// Load with encoding
reoGridControl.Load("workbook.csv", FileFormat.CSV, Encoding.UTF8);

// Load from stream
reoGridControl.Load(stream, FileFormat.Excel2007);

更多详情请参阅导入与导出

重置工作簿

将工作簿重置为初始状态(清除所有工作表和内容):

reoGridControl.Reset();

异常处理

通知工作簿发生异常,以实现集中式错误处理:

reoGridControl.NotifyExceptionHappen(sheet, exception);
reoGridControl.NotifyExceptionHappen(sheet, exception, cellPosition);

事件

工作表管理事件

事件事件参数说明
WorksheetCreatedWorksheetCreatedEventArgs创建了新的工作表
WorksheetInsertedWorksheetInsertedEventArgs插入了工作表(提供 Index
WorksheetRemovedWorksheetRemovedEventArgs删除了工作表(提供 Index
BeforeWorksheetNameChangeWorksheetNameChangingEventArgs工作表名称更改之前(提供 NewName
WorksheetNameChangedWorksheetNameChangingEventArgs工作表名称更改之后
WorksheetNameBackColorChangedWorksheetEventArgs标签背景色已更改
WorksheetNameTextColorChangedWorksheetEventArgs标签文字颜色已更改

文件 I/O 事件

事件事件参数说明
WorkbookLoadedEventArgs工作簿文件加载之后
WorkbookSavedEventArgs工作簿文件保存之后

其他事件

事件事件参数说明
SettingsChangedEventArgs工作簿设置更改之后
ExceptionHappenedExceptionHappenEventArgs发生异常(提供 ExceptionWorksheetCellPosition

示例:监听事件

reoGridControl.WorksheetCreated += (s, e) =>
{
    Console.WriteLine($"Created worksheet: {e.Worksheet.Name}");
};

reoGridControl.WorksheetInserted += (s, e) =>
{
    Console.WriteLine($"Inserted worksheet '{e.Worksheet.Name}' at index {e.Index}");
};

reoGridControl.WorksheetRemoved += (s, e) =>
{
    Console.WriteLine($"Removed worksheet at index {e.Index}");
};

reoGridControl.ExceptionHappened += (s, e) =>
{
    Console.WriteLine($"Error in {e.Worksheet?.Name}: {e.Exception.Message}");
};

组件对象结构

/docs/images/231

工作表标签控件

Windows Forms 和 WPF 版本都提供了内置的工作表标签 UI 控件。了解更多关于工作表标签控件的信息。

内存工作簿

ReoGrid 提供了内存工作簿实例 —— 一个不带 GUI 的工作表集合。请参阅内存工作簿

相关主题

这篇文章对您有帮助吗?