簡體   English   中英

從一張紙到另一張紙的范圍復制腳本,刪除復制的范圍並從第三張紙粘貼新公式

[英]Script for copy range from a sheet onto another, delete copied range and paste new formulas from a third sheet

我正在嘗試開發腳本來在Google電子表格上執行以下操作:

1)在電子表格1的Tab Source1上復制范圍B3:K102。

2)將復制的范圍(作為值)粘貼到電子表格2上Tab Destination1的最后一個可用行上。

3)清除電子表格1上的范圍B3:K102。

4)在標簽'Source2'電子表格1上復制范圍C3:K102。

5)將復制的范圍從“ Source2”粘貼到“ Source1!B3:K102”(作為公式)。

以下是即時消息正在嘗試並且無法使其正常運行的腳本。 請幫忙!

請注意,我對Im所做的工作幾乎一無所知,我是從一個知道一點點的朋友那里得到這個腳本的,但是他不再能夠幫助我。 因此,如果有人可以通過糾正錯誤並添加所缺少的內容來幫助我,我將不勝感激,如果您可以粘貼整個最終腳本,那么我不會把它弄亂。

非常感謝!

    function Copy() {

  var sss = SpreadsheetApp.openById('19BsivpPDO8ov3tHXslCzNQi0cB8YeP1gQ-5Zt-4Eb64');
  var ss = sss.getSheetByName('Source1');
  var range = ss.getRange('B3:K102');
  var data = range.getValues();
  var tss = SpreadsheetApp.openById('1tVnIMNQ7oE8YuxLU2KpBSL-Py3T8IqJwV6j59Pfo3j0');
  var ts = tss.getSheetByName('Destination1');
  var endOfFile = ts.getLastRow();
  var cantColumns = 10;

  for (var i = 0; i < cantColumns; i++) {
    endOfFile = endOfFile + 1

    for (var cont = 1; cont < ss.getLastColumn(); cont++) {
      ts.getRange(endOfFile, cont + 1).setValue(data[i][cont -1]);
    }
  }

  range.clearContent();

  var sss = SpreadsheetApp.openById('19BsivpPDO8ov3tHXslCzNQi0cB8YeP1gQ-5Zt-4Eb64');
  var ss = sss.getSheetByName(‘Source2’);

  var range = ss.getRange(‘C3:K102’);

  var data = range.getValues();

  var tss = SpreadsheetApp.openById('19BsivpPDO8ov3tHXslCzNQi0cB8YeP1gQ-5Zt-4Eb64');
  var ts = tss.getSheetByName(‘Source1’);

  var endOfFile = ts.getLastRow();

  var cantColumns = 9;

  for (var i = 0; i < cantColumns; i++) {
    endOfFile = endOfFile + 1
    // Recorremos la fila y vamos insertando los valores
    for (var cont = 1; cont < ss.getLastColumn(); cont++) {
      ts.getRange(endOfFile, cont + 1).setValue(data[i][cont -1]);

}

由於我看不到您的樣本表,因此該樣本腳本可能不是您想要的。 因此,如果這不是您想要的,請隨時告訴我。

將許多數據導入單元格時,“ setValues()”比“ setValue()”更快。 https://developers.google.com/apps-script/reference/spreadsheet/range#setValues(Object)

“ getValues()”可以檢索單元格的值。 “ getFormulas()”可以檢索單元格的公式。 在此示例中,將同時檢索值和公式並將其從Source2復制到Source1。

要從Source2復制到Source1,您要將數據復制到Source1的最后一行還是復制到“ B3:K102”? 在當前示例中,它是Source1的最后一行,就像您的腳本一樣。 如果Source1除“ B3:K102”外具有其他單元格(少於102個),則Source2中的公式可能不適用於Source1。

示例腳本:

function Copy() {
  var srcs = '19BsivpPDO8ov3tHXslCzNQi0cB8YeP1gQ-5Zt-4Eb64';
  var dest = '1tVnIMNQ7oE8YuxLU2KpBSL-Py3T8IqJwV6j59Pfo3j0';
  var srcs_ss = SpreadsheetApp.openById(srcs);
  var dest_ss = SpreadsheetApp.openById(dest);
  var src1 = srcs_ss.getSheetByName('Source1');
  var src2 = srcs_ss.getSheetByName('Source2');
  var dest = dest_ss.getSheetByName('Destination1');

  var src1_range = src1.getRange('B3:K102');
  var src1_f = src1_range.getFormulas();
  var src1_dat = src1_range.getValues();
  src1_f.forEach(function(e1, i1){
    e1.forEach(function(e2, i2){
      if (e2 != "") src1_dat[i1][i2] = e2;
    });
  });
  src1_range.clearContent();
  dest.getRange(dest.getLastRow(), 2, src1_dat.length, src1_dat[0].length).setValues(src1_dat);
  var src2_dat = src2.getRange('C3:K102').getValues();
  src1.getRange(src1.getLastRow(), 2, src2_dat.length, src2_dat[0].length).setValues(src2_dat);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM