当前位置: 首页 > backend >正文

excel中自定义公式

1、通过 LAMBDA 函数创建的自定义公式.

仅在 Excel 2021 和 Microsoft 365 中可用,旧版本(如 Excel 2019)不支持。

  • 在名称管理器中定义:
    • 名称:DiscountPrice
    • 公式:=LAMBDA(price, rate, price * (1 - rate))
  • 在工作表中使用:=DiscountPrice(A1, B1),其中 A1 是原价,B1 是折扣率。
  • =LAMBDA(price,rate, price * (1 - rate))
  • =DiscountPrice(B1,C1)

2、通过 VBA 创建的自定义公式(UDF)

Function SquareSum(a As Double, b As Double) As DoubleSquareSum = a ^ 2 + b ^ 2
End Function

vba源码添加模块另存为xla,在开发工具加载项加载xla,如果避免自己写的公式不被泄露需要添加保护,需要保护整个工作簿,导致很多功能不能用,这种必须保存为宏文件体验不好。

典型的插件:雳英(LYPG)资产评估软件

在 C# 中实现 Excel 的 **自定义公式(UDF)**,可以通过以下两种常见方式:✅ 方法一:使用 Excel-DNA 创建自定义函数(推荐)步骤:1. 安装 Excel-DNA NuGet 包在你的 C 项目中安装:```
Install-Package ExcelDna.AddIn
```2. 编写 UDF 函数创建一个类库项目(.NET Framework 推荐使用 4.8):```csharp
using ExcelDna.Integration;public static class MyFunctions
{[ExcelFunction(Description = "Returns the double of the input")]public static double DoubleValue(double x){return x * 2;}[ExcelFunction(Description = "Greets the user")]public static string Greet(string name){return "Hello, " + name;}
}
```3. 创建 `.dna` 文件(用于声明为 Excel 插件)创建一个和 DLL 同名的 `.dna` 文件,例如 `MyAddin.dna`:```xml
<DnaLibrary RuntimeVersion="v4.0" Name="My Addin"><ExternalLibrary Path="MyAddin.dll" />
</DnaLibrary>
```4. 构建并运行构建后,将生成 `.xll` 文件,双击即可在 Excel 中打开插件,或放入 `XLSTART` 文件夹自动加载。5. 在 Excel 中使用比如上面的函数可以直接在 Excel 中输入:```excel
=DoubleValue(5)
=Greet("Tom")
```---✅ 方法二:使用 COM 注册表导出 Excel UDF(不推荐,复杂且对部署要求高)* 将类库注册为 COM 组件
* 实现 `IDTExtensibility2` 或 `ICustomFunction`
* 使用 `RegAsm.exe` 注册 DLL,添加注册表项⚠️缺点:复杂、容易出错、不支持跨平台、较新版本 Office 限制较多。---✅ 总结:推荐使用 Excel-DNA 的原因| 特性           | Excel-DNA | COM 插件 |
| ------------ | --------- | ------ |
| 简单易用         | ✅         | ❌      |
| 支持 UDF 函数    | ✅         | ✅      |
| 部署便捷         | ✅(XLL 文件) | ❌      |
| 支持 .NET 最新版本 | ✅         | ❌      |
| 跨平台兼容        | 部分支持      | ❌      |---🔧 附:生成 `.xll` 的实用工具你可以使用 Excel-DNA 提供的打包工具 `ExcelDnaPack.exe` 将你的 DLL 和 `.dna` 文件打包成一个 `.xll` 文件:```bash
ExcelDnaPack.exe MyAddin.dna
```
使用 Excel 的 自定义公式(UDF, User Defined Function) 无论是通过 VBA、Excel-DNA、还是 COM 插件方式,都有一些不可忽视的缺点和限制。以下是它们的主要劣势:---❗通用缺点(适用于所有 UDF,包括 VBA 和 C/Excel-DNA)1. 🚫 无法在数组公式/动态数组中完整支持(取决于平台)UDF 默认不支持像 `FILTER()`、`SEQUENCE()` 等动态数组函数的行为。在较新版本(如 Excel 365)中配合 `LAMBDA` 使用可以部分规避,但需要技巧。2. 📉 计算性能差(尤其是大量调用时)与 Excel 原生函数相比,UDF 执行速度慢很多;如果在大量单元格中调用,会显著拖慢工作簿性能。3. 🔁 不自动重算(需显式指定)如果函数引用了外部单元格,但没有作为参数传入,Excel 不会自动刷新结果;例如访问 `Range("A1")` 而不是传入参数。4. 🧠 不支持异步或后台计算(尤其是 VBA)UDF 都是同步运行,阻塞 Excel 主线程;不支持异步请求(例如:Web API 调用、数据库操作)。---❗VBA 实现的 UDF 特有的缺点1. ⚠️ 安全限制(宏必须启用)用户必须启用宏(.xlsm 或 .xla 文件)才能使用;某些组织政策中禁用宏,导致函数不可用。2. ❌ 不支持多线程重算(MTD)Excel 的多线程计算(Multi-threaded calculation)对 VBA 函数无效。3. 📁 文件依赖(插件文件容易丢失或未加载)`.xla` 或 `.xlsm` 文件必须随时可用,否则函数失效。---❗C/Excel-DNA 实现的 UDF 特有的缺点1. 🔌 需要加载 `.xll` 插件(用户要手动或自动添加)尽管可以“拷贝即用”,但仍需要加载操作,略麻烦;用户卸载或重装 Excel 时,插件需要重新加载。2. ❌ 不支持跨平台(Windows Only)Excel-DNA 插件 只能在 Windows Excel 桌面版使用;Mac Excel、Excel Online 不支持 `.xll` 插件。3. ⚠️ Excel 安全设置限制 `.xll` 插件运行用户机器如果设置了较高的加载项安全等级,插件可能被阻止运行。---✅ 使用建议| 场景               | 是否推荐使用 UDF            |
| ---------------- | --------------------- |
| 简单重复的逻辑计算        | ✅ 可使用 VBA 或 Excel-DNA |
| 大规模数据处理、性能关键     | ❌ 推荐用 Power Query 或插件 |
| 跨平台支持(Mac/Web)   | ❌ 不适合用 UDF            |
| 引入复杂库(如 C 数学库)  | ✅ 推荐用 Excel-DNA       |
| 和其他系统交互(API、数据库) | ❌ 推荐单独用 C 做插件或工具     |

http://www.xdnf.cn/news/13762.html

相关文章:

  • 基于 Nginx 服务器的泛域名 SSL 证书申请与部署
  • 腾讯云:6月30日起,自动禁用,及时排查
  • keil5怎么关闭工程
  • JavaScript中的迭代器模式:优雅遍历数据的“设计之道”
  • React---Hooks深入
  • vue3 全局过滤器
  • 【Docker 04】image - 镜像
  • 《一本书看透A股》速读笔记
  • Python----神经网络发(神经网络发展历程)
  • 水库大坝安全监测之渗流监测
  • 理解LLM所谓的“推理”能力
  • Vim 命令大全:从入门到精通
  • Flutter 小技巧之:实现 iOS 26 的 “液态玻璃”
  • Spring Cloud Gateway 动态路由实现方案
  • Android NTP自动同步时间机制
  • 记录一个大模型逐层微调计算损失输出少了一个维度的小bug
  • Three.js搭建小米SU7三维汽车实战(4)场景搭建
  • 【时时三省】(C语言基础)将外部变量的作用域扩展到其他文件
  • 计算复变积分 $w = \int_0^1 (1 + it)^2 \, dt$
  • 【清晰教程】可视化数据集标注工具Labelimg零基础安装
  • openstack实例创建过程分析
  • 深度掌控,智启未来 —— 基于 STM32F103RBT6 的控制板
  • 离线部署openstack 2024.1 cinder
  • pangolin
  • 全连接层和卷积层等效情况举例
  • 离线部署openstack 2024.1控制节点keystone
  • Design Compiler:使用read_file命令读取RTL设计
  • Python Day 48 学习(日志Day18学习)
  • 谷歌被禁用的麦克风如何能使用
  • 榕壹云打车系统:赋能出租与网约车的全场景解决方案