У меня есть 2 функции: imprimirPDF()
, который печатает диапазон в PDF и marcarImpreso()
, который отмечает их как напечатанные в флажке на другом листе. Я пытаюсь объединить оба, чтобы они работали вместе при нажатии кнопки на листе, но это не работает.
Я пробовал вызывать imprimirPDF()
внутри marcarImpreso()
и вызывать оба в новом, а второй работает нормально, но печатный показывает только модальный диалог, который в него написан, это не так. Не открывайте PDF-файл в новом окне. Когда выполняется сам по себе, он работает нормально.
Я думаю возможно это связано с js. html файлом, который он вызывает, так как это то, что открывает PDF-файл в новом окне, но я очень мало знаю о кодировании и написании сценариев, поэтому понятия не имею, как я могу решить эту проблему, чтобы она работала.
Вот скрипты:
Файл Imprimir.gs
function imprimirPDF() {
SpreadsheetApp.flush();
var ss = SpreadsheetApp.getActiveSpreadsheet()
var sheet = ss.getActiveSheet();
var lastRow = sheet.getRange("F3:F").getValues().filter(String).length;
var range = sheet.getRange(3, 1, lastRow, 8)
var PRINT_OPTIONS = {
'size': 7, // paper size. 7=A4
'fzr': false, // repeat row headers
'portrait': false, // false=landscape
'fitw': true, // fit window or actual size
'gridlines': true, // show gridlines
'printtitle': false,
'sheetnames': false,
'pagenum': 'UNDEFINED', // CENTER = show page numbers / UNDEFINED = do not show
'attachment': false,
'top_margin': 0.5,
'bottom_margin': 0.5,
'left_margin': 0.5,
'right_margin': 0.5
}
var PDF_OPTS = objectToQueryString(PRINT_OPTIONS);
var gid = sheet.getSheetId();
var printRange = objectToQueryString({
'c1': range.getColumn() - 1,
'r1': range.getRow() - 1,
'c2': range.getColumn() + range.getWidth() - 1,
'r2': range.getRow() + range.getHeight() - 1
});
Logger.log(printRange)
var url = ss.getUrl().replace(/edit$/, '') + 'export?format=pdf' + PDF_OPTS + printRange + "&gid=" + gid;
var htmlTemplate = HtmlService.createTemplateFromFile('js');
htmlTemplate.url = url;
SpreadsheetApp.getUi().showModalDialog(htmlTemplate.evaluate().setHeight(10).setWidth(100), 'Print range');
}
function objectToQueryString(obj) {
return Object.keys(obj).map(function(key) {
return Utilities.formatString('&%s=%s', key, obj[key]);
}).join('');
}
js. html файл
<script>
window.open('<?=url?>', '_blank', 'width=800, height=600');
google.script.host.close();
</script>
Marcar Impreso. gs файл
function marcarImpreso() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getActiveSheet();
var sheetRange = s.getDataRange();
var sheetValues = sheetRange.getValues();
var ui = SpreadsheetApp.getUi();
var rowKeeper = [];
var rowString = "";
for (var i=sheetRange.getLastRow()-1; i>1; i--) {
// si valor en columna D (medio) <> ""
if ( sheetValues[i][5] != "") {
rowKeeper.push(i);
Logger.log(rowKeeper)
}
}
var response = ui.alert('Se van a marcar los pedidos como IMPRESOS.', rowString, ui.ButtonSet.OK_CANCEL);
// Process the user's response.
if (response == ui.Button.OK) {
for (var j = 0; j < rowKeeper.length; j++){
var i = rowKeeper[j];
var targetSheet = ss.getSheetByName("*MASTER*");
var targetRow = sheetValues[i][2];
var targetRange = targetSheet.getRange(targetRow, 14);
var targetTS = targetSheet.getRange(targetRow, 15);
targetRange.setValue(true);
targetTS.setValue(new Date()).setNumberFormat("dd-mm-yy hh:mm")
}
}
}