句柄类型参考
概述
本头文件定义了 oosxl 库中使用的不透明句柄类型。这些句柄提供对内部 C++ 对象的类型安全引用,同时保持清晰的 C 接口。
句柄类型
-
type DocumentHandle
表示 Excel 文档的不透明句柄。
此句柄由文档创建和加载函数返回,并作为所有文档操作的根对象。
使用示例:
DocumentHandle doc = doc_create(); // ... work with document doc_release(doc);
-
type WorkbookHandle
表示 Excel 工作簿的不透明句柄。
工作簿包含一个或多个工作表,并管理工作簿级别的设置,如计算模式和日期系统。
使用示例:
DocumentHandle doc = doc_create(); WorkbookHandle workbook = doc_get_workbook(doc); // ... work with workbook doc_release(doc);
-
type WorksheetHandle
表示 Excel 工作表的不透明句柄。
工作表包含实际的单元格数据、格式化和工作表特定设置。
使用示例:
WorksheetHandle sheet = wb_add_worksheet(workbook, "Sheet1"); ws_set_text(sheet, 0, 0, "Hello World"); // ... work with worksheet
-
type StyleHandle
表示单元格样式的不透明句柄。
样式控制单元格的视觉外观,包括字体、颜色、边框、对齐方式和数字格式。
使用示例:
StyleHandle style = wb_make_normal_style(workbook); style_set_font_color(style, 0xFF0000); // Red text style_set_bold(style, 1); // Bold font ws_set_cell_style(sheet, 0, 0, style); style_release(style);
-
type RichtextHandle
表示富文本内容的不透明句柄。
富文本允许在单个单元格内使用多种格式化样式,实现复杂的文本呈现。
使用示例:
RichtextHandle rt = wb_make_richtext(workbook); rt_append(rt, "Normal text", normal_style); rt_append(rt, "Bold text", bold_style); ws_set_richtext(sheet, 0, 0, rt); rt_release(rt);
-
type TabledefHandle
表示 Excel 表格(列表对象)的不透明句柄。
表格提供结构化数据管理,具有内置的筛选、排序和自动格式化功能。
使用示例:
TabledefHandle table = ws_add_tabledef(sheet, "Table1", 0, 0, 10, 5); td_set_display_name(table, "Sales Data"); // ... configure table
内存管理
DocumentHandle 必须正确管理以避免内存泄漏:
创建: DocumentHandle 由 doc_create() 或 doc_load() 函数创建
使用: DocumentHandle 可以在应用程序生命周期内使用
销毁: DocumentHandle 必须使用相应的释放函数释放
正确的清理顺序:
DocumentHandle doc = doc_create();
WorkbookHandle workbook = doc_get_workbook(doc);
WorksheetHandle sheet = wb_add_worksheet(workbook, "Sheet1");
StyleHandle style = wb_make_normal_style(workbook);
RichtextHandle rt = wb_make_richtext(workbook);
// ... use objects
rt_release(rt);
style_release(style);
// Release the DocumentHandle
doc_release(doc); // Releases workbook and worksheet automatically
句柄生命周期
文档句柄拥有其包含的工作簿、工作表和其他对象
释放文档句柄会自动释放所有子对象
样式和富文本句柄如果是独立的,建议显式释放
尝试使用已释放的句柄会导致未定义行为
空句柄
NULL 句柄值表示:
创建失败(内存不足、无效参数)
对象未找到(无效索引、缺少名称)
已释放的对象
始终检查 NULL 句柄:
DocumentHandle doc = doc_load("nonexistent.xlsx");
if (doc == NULL) {
printf("Failed to load document\n");
return;
}
类型安全
句柄系统提供编译时类型安全:
每种句柄类型都是不同的,不能意外互换
编译器会捕获类型不匹配
不透明结构防止直接访问内部实现