Когда я запускаю свой (беспорядочный) скрипт, кажется, он запускает дополнительное время, чем требуется. т.е. ниже последней строки он создает PDF файл и отмечает ячейку как обработанную.
Вторая проблема заключается в том, что URL-адреса не отображаются правильно с именем, которое должно быть.
Я ценю, что код очень грязный, но я рад объяснить причины для любой части, если это не имеет смысла.
Заранее благодарю за любую помощь!
Таблицу можно найти здесь:
и код, который работает не так, как ожидалось:
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()
}
}
}
Стартовая строка: 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)
++i
При первом запуске цикла значение i
равно 1. Итак, начальная строка начинается с 3. Если это решит вашу проблему, вы можете нажать на большую зеленую галочку, чтобы отметить ответ. как правильно.
i++
not++i
Stack Overflow answer