为 OFORM 表单分配唯一 ID

2023年01月30日作者: Alina

使用 ONLYOFFICE 产品,我们就可以轻松创建和操作可填写的表单。在上一篇博文中,我们向您展示了一个,可以将 CSV/TXT 数据转换为可填写的组合框。

今天,我们来构建一个为可填写的表单分配唯一 ID 的宏,让电子文档更有条理。

Assign a unique id to OFORMS

前期准备

在这个新项目中,我们会实现与上面提到的宏类似的概念。

宏的代码如下:

   function LoadFile() {
        $.ajax({
            url: 'file:///C:/Users/LEOPARD/Desktop/Book1.csv',
            dataType: 'text',
        }).done(successFunction);
    } 
    function successFunction(data) {
    
        var arrAllRows = data.split("\n");
    
        var oComboBoxForm = Api.CreateComboBoxForm({ "key": "Personal information", "tip": "Choose your country", "required": true, "placeholder": "Country", "editable": false, "autoFit": false, "items": arrAllRows });
        var oParagraph = Api.CreateParagraph();
        oParagraph.AddElement(oComboBoxForm);
        oDocument.InsertContent([oParagraph]);
    }
    LoadFile();

通过一个新的宏,我们还会并入“InsertContent”方法。它会在光标定位的地方插入一个元素。而这一次,插入的内容是不同的。

构建宏

为创建这个内容,我们添加了“generate”函数。这里我们创建“key”变量并将其设置为空白。之后,它会存储生成的值。此外,我们还添加了“data”变量,会包含大写和小写字母和数字。这些都是我们唯一 ID 的构建块:

function generate () {
    let key = '';
    const data = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + 
            'abcdefghijklmnopqrstuvwxyz0123456789';
};

然后我们添加一个“for 循环”,会执行 12 次迭代。每次迭代都会返回一个唯一值。因此,12 次迭代会产生 12 个 ID 的唯一字符。然后我们使用“Math.random”方法在每次迭代中得到一个唯一索引。之后,我们用这个索引和“charAt”方法从“data”变量中检索出一个唯一字符。我们将结果分配给“key”变量,并将其返回供后续使用。然后我们调用“generate”函数并将其分配给“id”变量:

   for (let i = 1; i <= 12; i++) {
        let index = Math.floor(Math.random()
                    * data.length + 1);
          
        key += data.charAt(index)
    }
      
    return key;
};
 const id = generate();

现在我们需要将生成的内容插入文档中。首先,我们以活动表单为目标:

var oDocument = Api.GetDocument();

之后,我们创建一个段落,并在其中添加一个文本元素。我们通过在参数中传递“id”变量,将生成的内容封装在这个元素中:

var oParagraph = Api.CreateParagraph();
oParagraph.AddText(id);

然后我们将其插入。“InsertContent”方法会在光标位置上嵌入一个元素。我们还会指定“KeepTextOnly”属性。我们将其设置为“true”,以防止出现定位问题:

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

整个宏代码如下:

function generate () {
    let key = '';
    const data = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + 
            'abcdefghijklmnopqrstuvwxyz0123456789';
      
    for (let i = 1; i <= 12; i++) {
        let index = Math.floor(Math.random()
                    * data.length + 1);
          
        key += data.charAt(index)
    }
      
    return key;
};
const id = generate();
var oDocument = Api.GetDocument();
var oParagraph = Api.CreateParagraph();
oParagraph.AddText(id);
oDocument.InsertContent([oParagraph], { "KeepTextOnly": true })

现在,我们来运行这个宏,看看它是如何运行的!

我们希望您会发现这个宏非常有用,并将其添加到您的工作流中。ONLYOFFICE 宏的用途非常广泛,支持用户以各种方式处理文件。您可以通过实施我们的 API 方法而实现目标,而这个宏只是众多例子之一。

我们建议您进行尝试,开启自己的项目之路。欢迎提出问题或分享您的想法,欢迎您与我们讨论、合作。祝好运!