如何使用查询/导入范围

时间:2019-07-12 22:00:14

标签: google-apps-script google-sheets google-sheets-formula

我正在尝试设置2个Google工作表文件,其中文件1负责当天的购买;日期,客户名称,付款方式,付款金额以及表格中的付款金额。文件2将复制文件1中的内容,基本上充当该月的长期记录。我正在使用QUERY和IMPORTRANGE导入数据,并且也将其存储在文件2仅在购买日期位于该特定月份的情况下才复制的位置。

我的问题是,如果我擦除文件1中的任何内容,它将擦除或更改文件2中的任何内容。因此,如果我们今天有3笔购买,而我在一天结束时擦除了它们,则它们将在文件2中被擦除,如下所示:好。我需要帮助,找到一种方法,文件2可以复制数据,但是如果文件1可以擦除数据,则不会擦除任何内容。

我尝试用谷歌搜索答案,但是找不到。

这是我在文件2中使用的公式:

  • 日志是一个命名范围,指向我要从中复制文件1的地方

=QUERY((IMPORTRANGE("File 1 url (Erased for security reasons)", "Logs")),"select Col1,Col2,Col3,Col4,Col5, Col6,Col7 where Col1 >= date '"&TEXT(DATEVALUE("7/1/2019"),"yyyy-mm-dd")&"' and Col1 < date '"&TEXT(DATEVALUE("8/1/2019"),"yyyy-mm-dd")&"'",0)

1 个答案:

答案 0 :(得分:0)

这里的问题是您的第二张纸将根据第一张纸的运行编辑进行更新。如果要将值保留在归档表中,则需要复制值,并在要复制的单元格之间建立链接。

您可以使用一个小型的Apps脚本功能来实现此目的,该功能可以从绑定脚本到电子表格之一,也可以是独立脚本:

function copyFromOneSheetToAnother() {
  var sheet1 = SpreadsheetApp.openById("ID of Spreadsheet to copy from");
  var sheet2 = SpreadsheetApp.openById("ID of Spreadsheet to copy to");
  var currDate = new Date();
  var editedDate = new Date(currDate - 86400000);

  var insert = sheet1.getSheetByName("Name of sheet to copy from");
  var archive = sheet2.getSheetByName("Name of sheet to copy to");
  var insertData = insert.getRange(2, 1, (sheet1.getRange('A:A').getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow()), 28);

  for (row = 2; row <= insertData.getNumRows(); row++){
    var data = insert.getRange(row, 1, 1, 28).getValues();

    if (data[0][0] < currDate && data[0][0] > editedDate){
     archive.getRange((archive.getLastRow() + 1), 1, 1, 28).setValues(data).setNumberFormat("MM/dd/yyyy");
    }    
  }  
}