見出し画像

OfficeScripts | セルへの書き込み

こんにちは。ふらです。今日はOfficeScriptsでのセルの書き込みについてお話していきたいと思います。


セルへ書き込む

OfficeScriptsでセルへ書き込みをする場合には、getCellメソッドまたはgetRangeメソッドの引数に書き込み位置を指定して、setValueメソッドの引数に書き込み内容を指定します。下記コードをご確認願います。

function main(workbook: ExcelScript.Workbook) {

    //シートオブジェクト取得
    let sh = workbook.getWorksheet("Sheet1"); //シート名を取得
    
    //セルへ書き込み
    sh.getCell(0, 0).setValue(1); //A1セル
    sh.getRange("A2").setValue("ABC");

}

OfficeScriptsで気を付けるべき点は、getCell(0,0)がA1セルを指定することです。VBAやGoogleAppsScriptでは(1,1)がA1セルとなっていますので、getCellメソッドを使って指定する際には注意しましょう。

getCellを使ってfor文で大量に書き込まないこと

VBAではマシンパワーがありますので、セルに対してfor文を使ってデータを書き込むことが容易ですが、OfficeScriptsはクラウドで実行されますので、1つ1つのセルにfor文で書き込むと極端に処理が遅くなります。
下記のようなコードは書かないように注意しましょう。

//非推奨のコードの書き方
function main(workbook: ExcelScript.Workbook) {

    //シートオブジェクト取得
    let sh = workbook.getWorksheet("Sheet1"); //シート名を取得

    //getCellを使ったセルへ書き込み
    for (let row = 0; row < 1000; row++) {
        sh.getCell(row, 0).setValue(row);
    }

}

大量のデータは配列を使って書き込もう

WebでExcelへ大量の書き込みをしたいときは配列を使って書き込みましょう。読み取り回数、書き込み回数を減らすことで、OfficeScriptsのパフォーマンスは劇的に向上します。OfficeScriptsにおいては必須のやり方ですのでぜひ参考にしてみてください。

//配列を使った推奨のコードの書き方
function main(workbook: ExcelScript.Workbook) {

    //シートオブジェクト取得
    let sh = workbook.getWorksheet("Sheet1"); //シート名を取得

    //配列を作成
    const records: number[][] = [];
    for (let row = 0; row < 1000; row++) {
        records.push([row]);
    }

    //配列を使ったデータの書き込み
    sh.getRangeByIndexes(0, 0, records.length, records[0].length).setValues(records);

}

これにより、非推奨のコードでは1000回Excelに書き込んでいたものが1回Excelに書き込むだけで済みますので、OfficeScriptsの処理速度が格段に速くなります。


#OfficeScripts #Officeスクリプト #プログラミング #自動化 #業務効率化 #エクセル #M365 #ExcelOnline #osts

この記事が気に入ったらサポートをしてみませんか?