如何将微软 Office 宏转换为 ONLYOFFICE 宏

news/2024/7/10 22:30:36 标签: microsoft, 开源, onlyoffice, , excel

想要将微软 Office VBA 转换为可在 ONLYOFFICE 中无缝使用的?嗯,虽然这种需求并没有直接的解决方案,不过我们也会在本文中介绍 VBA 的转换步骤——正好我们手上也有一个来自用户的实际案例可供参考。

Transforming a Microsoft Office macro into an ONLYOFFICE macro

VBA

以下是原始的 VBA 代码:

Sub Button1_Click()
    Dim mycel As Range
    For Each mycel In Columns("D:D").SpecialCells(xlCellTypeConstants, 23)
        If mycel = [TODAY()] Then mycel.Offset(0, 1) = [This_value]
    Next
End Sub

代码会对 D 列进行扫描,查找值为常量“23”的单元格,同时检查各个单元格中的值是否等于标记为 [TODAY()] 的单元格的值。如果值匹配的话,则会对其右侧的单元格进行更新,更新的值为标记为 [This_value] 的单元格中的值。

Transforming a Microsoft Office macro into an ONLYOFFICE macro

构建 ONLYOFFICE

在将上述转换为与 ONLYOFFICE 兼容的 JavaScript 的过程中,我们需要使用 ONLYOFFICE API。 

对于 ONLYOFFICE ,我们首先需要通过 Api.GetActiveSheet() 函数获取活动工作表。然后便是从单元格 A2 和 A4 中获取值。这两个单元格就是 VBA 中 [TODAY()] 与 [This_value] 标记分别对应的单元格:

var sheet = Api.GetActiveSheet();
var dateValue = sheet.GetRange("A2").GetValue();
var updateValue = sheet.GetRange("A4").GetValue();

下一步是使用 sheet.GetRange(“D1:D10”) 定义需要进行迭代的单元格范围。这里的代码即确定了本例中的 D 列作为迭代范围,实际使用时您可按照自己的特定需求对其进行调整:

var dateRange = sheet.GetRange("D1:D10");

我们需要使用 ForEach 函数来在已定义范围内的各单元格上迭代执行代码。对于每个单元格,我们都会使用 range.GetValue() 来获取其当前值,然后与单元格 A2 内的值进行对比。如果匹配的话,则会使用 range.GetRow() 获取当前单元格的行号,然后借助 sheet.GetRange(“E” + row) 获取 E 列中的相应单元格:

dateRange.ForEach(function(range) {
  var currentDate = range.GetValue();
  // 检查当前日期是否与单元格 A2 中的值匹配
  if (currentDate === dateValue) {
    // 获取 E 列中的相应单元格
    var row = range.GetRow();
    var oRange = sheet.GetRange("E" + row);  }
});

最后,我们可通过 oRange.SetValue(updateValue) 使用单元格 A4 中的值来更新下一单元格的值(向右侧偏移一列):

   // 更新下一单元格中的值
    oRange.SetValue(updateValue);
  }
});

完整的代码如下:

(function()
{
    var sheet = Api.GetActiveSheet();
var dateValue = sheet.GetRange("A2").GetValue();
var updateValue = sheet.GetRange("A4").GetValue();
var dateRange = sheet.GetRange("D1:D10");
dateRange.ForEach(function(range) {
  var currentDate = range.GetValue();
  // 检查当前日期是否与单元格 A2 中的值匹配
  if (currentDate === dateValue) {
    // 获取 E 列中的相应单元格
    var row = range.GetRow();
    var oRange = sheet.GetRange("E" + row);
   // 更新下一单元格中的值
    oRange.SetValue(updateValue);
  }
});
})();

点击这里,观看视频,看看的效果如何!

总结一下,首先,我们无法直接将 VBA 转换为可在 ONLYOFFICE 中使用的 JavaScript 。不过,在为 ONLYOFFICE 构建的过程中,您可使用现有的 VBA 代码作为参考,与此同时借助 ONLYOFFICE API 方法,加上一些必要的调整,这样就能实现类似的功能。

虽然在这一过程中可能会需要进行一些代码重构工作,不过其完全是可行的。希望文本中简要介绍的内容能够帮助您成功打造出功能强大的 ONLYOFFICE 。拥抱广阔的可能性,尽享自定义的优势与乐趣。祝愿您的探索之旅一帆风顺!

相关链接

​​ONLYOFFICE 论坛​​

​​ONLYOFFICE API 文档​​

​​示例​​

​​GitHub 上的 ONLYOFFICE


http://www.niftyadmin.cn/n/5181121.html

相关文章

视频封装格式

FLV(Flash Video) FLV封装格式 Tag Data分为Audio,Video,Script三种 TS(Transport Stream)传输流 TS文件分为三层,(倒叙更好理解) TS层:在PES层基础上加入…

Niushop单商户及多商户v5商城系统第三方商业插件cps联盟视频购物及多包装库存转换的安装

一、后端安装 把video文件夹直接上传到addon目录下即可登录后台,设置->系统维护->插件管理->未安装插件,找到插件直接安装即可 3.在营销->营销中心->营销活动,找到视频列表这个插件,点击进去配置视频即可 4.装…

hadoop 大数据环境配置 同步时间 centos服务器时间同步 linux 安装ntp服务更新时间 hadoop(六)

1. 安装ntp软件 yum install -y ntp 2.创建软连接 # 删除之前得时间 sudo rm -rf /etc/localtime;# 更新时区sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime3. 更新时间 # root 权限运行 sudo ntpdate -u ntp.aliyun.com 4. 开机自启,更新时间 …

116.飞行员兄弟

题目链接 思路 明天补 代码 #include<bits/stdc.h> using namespace std; const int N 10; char g[N][N]; char backup[N][N]; int ans 0x3f3f3f3f; vector<pair<int, int>> v; int get(int x, int y) {return x * 4 y; } void turn (int x, int y) {i…

探索图像形态学变换:理论与应用

图像形态学变换是数字图像处理领域中的重要技术&#xff0c;它通过对图像中的形状和结构进行操作和改变&#xff0c;来实现图像的分析、识别和增强等应用。本文将从图像形态学变换的基本原理和方法入手&#xff0c;介绍膨胀、腐蚀、开运算、闭运算等常见的形态学变换操作&#…

如何正确使用 JavaScript 中的 slice() 方法

在 JavaScript 中&#xff0c;slice() 是一个常用的数组方法&#xff0c;用于从现有数组中提取一部分元素&#xff0c;然后返回一个新的数组。它是一个非常有用的工具&#xff0c;可以帮助你在不改变原始数组的情况下操作数组的子集。本文将介绍 slice() 的基本概念、使用方法、…

【HUST】网安纳米|2023年研究生纳米技术考试参考

目录 1 纳米材料是什么 2 纳米材料的结构特性 3 纳米结构的其他特性 4 纳米结构的检测技术 5 纳米材料的应用 打印建议&#xff1a;PPT彩印&#xff08;这样重点比较突出&#xff09;&#xff0c;每面12张PPT&#xff0c;简单做一下关键词目录&#xff0c;亲测可以看清。如…