Google 表格脚本正在删除我不想删除或清除的列中的公式

问题描述 投票:0回答:2

我陷入了一个非常烦人的情况,我有一个用于谷歌表格的脚本,我们在工作簿中的其他几张表格中有两张表格,该脚本会将一张表格“Pedidos”作为 Excel 文件通过电子邮件发送,然后删除行在“Pedidos”和“Test”中,在“Test”中它删除标题下方的所有行,而“Pedidos”它应该删除A列和标题之后的所有行,我这样做是因为在“Pedidos”的A列中我有一个我不想删除的公式,因此它保留在 A 列的所有单元格中以供将来使用。该脚本设置为周二至周五晚上 8:30 运行。一切正常,除了当我运行它时,它会继续并删除“Pedidos”表中的上述 A 列,其中公式应该保留。任何帮助将不胜感激!这是我正在使用的脚本:

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(), "yyyy-MM-dd");
  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);

  // Delete rows after column A in Pedidos sheet
  var lastColumn = pedidosSheet.getLastColumn();
  var lastRow = pedidosSheet.getLastRow();
  if (lastColumn > 1) {
    pedidosSheet.deleteColumns(2, lastColumn - 1);
  }
  pedidosSheet.deleteRows(2, lastRow - 1);

  // 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();
}
google-sheets google-apps-script delete-row
2个回答
0
投票

您可以直接清除第 1 行和 A 列之后的数据范围的内容,而不是尝试删除列和行:

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(), "yyyy-MM-dd");
  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 A & row 1
  pedidosSheet.getRange(2,2,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();
}

0
投票

现在我也注意到正在发生的事情。这是由于谷歌表单的工作方式造成的。测试表是一个表单响应表,pedidos 表是我在其中查询测试数据的表,以便我可以在该表上添加公式。现在,当我在pedidos表上运行此脚本时,查询公式“=QUERY(Test!A2:X100)”在脚本运行后位于b2上,它更改为“=QUERY(Test!A3:X100)”,我假设是因为在测试 cheet 中,当表单添加数据时,它会添加一行并反映在 pedidos 表上,有没有办法可以避免这种情况发生,这样就不会破坏公式?

© www.soinside.com 2019 - 2024. All rights reserved.