我注意到正在发生的一件事,这是由于谷歌表单的工作方式造成的。在同一工作簿中,我有一个名为 Test 的工作表,它是来自链接的谷歌表单的表单响应表,还有另一个名为 pedidos 的工作表,这是我从测试中查询数据的工作表,以便我可以在该工作表上添加公式。该脚本每天运行,因此我可以在这些工作表上获得干净的每日数据,因为这些数据仅在当天有用。我在 pedidos 表上有一个查询公式“=QUERY(Test!A2:X100)”在 b2 单元格上,当我在 pedidos 表上运行此脚本并且 google 表单再次运行时,pedidos 表中的公式更改为“=QUERY” (Test!A3:X100)”,但是测试表中的数据一直在 Test!a2 上开始,我认为这是因为在测试表中,当 google 表单添加数据时,它会添加一行,并且该行为反映在 pedidos 表上,在所以改变pedidos表上的公式,有没有办法可以避免这种情况发生,这样就不会破坏公式?我可以在这个脚本中添加一些东西来保持“=QUERY(Test!A2:X100)”完整吗?
提前感谢您对此提供的任何帮助。
function sendExcelAndDeleteRows() {
var spreadsheetId = "###"; //
var emailAddress = "###"; //
var subject = "Excel Sheet - Pedidos";
var message = "Please find attached the Excel sheet for Pedidos.";
// Export Pedidos sheet to Excel format
var pedidosSheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName("Pedidos");
var pedidosDataRange = pedidosSheet.getDataRange();
var pedidosValues = pedidosDataRange.getValues();
var pedidosHeader = pedidosValues[0];
var pedidosNewRange = pedidosSheet.getRange(1, 2, 1, pedidosHeader.length - 1);
pedidosNewRange.setValues([pedidosHeader.slice(1)]);
var dateToday = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "dd-MM-yyyy");
var pedidosFileName = "Pedidos_" + dateToday + ".xlsx";
var pedidosFile = DriveApp.createFile(pedidosFileName, pedidosDataRange.getValues(), MimeType.MICROSOFT_EXCEL);
MailApp.sendEmail(emailAddress, subject, message, {attachments: [pedidosFile]});
// Delete rows after row 1 in Test sheet
var testSheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName("Test");
testSheet.deleteRows(2, testSheet.getLastRow() - 1);
// Get the last rows in the data range of Pedidos sheet
var lastColumn = pedidosDataRange.getLastColumn();
var lastRow = pedidosDataRange.getLastRow();
// Clear range after column B & row 2
pedidosSheet.getRange(2,3,lastRow,lastColumn).clearContent()
// Delete the temporary file
pedidosFile.setTrashed(true);
}
function createTrigger() {
ScriptApp.newTrigger('sendExcelAndDeleteRows')
.timeBased()
.onWeekDay(ScriptApp.WeekDay.TUESDAY, ScriptApp.WeekDay.WEDNESDAY, ScriptApp.WeekDay.THURSDAY, ScriptApp.WeekDay.FRIDAY)
.atHour(20)
.nearMinute(30)
.create();
}
对于这种特殊情况,您可以通过使用indirect() 代替当前的查询公式来硬编码范围
A2:X100
:
=indirect("Test!A2:X100")