Почему мой цикл for выполняет дополнительную итерацию и не копирует в правильные ячейки

1

Когда я запускаю свой (беспорядочный) скрипт, кажется, он запускает дополнительное время, чем требуется. т.е. ниже последней строки он создает PDF файл и отмечает ячейку как обработанную.

Вторая проблема заключается в том, что URL-адреса не отображаются правильно с именем, которое должно быть.

Я ценю, что код очень грязный, но я рад объяснить причины для любой части, если это не имеет смысла.

Заранее благодарю за любую помощь!

Таблицу можно найти здесь:

https://docs.google.com/spreadsheets/d/1nq5RRcwAKk9sFm6jVypFT_qJWcOGxFDZRv6ZpB-QClw/edit#gid=1194576382

и код, который работает не так, как ожидалось:

var ss = SpreadsheetApp.getActiveSpreadsheet()
var rawData = "rawData"
var practicePivot = "practicePivot"
var querySheet = "querySheet"
var pdfSheet = "pdfSheet"
var contactList = "contactList"

function createPDF(){

var sourceSheet = ss.getSheetByName("querySheet")
var pdfList = ss.getSheetByName("practicePivot")
var contactList = ss.getSheetByName("contactList")
var sourceRow = sourceSheet.getLastRow()
var sourceColumn = sourceSheet.getLastColumn()
var sourceStartRow = 4 //skips the headers and only pulls query data
var sourceStartColumn = 1
var sourceRange = sourceSheet.getRange(sourceStartRow, sourceStartColumn, sourceRow, sourceColumn)
var sourceValues = sourceRange.getValues()
var pdfLastRow = pdfList.getLastRow()
var storePracticeName = sourceSheet.getRange("A2").getValues()


var newSpreadsheet = SpreadsheetApp.create("Summary of Patients for" +storePracticeName)

sourceSheet.copyTo(newSpreadsheet, {contentsOnly: true})
newSpreadsheet.getSheetByName("sheet1").activate()
newSpreadsheet.deleteActiveSheet()


var pdfURLtemp = DriveApp.getFileById(newSpreadsheet.getId()).getAs("application/pdf")
var pdf = DriveApp.createFile(pdfURLtemp)
var pdfURL = pdf.getUrl()
Logger.log(pdfURL)
return pdfURL


}


function createQuery() 
{

//Duplication check
var pdfCreated = "pdfCreated";
var pdfEmailed = "pdfEmailed";

var sheet = ss.getSheetByName("practicePivot");
var startRow = 2; 
var lastRow = sheet.getLastRow();
var lastColumn = sheet.getLastColumn();

var dataRange = sheet.getRange(startRow, 1, lastRow, lastColumn)  ;
var data = dataRange.getValues();


for (var i = 0; i < data.length; ++i)
  {

    var row = data[i];
    var practiceName = row[0]
    var pdfCheck = row[2]

    var copySelection = sheet.getRange(startRow + i, 1)
    var copyData = copySelection.getValues()
    var copyLocation = ss.getSheetByName("querySheet")
    var copyCell = copyLocation.getRange("A2")

    if (pdfCheck != pdfCreated)
      {
      var pdfURL = createPDF()
      copyCell.copyTo(copyData)
      sheet.getRange(startRow + i, 4).setValue(pdfURL)
      sheet.getRange(startRow + i, 3).setValue(pdfCreated)
            SpreadsheetApp.flush()

      }

  }
}
  • 0
    Попробуйте использовать i++ not ++i Stack Overflow answer
  • 0
    Привет Сэнди, спасибо за предложение. Я только что попробовал i ++, и он все еще создал дополнительный PDF. Дополнительный PDF-файл "пуст" и помещается в место, где должен быть тест 1 PDF. «test 1» pdf помещается в пустую строку.
Теги:
google-apps-script

1 ответ

0
Лучший ответ

Стартовая строка: 2:

var startRow = 2;

Ваша петля зацикливается до отсчета последней строки. Поэтому, если было 10 строк, и данные начинаются в строке 2, вам нужно, чтобы цикл выполнялся 9 раз. Но ваш цикл работает 10 раз.

Поэтому вам нужно отрегулировать стоп для цикла.

var L = data.length - 1;//The number of rows in the data - not the sheet
for (var i = 0; i < L; ++i)
  • 0
    Я сейчас дома, поэтому не могу это проверить, но это имеет для меня смысл! Спасибо за помощь! Может ли это быть причиной того, что setValues не находится в нужных ячейках?
  • 0
    Нет, это вызвано ++i При первом запуске цикла значение i равно 1. Итак, начальная строка начинается с 3. Если это решит вашу проблему, вы можете нажать на большую зеленую галочку, чтобы отметить ответ. как правильно.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню