#excel #winapi #excel4 #excel12 #xll

xladd

使用Excel4/12接口简化Rust中Excel插件构建的框架

3个版本

使用旧的Rust 2015

0.1.2 2020年8月25日
0.1.1 2020年8月21日
0.1.0 2018年9月19日

#116 in Windows API


用于 2 crates

MIT 协议

125KB
3.5K SLoC

包含 (静态库, 3KB) xlcall32.lib

xladd

一个库,用于通过Excel4和Excel12 API开发Excel插件。

微软API

Excel4 API被添加到Excel版本4,并在所有后续的Windows平台Excel版本中得到广泛支持。(遗憾的是,苹果用户只能使用VBA。)在Excel 2007中,还添加了一个API,以支持超过256列的电子表格和超过254个字符的字符串。该API不再完全支持:例如,菜单修改函数不再工作。但是,微软已经表明了对该API的强烈支持,例如,这是唯一允许插件进行多线程异步操作的API。

API主要执行两个角色。它允许插件控制Excel的行为,例如捕获按键和强制写入单元格。它还允许插件注册自己的函数,这些函数可以从Excel单元格中调用,并由函数向导构建,就像Excel的内置函数一样。

xladd的作用

xladd是一个完全用Rust编写的库。它旨在极大地简化Excel插件的编写,具有以下功能:

  • 将Excel4和Excel12 API中的函数包装起来,以便可以直接从Rust中调用。

  • 包装用于与Excel通信的XLOPER结构,使其具有泄漏安全,并允许从安全的Rust代码中对其进行读写访问。

  • 使用Rust宏来自动推导注册代码,以便Excel可以调用用Rust编写的函数。

  • 支持基于映射的缓存,以便可以从插件函数中返回Rust结构,并将其传递给其他插件函数。XLOPER仅支持基本类型,如字符串、数字和字符串和数字的数组,但缓存允许通过字符串或数字对非平凡数据进行键控,从而可以通过Excel自己的计算逻辑传递。

  • 允许不同插件之间的通信,并支持'any'接口的共享结构缓存。

XLOPER和低级API

“XLOPER”是微软编写的一种结构体,包含判别联合体,可以表示Excel单元格或单元格范围的内容。它始于Excel 4版本,早于VBA。在那些日子里,Excel宏是一系列Excel单元格,包含表示调用和控制流的数字。现在XLOPER的控制流部分已经不再需要,但该结构体仍然用于表示以下变体类型:

  • 数字(浮点数、整数和日期在内部都是相同的)
  • 字符串(在Excel 97之前,字符串限制为254个ASCII字符,这是Excel4和Excel12 API之间的一个区别)
  • 错误
  • 单元格范围,每个单元格可以是上述任何类型

当你为Excel注册一个函数以调用时,你必须指定函数的参数。它们可以是XLOPER,允许你通过自己的错误消息强制转换值或拒绝它们,或者你可以指定一些内置类型,如整数、浮点数或字符串,在这种情况下,Excel会在调用你的函数之前为你进行强制转换或拒绝。行业标准是始终指定XLOPER,以提供更多的灵活性,但在这个库中,我们为你提供了选择。

依赖关系

~520–750KB