使用 ONLYOFFICE 宏向电子表格中导入 CSV 与文本数据

2022年10月18日作者: Alina

使用 CSV 格式来存储表格类型数据是一种非常常见的实践方式,这也使得 CSV 格式成为了一种十分流行的选项。您可使用 ONLYOFFICE 文档来导入本地 CSV 和 TXT 文件。但是,如果我们想从 Web 端导入这些文件,但又不想去下载的话,该怎么办呢?在本文中,我们将分享一个小技巧。

Use ONLYOFFICE macro to import CSV and TXT data into your spreadsheet

之前的帖子中我们提到了 ONLYOFFICE 宏。宏是基于 JavaScript 的,所以其通用性不言而喻。本功能将帮助我们对远程 CSV 和 TXT 文件的导入工作进行处理。相信大家已经猜到了:我们将编写另一个宏。

注意!本文中提供的宏仅可在桌面版本的 ONLYOFFICE 文档中使用。

构建宏

首先我们需要获取文件。JavaScript 是 Web 开发的基石,其中内置了所有必要的工具。在本例中,我们将使用 AJAX 请求:

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

现在我们已经获取到了数据,但由于其是原始数据,所以我们还需要对其进行格式化。首先我们将其拆分为行:

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

然后获取活动表格:

var oWorksheet = Api.GetActiveSheet();

我们已经将数组数据拆分为了行,现在我们将其进一步拆分为单独的单词:

   for (var singleRow = 0; singleRow < arrAllRows.length; singleRow++) {
            var rowCells = arrAllRows[singleRow].split(',');
}

接着就是将这些值插入单元格中。为此我们将使用 GetCellsSetValue 方法。第一个方法会对范围进行选择,后一个方法可将值插入至选定的单元格中。GetCells 方法可接收两个参数:一个是行号,另一个是列号。为了表示行数和列数,我们将使用 ij 变量并在每次 for 循环中对其进行迭代递增:

 for (var rowCell = 0; rowCell < rowCells.length; rowCell++) {
               oWorksheet.GetCells(i,j).SetValue(rowCells[rowCell]);
                j = j + 1;
            }
            i = i + 1;
            j = 1;
        }
    }

最后,为了展示新值,我们需要重新计算整个文档。这里通过实现 Api.asc_calculatemethod 来完成此项工作。其实我们之前在 Air Quality 宏中已经使用过这一方法了。其允许我们每过一定的间隔重新计算传入数据。不过这里我们将移除间隔参数。这样文档将会立即重新计算:

  let reload = setInterval(function(){
      Api.asc_calculate(Asc.c_oAscCalculateType.All);
    });

完整的宏代码如下:

(function() {
          function LoadFile() {
        $.ajax({
           url: 'your url',
            dataType: 'text',
        }).done(successFunction);
    }
    function successFunction(data) {
    var arrAllRows = data.split(/\r?\n|\r/);
    var oWorksheet = Api.GetActiveSheet();

    //reference point
    var i = 1;
    var j = 1;

        for (var singleRow = 0; singleRow < arrAllRows.length; singleRow++) {
            var rowCells = arrAllRows[singleRow].split(',');
            for (var rowCell = 0; rowCell < rowCells.length; rowCell++) {
                oWorksheet.GetCells(i,j).SetValue(rowCells[rowCell]);
                j = j + 1;
            }
            i = i + 1;
            j = 1;
        }
    }
    LoadFile();
    let reload = setInterval(function(){
      Api.asc_calculate(Asc.c_oAscCalculateType.All);
    });
    })();

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

Use ONLYOFFICE macro to import CSV and TXT data into your spreadsheet

这里介绍的宏就是 JavaScript 多功能性的完美展现。同时,其也只是众多 API 方法的可能实现中的一种。我们强烈建议您上手试试,创建自己的脚本。欢迎随时与我们分享您的想法和宏。我们将随时做好与您探讨和合作的准备。祝您的探索之旅一帆风顺!