-1

CSV ファイルのインポートに関するスクリプトの作成方法については、 Google のInteracting With Your Docs List チュートリアルに従いました。多くの助けを借りて、私はそれを機能させることができました。ただし、コピーまたは何らかの方法で変更しようとすると、次のエラー メッセージが表示されてタイムアウトします。

最大実行時間を超えました。

...そして実行されません。なぜこれが起こるのでしょうか?

これはimportFromCSV()チュートリアルの関数です:

function importFromCSV() {
  var fileName = Browser.inputBox("Enter the name of the file in your Docs List to import (e.g. myFile.csv):");

 var files = DocsList.getFiles();
  var csvFile = "";

  for (var i = 0; i < files.length; i++) {
    if (files[i].getName() == fileName) {
      csvFile = files[i].getContentAsString();
      break;
    }
  }
  var csvData = CSVToArray(csvFile, ",");
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  for (var i = 0; i < csvData.length; i++) {
    sheet.getRange(i+1, 1, 1, csvData[i].length).setValues(new Array(csvData[i]));
  }
}
4

1 に答える 1

2

CSV インポートの例では、CSVToArrayすべての行に対して呼び出しを行います。それは遅いです。

Best Practices Docのアドバイスを確認してください。最初のガイダンスは、他のサービスへの呼び出しを減らすことです。配列のすべての行を更新するように例を変更してから、一var arrData = [[]]度だけ呼び出すと、パフォーマンスが大幅に向上します。

これを置き換えます:

for (var i = 0; i < csvData.length; i++) {
  sheet.getRange(i+1, 1, 1, csvData[i].length).setValues(new Array(csvData[i]));
}

これとともに:

sheet.clear();

var numRows = csvData.length;
var numCols = csvData[0].length; // assume all rows are same width

// Make a single call to spreadsheet API to write values to sheet.
sheet.getRange(1, 1, numRows, numCols).setValues( csvData );
SpreadsheetApp.flush();

var arrData = new Array()また、次のように配列を宣言する代わりに、の数行を変更する必要があることもわかりました: setValues()、私はこれを使用しました: setValues。(JavaScript では) 問題にならないはずですが、(Google Apps Script では) 問題でした。

于 2013-02-04T21:09:40.523 に答える