ONLYOFFICEマクロを使って、CSVやTXTのデータをスプレッドシートに取り込む方法

表形式のデータをCSV形式で保存することは、多くの点で非常に実用的であるため、このタイプのファイルは非常に人気があります。ONLYOFFICE Docsでは、ローカルのCSVファイルやTXTファイルをインポートすることができます。しかし、これらのファイルをダウンロードすることなく、ウェブからインポートしたい場合はどうしたらよいでしょうか？このブログ記事では、それが可能な方法についてのちょっとしたトリックをご紹介します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655664/467e5ae6-2819-b2cf-9701-1e8da617d8bb.png)

以前の記事で、私たちはONLYOFFICEマクロをご紹介しました。これらはJavaScriptベースで、その汎用性の高さはいくら強調してもしきれません。この機能は、リモートCSVファイルやTXTファイルのインポートに取り組むのに役立ちます。ですから、すでにお気づきかもしれませんが、別のマクロを作成することになります。

::: note warn
ご注意! このマクロは、ONLYOFFICE Docsの[デスクトップ版](https://www.onlyoffice.com/download-desktop.aspx)でのみ使用可能です。
:::


## マクロを構築する

まず、ファイルを取得する必要があります。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(',');
}
```

次に、これらの値をセルに挿入します。そのためには、GetCellsメソッドとSetValueメソッドを使用します。最初のメソッドは範囲を選択し、後のメソッドは選択されたセルに値を挿入します。GetCellsメソッドには、行数と列数という2つのパラメータがあります。行と列の数を示すために、i と j 変数を使用し、for-loopの反復ごとにそれらをインクリメントします。

```
 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_calculateメソッドを実装することでそれを行います。このメソッドは、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);
    });
    })();
```

それでは、マクロを実行して、その動きを見てみましょう。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655664/132bdb9e-ae71-21de-1649-124bface283c.png)

この小さなマクロは、JavaScriptの多用途性を示す完璧な例です。そして、これは私たちのAPIメソッドの多くの可能な実装の一つに過ぎないのです。私たちは、自分で独自のスクリプトを作成することを心からお勧めします。いつでもご提案とご協力にオープンなので、皆さんのアイデアやマクロをぜひ私たちと共有してください。

お待ちしています！

### お役立ちリンク
* [ONLYOFFICEマクロのAPI](https://api.onlyoffice.com/plugin/macros?utm_source=qiita&utm_medium=social&utm_id=import_csv-txt_macro&_ga=2.79459540.1392984281.1666959873-1704458868.1654884129)
* [ONLYOFFICEマクロで大気環境データを監視する方法](https://www.onlyoffice.com/blog/2022/09/monitor-air-quality-data-with-onlyoffice-macro/?utm_source=qiita&utm_medium=social&utm_id=import_csv-txt_macro)
* [グラフィックオブジェクトにマクロを割り当てる方法](https://www.onlyoffice.com/blog/2021/09/assigning-macros-to-graphic-objects-in-onlyoffice-spreadsheets/?utm_source=qiita&utm_medium=social&utm_id=import_csv-txt_macro)
* [ONLYOFFICEのGitHubページ](https://github.com/ONLYOFFICE/)