【问题标题】:Track entry into blank row跟踪进入空白行
【发布时间】:2019-02-12 19:24:38
【问题描述】:

我有一个列出我们公司客户的电子表格(A21:A250 已格式化,但目前只有 A21:A106 有数据)。我想做的是在进入下一个空白行时计算新客户。我尝试了几种不同的方法,但无济于事。这是我一直在做的事情。

我已经尝试过工作表本身的公式(COUNTIF 不是空白)。这就像它应该的那样,但问题是我需要按月捕获新客户(A 之后的列数月)。我创建了另一个电子表格,其中有一个按钮,我每月单击一次以导入数据,从而捕获当天的这些数字。

function newCustomers() {
  ss = SpreadsheetApp.getActiveSpreadsheet();
  sourceSheet = ss.getSheetByName('BACKLOG');
  var lrow = sourceSheet.getLastRow();
  var range = sourceSheet.getRange(21, 1, lrow, 1);
  var data = range.getValues();
  var countNew = 0;

  for (var i=0; i<data.length; i++) {
    if (data[i][0] !== null) {
    countNew++
   }
 }
   Logger.log('New Customers' + countNew)
}

上述代码有效,但每次运行时都会在日志中报告 250(范围中的最后一个空白列)。如何将其更改为仅计算 A 列中没有输入数据的单元格?

【问题讨论】:

  • "" 不严格等于 null。空单元格被读取为""(与当前返回"" 的公式的单元格一样)。因此,由于获取的单元格值都不完全是null,因此您将得到 250 作为报告的结尾。
  • 当然,谢谢!我知道我只是错过了一些简单的东西。我觉得它就在我的脑海里。

标签: google-apps-script google-sheets


【解决方案1】:

试试这个:

function newCustomers() {
  var ss=SpreadsheetApp.getActive();
  var srcsh=ss.getSheetByName('BACKLOG');
  var startrow=21;
  var rg=srcsh.getRange(startrow, 1, srcsh.getLastRow()-startrow + 1, 1);
  var dA=rg.getValues();
  var count=0;
  for (var i=0;i<dA.length;i++) {
    if(dA[i][0] && dA[i][0].length>0) {
      count++;
    }
  } 
  var html=Utilities.formatString('Count: %s', count);
  SpreadsheetApp.getUi().showModelessDialog(HtmlService.createHtmlOutput(html),'Count');
}

【讨论】:

  • 我上面的代码有效,但我更喜欢你的代码。不过我确实想到了一件事,我设置它的方式并没有真正将当前数字与前一个数字进行比较,所以如果我在一月份添加一个新客户,它将在我运行脚本时再次计算二月里。在我现在使用的脚本中,我从变量 newCustomers(仅在 1 月有效)中减去 86(1 月 1 日的客户数)。处理这个问题的最佳方法是什么?我可以设置另一个等于 newCustomer 的变量来比较下个月吗?
  • 您是否有另一列显示他们成为客户的日期?
  • 我确实有一个专栏 F,其中有他们成为客户的一周年纪念日。我会看看我能用它做什么!
  • 获取该日期的月份以生成报告new Date(dA[i][?]).getMonth()
猜你喜欢
  • 2014-10-13
  • 1970-01-01
  • 1970-01-01
  • 2012-11-17
  • 1970-01-01
  • 1970-01-01
  • 2014-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多