3

gspreadしばらく問題なく使用しています。最近50000、Google スプレッドシートに更新するときにセルを調べました。私は取得しています

File "build\bdist.win32\egg\gspread\httpsession.py", line 81, in request raise HTTPError(response) HTTPError

接続がタイムアウトするほど更新に時間がかかりましたか?

更新するセル範囲はA1:CL560. 50000出力をセルのすぐ下にスライスしたところ、コードは正常に機能しました。

私が使用しているコードは、github で参照されているものです。

cell_list = worksheet.range('A1:C7')

for cell in cell_list:
    cell.value = 'O_o'

# Update in batch
worksheet.update_cells(cell_list)

50000細胞の下ではすべて問題ないようです。何をすべきかわからない。

これはエラーです:error: [Errno 10054] An existing connection was forcibly closed by the remote host

接続を維持しようとしましたが、まだ機能しません。

4

3 に答える 3

1

少し遅れましたが、この問題に遭遇しました。setvalues をチャンクで実行することで解決しました。以下の GoogleScript を使用したソリューションを参照してください。それは少し複雑ですが、私が進んでいくうちにそれを理解していました:)

 function importtxt(url) {   
  var parameters = {method : "get", payload : "", muteHttpExceptions: true, validateHttpsCertificates: false};
  var result = UrlFetchApp.fetch(url, parameters);
  var responseCode = result.getResponseCode();

  var contents = result.getContentText().toString().replace("^[^<]*", "");
  var line = contents.split("\n");

  var j = 0;
  var start = 1;
  var chunk = new Array();
  var chunksize = 5000;
  var rows = contents.length;

  var ImportData = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ImportData");
  var range = ImportData.getRange("B2:B").clearContent();

  for (var i = 0; i < rows; i++) {
    if ( line[i]) {
      chunk.push([line[i]]);
      j++;
      if ( j > chunksize || i == contents.length ) {
        j += start - 1;
        var end = j;
        Logger.log("writing chunk to " + start + " : " + j + " : " + chunk.length);
        // write chunk to sheet, i will denote the start
        var range = ImportData.getRange("A" + start + ":A" + j);
        range.setValues(chunk);
        // set variables for next run
        start = end + 1;
        var chunk = new Array();
        j = 0;
      }
    }
  }
  Logger.log("finished - last row was " + end + " but last row should have been " + contents.length);
  if ( j < i ) {
    j += start - 1;
    var end = j;
    Logger.log("writing end chunk to " + start + " : " + j + " : " + chunk.length);
    // write chunk to sheet, i will denote the start
    var range = ImportData.getRange("A" + start + ":A" + j);
    range.setValues(chunk);
  }
  return;
}
于 2016-06-17T08:02:24.357 に答える
0

Google スプレッドシートには複雑さの制限があります。セルが更新されるたびに、そのセルを参照するセルが再計算されます。数式が複雑になりすぎたり、計算に時間がかかりすぎたりすると、スプレッドシートは計算中にタイムアウトします。50000 以上を読み取るために、スプレッドシートの複雑さを軽減できます。ここを見 てください

于 2015-10-28T13:09:23.290 に答える