Цикл For не возвращает данные - PullRequest
1 голос
/ 21 ноября 2019

В моем листе (см. Пример ниже) я хотел бы собрать данные из столбца A, в котором есть ✓ в столбце M, и экспортировать их как текстовый файл. Когда я запускаю скрипт, я просто получаю пустой текстовый файл.

enter image description here

Ссылка на электронную таблицу: https://docs.google.com/spreadsheets/d/1G6pVruFl0PXHNRy6k3dftt6oIrzbdmOTQiJcWft7NPQ/edit?usp=sharing

Я думаю, что в цикле for номера столбцов верны. 12 для столбца M и 0 для столбца A.

Заметно: переменная var vA = rg.getValues(); не дает результатов для столбцов G, I, M. Кажется, что это проблема. С другой стороны, для столбца H переменная var vA = rg.getValues(); получает результаты ... Упомянутые столбцы содержат различные формулы.

Это формула из столбца G, для которой переменная не дает результатов: = IF (C8 = "", "", VLOOKUP (A8, GoogleFinance! $ B $ 3: $ E $ 1214,4, FALSE)))

Это формула из столбца H, для которой переменная получает результаты: = IFERROR (IF (D8 = "", "", GOOGLEFINANCE (A8, $ H $ 1)), "")

См. Ниже массив для строки 14, которая фактически выполняет условия экспорта:

["CPRT", "Copart, Inc.", (новая дата (1574031600000)), (новая дата (1574118000000)), 3, (новая дата (1574204400000)), "", 86.38, "", 84.92, 19731501254, 19982000000, ""]

А вот скриншот с результатами отладки enter image description here Что я делаю не так?

    function ExportEarningsTrades (filename) {

      var date = new Date();
      var tsmp = Utilities.formatDate(date, "Europe/Berlin", "dd-MM-yyyy_HH-mm-ss")  
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sh = ss.getSheetByName('Ergebnisse');
      var rg = sh.getRange(8,1,sh.getLastRow(),sh.getLastColumn());
      var vA = rg.getValues();    
      var St = "✓";
      var filename = 'E-Trade'+' - '+tsmp+'.txt';
      var txt = "";      
      for(var i=0;i<vA.length;i++) {
          if(vA[i][12]==St) {
              txt+=Utilities.formatString('%s,',A[i][0]);
            }
      }
      var file=DriveApp.createFile(filename,txt,MimeType.CSV);

}

1 Ответ

0 голосов
/ 21 ноября 2019

Вы можете заставить ваш код работать должным образом, скопировав значения из вашего листа "Ergebnisse" во временный лист и запустив ваш код.

function ExportEarningsTrades () {
  var date = new Date();
  var tsmp = Utilities.formatDate(date, "Europe/Berlin", "dd-MM-yyyy_HH-mm-ss")  
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var ts = ss.insertSheet("TemporarySheet");
  var es = ss.getSheetByName('Ergebnisse');
  var rg = es.getRange(8,1,es.getLastRow(),es.getLastColumn());

  //Copy to temporary sheet
  rg.copyTo(ts.getRange(1,1,es.getLastRow()-8,es.getLastColumn()), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);

  var vA = ts.getDataRange().getDisplayValues();
  var St = "✓";
  var filename = 'E-Trade'+' - '+tsmp+'.txt';
  var txt = "";
  for(var i=0;i<vA.length;i++) {
    if(vA[i][12]==St) {
      txt+=Utilities.formatString('%s,',vA[i][0]);
    }
  }
  var file=DriveApp.createFile(filename,txt,MimeType.CSV);

  //Remove temporary sheet
  ss.deleteSheet(ts);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...