当前位置: 首页 > 知识库问答 >
问题:

当在Google Sheets中将不连续的新数据添加到行中时,如何根据timstamp自动将条目的序号添加到行中?

狄侯林
2023-03-14

如何使Google sheets根据以下条件自动添加当前行的序号“此特定行上的新条目”?

即使数据不是以行连续的方式输入(例如,第1行的第1个条目(如单元格B1)、第2行的第2个条目(在B2中)、第3行的第3个条目(B3),但第9行的第4个条目(B9)、第11行的第5个条目(B11)、第6行的第6个条目(B7))如何使其工作?

不向中间空行添加序号(例如,当B5/row5、B6/row6、B8/row8、B10/row10等为空时,不向A5/row5、A6/row6、A8/row8、A10/row10等添加序号)?

以下是预期结果:

工作表:根据数据输入时间戳将序号转换为非连续行

到目前为止,我已经提出了这个下拉公式(在A2中预先设置,并下拉到A12):

=IF(B2<>"",MAX($A$2:$A)+1,"")  [in A2]
=IF(B3<>"",MAX($A$2:$A)+1,"")  [in A3]
=IF(B4<>"",MAX($A$2:$A)+1,"")  [in A4]
=IF(B5<>"",MAX($A$2:$A)+1,"")  [in A5]
=IF(B6<>"",MAX($A$2:$A)+1,"")  [in A6]
=IF(B7<>"",MAX($A$2:$A)+1,"")  [in A7]
=IF(B8<>"",MAX($A$2:$A)+1,"")  [in A8]
=IF(B9<>"",MAX($A$2:$A)+1,"")  [in A9]
=IF(B10<>"",MAX($A$2:$A)+1,"")  [in A10]
=IF(B11<>"",MAX($A$2:$A)+1,"")  [in A11]
=IF(B12<>"",MAX($A$2:$A)+1,"")  [in A12]

但是当我在B2、B3、B4、B7、B9和B12中一个接一个地输入数据时,我得到的结果是,它用新的最大值更新所有以前的单元格,这样就不会实现连续。

以下是显示实时结果的gif:

https://i.imgur.com/1I1Dk8f.gifv

如何锁定先前的结果,以便序数计数可以在连续发生时继续到下一个条目?

我咨询过那些与我所寻找的内容接近的帖子:

如何用公式的结果替换公式?

使用此脚本:

function freezeOutput(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SummarySheet");
  var range = sheet.getRange("A1:A10");     
  range.copyTo(range, {contentsOnly:true});
}

匹配条件后停止Excel更新公式

使用这个公式:

=IF(NOW() < C1,2*A1,A2)

或者,此VBA代码:

Function EvaluateIf(expression As String, condition As Boolean) As Variant
    Application.Volatile
    Dim myText As String
    Dim myVal As Variant
    If condition Then
        myVal = Application.Evaluate(expression)
    Else
        myText = Application.Caller.Text
        If IsNumeric(myText) Then
            myVal = Val(myText)
        Else
            myVal = myText
        End If
    End If
    EvaluateIf = myVal
End Function


Function FreezeAfter(expression As String, deadline As Date) As Variant
    Application.Volatile
    Dim myText As String
    Dim myVal As Variant
    If Now > deadline Then
        myText = Application.Caller.Text
        If IsNumeric(myText) Then
            myVal = Val(myText)
        Else
            myVal = myText
        End If
    Else
        myVal = Application.Evaluate(expression)
    End If
    FreezeAfter = myVal
End Function

如何以编程方式复制单元格值?

使用此脚本:

function getRangeValues() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getRange("A2:B4");
  var values = range.getValues();
  return values;
};

在此处使用工作表:以编程方式复制单元格值(72539)

最后:

添加数据时将当前日期添加到工作表中,以使日期不会更改(静态)-谷歌工作表

使用此脚本:

/**
* Creates a Date Stamp if a column is edited.
* https://yagisanatode.com/2018/02/21/add-the-current-date-to-a-sheet-when-data-is-added-so-that-the-date-does-not-changestatic-google-sheets/
*/

//CORE VARIABLES
// The column you want to check if something is entered.
var COLUMNTOCHECK = 6;
// Where you want the date time stamp offset from the input location. [row, column]
var DATETIMELOCATION = [0,-5];
// Sheet you are working on
var SHEETNAME = 'Sheet3'

function onEdit(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  //checks that we're on the correct sheet.
  if( sheet.getSheetName() == SHEETNAME ) { 
    var selectedCell = ss.getActiveCell();
    //checks the column to ensure it is on the one we want to cause the date to appear.
    if( selectedCell.getColumn() == COLUMNTOCHECK) { 
      var dateTimeCell = selectedCell.offset(DATETIMELOCATION[0],DATETIMELOCATION[8]);
      dateTimeCell.setValue(new Date());
      }
  }
}

但我不知道该怎么做。

预期结果应该是在B列中输入相应单元格的数据后,将序号添加到A列中的相应单元格中。

我们怎么做?

共有1个答案

燕雨石
2023-03-14
  • 使用编辑触发器捕获Col B中的事件
  • 在Col B的编辑中获取所有的Col A
  • 计算Col A的最大值并加1
  • 将最大值设置为Col A
function onEdit(e) {
  var rg = e.range,
    row = rg.rowStart,
    col = rg.columnStart,
    sht = rg.getSheet();

  //exit code
  if (col !== 2 || sht.getName() !== 'Sheet1' || row === 1) return;
  
  //Calculate max value and add 1
  rg.offset(0, -1, 1, 1).setValue(//setvalue in colA
    rg
      .offset(2 - row, -1, sht.getLastRow() - 1, 1) //get all of colA
      .getValues()
      .reduce(function(acc, curr) {//get max of colA
        return Math.max(acc, Number(curr[0]));
      }, 0) + 1
  );
}
  • 数组#Reduce
  • 范围#偏移量
  • 事件对象
 类似资料:
  • 我正在读取一个csv文件到。这个csv文件由四列和一些行组成,但没有标题行,我想添加它。我一直在尝试以下方法: 但当我应用代码时,我得到以下错误: 这个错误到底意味着什么?在python中,向我的csv文件/df添加标题行的干净方法是什么?

  • 我有一个如下的数据帧: 我想将其转换为如下内容: B中重复的值是列名称,其值在C列中。我希望它们是数据帧的列 事实上,数据集是通过展平一棵树创建的,其中有更多的列,每个列都是一个内部节点。第一列是根,C是叶 以下是我的一些尝试: 然而,它不起作用。

  • 问题内容: 我正在使用zsh,并且尝试向变量添加新的条目(),但我不知道如何。 最让我困惑的是,我的文件中没有对变量的单一引用,而是返回: 因此,在某处设置了变量。 问题答案: 这里: 编辑 :这确实有效,但是下面的ony答案更好,因为它利用了ZSH为像这样的变量提供结构化接口的优势。这种方法是的标准方法,但据我所知,当ZSH提供更好的替代方法时,没有理由使用它。

  • 假设我有一个10x10的数据帧,我想在开头添加一行,只包含一个值(即新行只有一列)。此外,我希望此行位于列名之上,因此我需要将列名转换为数据框中的实际条目。如果不添加NAs,我将如何执行此操作? 下面是我所拥有的一个示例(nrow=3,列标题和nol=5的数据帧): 这就是我想要的(一个数据帧/某种对象,nrow=5,nol=5,但第一行为NULL值): 感谢您的帮助。

  • 问题内容: 使用标准的Python数组,我可以执行以下操作: 但是,我不能在numpy中做同样的事情。例如: 我也研究了,但是在空数组上使用时,得到: 那么,如何将新行追加到numpy中的空数组? 问题答案: “启动”所需阵列的方法是: 这是一个空数组,但具有适当的维数。 然后确保沿轴0附加: 但是,@ jonrsharpe是正确的。实际上,如果要循环添加,则像第一个示例中那样将其添加到列表中会更

  • 问题内容: 我知道NaN代表Not a Number。但是,我很难理解Oracle何时以及为何将其添加到行中。 是当它遇到小于0的值(如负数)时,还是在其为垃圾值时? 问题答案: 从文件: Oracle数据库数字数据类型存储正,负定点和浮点数,零,无穷大以及作为操作未定义结果的值-“非数字”或。 据我所知,您只能在binary_float或binary_double列中获得NaN 。这些数据类型有