【问题标题】:How do I extract a specific Column from google sheets using Google Script?如何使用谷歌脚本从谷歌表格中提取特定列?
【发布时间】:2020-01-17 00:14:47
【问题描述】:

所以我有一个由谷歌表单提供的膳食清单电子表格。员工每晚在一天结束时计算膳食,每列的每个第二个单元格都有一个标题:初始,星期一,星期二你明白了。我想在某些商品快速售出时通知自己,以便补货。我的问题是我可以使用

轻松获取最近一晚的数据

.getLastColumn();

但我想基于列的第二个单元格中具有“初始”的最新列中的每个 lastColumn 数据,并将它们放在单独的工作表上的 2 列数组中。有任何想法吗?到目前为止,这是我的脚本;

function activeData() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var Sheet = ss.getSheetByName("IREmaildata");
  var lastCol = Sheet.getLastColumn();
  
        var rangeInitial = Sheet.getDataRange(); // Not sure if this would be correct?
        var initial = rangeInitial.getValues();
        var int = "Initial";               //the 3rd cell in "Initial" column must say "Initial".
             
         var rangeLastnight = Sheet.getRange(1,lastCol,37,1); //I can easily get the data from the most recent googleForm submission.
         var lastNight = rangeLastnight.getValues();          //I can easily get the data from the most recent googleForm submission.
       /*
         probably some type of logic will go here?
         
       */  
         ss.getSheetByName("Sheet5").getRange(1,2,37,1).setValues(yesterday);
         ss.getSheetByName("Sheet5").getRange(1,3,37,1).setValues(today);
 
  }

我的电子表格; https://docs.google.com/spreadsheets/d/1X_UcqyXXRMyjZ2j46TymMrIMWvt19HOZTTaEUlIVqwE/edit?usp=sharing

【问题讨论】:

  • 为了正确理解您的目标,您能否提供包含您期望的输入和输出的示例电子表格?当然,请删除您的个人信息。
  • 当然,抱歉回复晚了; docs.google.com/spreadsheets/d/…
  • 感谢您回复并提供示例电子表格。根据您的信息,我提出了一个示例脚本作为答案。你能确认一下吗?如果我误解了您的问题并且这不是您想要的结果,我深表歉意。

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


【解决方案1】:
  • 在您的共享电子表格中,IREmaildataSheet5 表格分别是您期望的输入和输出。
  • 从您的共享电子表格中,您想从表格IREmaildata 中检索值。
    • 您要检索最后一列 (Most recent Night Dynamic Column),并检索第二行具有 Initial 且距最后一列最近的列 (Begining of the week Dynamic Column)。以及“A”列。
    • 并且您想将计算出的值放入新列 (Precenatage sold Static Column)。
    • 对于您的共享电子表格,您希望将“A”、“V”、“Y”列和计算值检索到电子表格中的其他工作表。
  • 您希望使用 Google Apps 脚本实现此目的。

如果我的理解是正确的,那么这个答案呢?请认为这只是几个可能的答案之一。

流程:

此示例脚本的流程如下。

  1. 从工作表IREmaildata 的数据范围中检索值。
  2. 从值中检索最后一列的索引。
  3. 在第 2 行检索值为Initial 的列的索引。
  4. 检索列“A”,即第 2 行中值为 Initial 的列的索引,即最后一列的索引。
  5. 计算百分比并将值放入数组以放入电子表格。
  6. 将结果值放入电子表格。

示例脚本:

请将以下脚本复制并粘贴到共享电子表格的容器绑定脚本中。请准备好目标表并将目标表名称设置为destSheetName,然后运行函数activeData

function activeData() {
  var destSheetName = "###";  // Please set the destination sheet name.

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("IREmaildata");
  var values = sheet.getDataRange().getValues();
  var lastColumnIndex = values[1].length - 1;
  var initialIndex = 0;
  for (var i = lastColumnIndex - 1; i >= 0; i--) {
    if (values[1][i] == "Initial") {
      initialIndex = i;
      break;
    }
  }
  var result = values.map(function(row, i) {
    var ar = [row[0], row[initialIndex], row[lastColumnIndex]];
    if (i == 0) {
      ar.push("");
    } else if (i == 1) {
      ar.push("Since Begining of week");
    } else if (i > 1) {
      var temp = 1 - (row[lastColumnIndex] / row[initialIndex]);
      ar.push(isNaN(temp) ? "None sold" : temp);
    }
    return ar;
  });
  var destSheet = ss.getSheetByName(destSheetName);
  destSheet.getRange("D3:D").setNumberFormat("0.00%");
  destSheet.getRange(1, 1, result.length, result[0].length).setValues(result);
}

注意:

  • 在上面的脚本中,getValues() 用于从工作表IREmaildata 中检索值。在这种情况下,日期值作为日期对象检索。如果要修复日期格式,例如,请将var values = sheet.getDataRange().getValues();修改为var values = sheet.getDataRange().getDisplayValues();

参考资料:

【讨论】:

  • @Mauricio Alvarez 感谢您的回复。我很高兴你的问题得到了解决。也谢谢你。
猜你喜欢
  • 1970-01-01
  • 2021-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多