Excel VBA> Javascript:遍历行插入单元格值不同的行

时间:2017-12-09 01:00:46

标签: javascript excel-vba google-sheets-query vba excel

我很难在Googlesheets中运行javascript来执行以下操作:

  • 循环列A:将上述单元格值与下面的单元格值进行比较
  • 其中,例如说A2与A3不同,然后在其下方插入两行
  • 复制第一个空白行上方的最后一个值,并将一行向下偏移到第一个新插入的空白行并粘贴它。

现在我设法找到了类似于我在基本级别尝试做的事情的例子(因此我的问题在这里): Insert row between different data正是因为我得到了这个:

function doSomething() {
 var spreadsheet = SpreadsheetApp.openById('mySheetID'),
     tab = spreadsheet.getSheets()[0], // Get the first tab
     values = tab.getRange(2, 1, tab.getLastRow(), 3).getDisplayValues(),     //Get the values beginning in the second row because of the headers
     newValues = [], // Empty array where we're gonna push the new values
     lastName;
    // Loop through all the values
 for(var i = 0; i <values.length; i++){
   // If the last name is different from the current name or the last date is different from the current date add an empty "row" to the new array
   if((lastName != undefined) && (values[i][1] != lastName)){
     newValues.push(['','','']);
   }
   //Add the current row to the new array
   newValues.push(values[i]);
   //Sets the lastDate and lastName to the current values for the next evaluation
   lastName = values[i][1];
 }
 //Sets the new values
 tab.getRange(2,1,newValues.length,3).setValues(newValues)

},

这会插入一个新行,但每隔一行插入一个新行,所以我怀疑它正在拾取C列中的数据(每行上的数据不同),而不是列A中的数据。 我已经Google搜索了很多,甚至找到了如何用SpreadsheetApp.openById位打开工作表,所以我正在寻求帮助,或者你是否可以指出以上代码的内容。我知道这是非常有帮助的评论,但正如我所说,我是javascript的新手。

如果它有帮助,那么Excel / VBA脚本可以完美运行:

Sub InsertRowsAtValueChange()
    Dim i As Long
    Application.ScreenUpdating = False
    For i = Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1
        If Range("A" & i - 1).Value <> Range("A" & i).Value Then
            Rows(i).Resize(2).Insert
            Range("M" & i).Value = Range("A" & i - 1).Value
        End If
    Next
    Application.ScreenUpdating = True
End Sub

他们是以下VBA问题中的一些图表,但在这里看不到如何做到这一点,抱歉:https://www.mrexcel.com/forum/excel-questions/1034334-insert-blank-row-offset-copy-paste.html#post4964822

感谢您的时间和任何帮助,我没有使用javascript的经验,抱歉。

最大

  • 快速更新09/12/17:

我已经设法从我的“愿望清单”中获得第一和第二部分。我不完全理解它,但我已经评论过我可以在以后提醒自己:

function importFromSDE() {
  
// Open the Google Sheet
 var spreadsheet = SpreadsheetApp.openById('mySheetID'),
     
// Get the tab by name
     tab = spreadsheet.getSheetByName('Testing'), 
 
// Get the values beginning in the second row because of the headers     
// Values from Row 2, Column 1, Down to last row, across 11 columns
     values = tab.getRange(2,1,tab.getLastRow(),11).getDisplayValues(),
     
// Empty array where we're gonna push the new values       
     newValues = [],
     lastT1Item;

// Loop through all the values
  for(var i=0; i<values.length; i++){

// If the last name is different from the current name or the last date is different from the current date add an empty "row" to the new array
   if((lastT1Item != undefined) && (values[i][0] != lastT1Item)){
     newValues.push(['','','','','','','','','','','']);
      newValues.push(['','','','','','','','','','','']);
   }

//Add the current row to the new array
   newValues.push(values[i]);

//Sets the lastT1Item to the current values for the next evaluation
   lastT1Item = values[i][0];
    
 }
  
//Sets the new values
 tab.getRange(2,1,newValues.length,11).setValues(newValues)

}

0 个答案:

没有答案