借助 ONLYOFFICE 宏将 CSV 与 TXT 数据转换为可填充组合框

2023年01月05日作者: Alina

最近,ONLYOFFICE 专家团队实现了 ONLYOFFICE 表单编辑器的功能扩展。ONLYOFFICE 表单专为简化电子文档处理工作而打造,可消除许多冗杂任务。一个不错的例子是使用可填写表单来创建销售协议模板。但是,如果您将客户信息存储在了单独的 CSV/TXT 文件中,这该怎么办呢?在本博文中,我们将为您展示如何构建一个宏来导入 CSV/TXT 数据并将其转换为可填充的组合框。Convert CSV and TXT data into a fillable combo box with ONLYOFFICE macro

关于 ONLYOFFICE 表单

ONLYOFFICE 表单继承了文本文档的结构并纳入了多个主要的类:

  • 文本字段
  • 组合框
  • 复选框
  • 图片表单
  • 复杂表单

这些类中包含允许创建文本字段、组合框、下拉列表、单选按钮、图像表单、邮件地址、电话号码以及复杂字段的方法。

我们将在宏中使用组合框类组合框元素中包含了我们将从外部 CSV/TXT 文件中导入的下拉列表值。

Convert CSV and TXT data into a fillable combo box with ONLYOFFICE macro

构建宏

在我们 API 文档的表单部分中介绍了 Api.CreateComboBoxForm 方法。其可使用指定的参数来创建组合框

 var oComboBoxForm = Api.CreateComboBoxForm({"key": "Personal information", "tip": "Choose your country", "required": true, "placeholder": "Country", "editable": false, "autoFit": false, "items": ["Latvia", "USA", "UK"]});

items 参数中包含要显示在下拉列表中的值数组。所以,我们的做法是从外部 CSV/TXT 文件中获取值来对此数组进行替换。

不过,首先我们需要获取外部文件并对其中的数据进行处理。这里我们使用了与导入 CSV/TXT 数据宏相似的策略。ONLYOFFICE 宏是基于 JavaScript 的,这就使得其具有极强的通用性,允许我们使用 AJAX 请求:

function LoadFile() {
        $.ajax({
            url: 'file:///C:/Users/LEOPARD/Desktop/Book1.csv',
            dataType: 'text',https://wpblog.onlyoffice.com//wp-admin/post-new.php?lang=en#
        }).done(successFunction);
    }
        LoadFile();

现在我们已经获取了文件,下一步就是对原始数据进行处理与格式化。这里我们添加了 succesFunction。其会接收数据并将文本按行拆分为项目数组:

 function successFunction(data) {
      var arrAllItems = data.split(/\r?\n|\r/);
}

然后我们将目光转回活动文档,使用 items 参数中的 arrAllItems 数组创建组合框

 var oDocument = Api.GetDocument();
 var oComboBoxForm = Api.CreateComboBoxForm({ "key": "Personal information1", "tip": "Choose your country", "required": true, "placeholder": "Country", "editable": false, "autoFit": false, "items": arrAllItems });

之后我们创建一个段落并在其中加入组合框

  var oParagraph = Api.CreateParagraph();
oParagraph.AddElement(oComboBoxForm);

现在我们需要将组合框插入到文档中。这里有好几种方式,不过我们建议使用 InsertContent 方法。其会在光标所在位置插入一个元素。我们同时还建议在参数中对文本和段落属性进行声明。这可防止出现可能的错误和宏问题:

oDocument.InsertContent([oParagraph], { "KeepTextOnly": true });

完整的宏代码如下:

(function()
{
   function LoadFile() {
      $.ajax({
          url: 'file:///filePath,
          dataType: 'text',
      }).done(successFunction);
    }
        LoadFile();

   function successFunction(data) {
        var arrAllItems = data.split(/\r?\n|\r/);
        var oDocument = Api.GetDocument();
        var oComboBoxForm = Api.CreateComboBoxForm({ "key": "Personal information", "tip": "Choose your option", "required": true, "placeholder": "Option", "editable": false, "autoFit": false, "items": arrAllItems });
        var oParagraph = Api.CreateParagraph();
oParagraph.AddElement(oComboBoxForm);
oDocument.InsertContent([oParagraph], { "KeepTextOnly": true });
    }
})();

现在让我们来运行一下宏,看看效果如何!

注意

  • 如需插入组合框,请在运行宏后按下空格。
  • 如需在文档中插入多个组合框,请在 Api.CreateComboBoxForm 方法中使用不同的 key 参数。

这里的宏只是借助我们的 API 方法可以实现的众多功能之一。我们鼓励各位亲自上手实践,也希望大家能够利用本文中的概念来创建自己的宏。

我们的宏是基于 JavaScript 的,这使得其具有极强的通用性和实用性。欢迎大家随时提问,也欢迎与我们分享您的想法。我们已做好与您探讨和合作的准备。祝您的探索之旅一帆风顺!