Я хочу суммировать значения, представленные на разных листах (расположенных в разных таблицах) в новом листе Google с помощью скрипта приложения Google - PullRequest
0 голосов
/ 05 июля 2019

Я хочу добавить значения, представленные на разных листах (расположенных в разных таблицах), в новый лист Google с помощью скрипта приложения Google.Я новичок в этом и не знаю, как поступить.Буду признателен, если кто-нибудь сможет мне помочь с этим.

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Вам нужно будет добавить свои собственные идентификаторы и имена таблиц в Таблицу данных, и тогда все данные на этих листах будут отображены в Сравнительном листе.

function getData() {
  var ss=SpreadsheetApp.getActive();
  var ish=ss.getSheetByName('Data');
  var iA=ish.getDataRange().getValues();
  var dsh=ss.getSheetByName('Comparisons');
  dsh.clearContents();
  dsh.getRange('A1').setValue('Displaying Data from selected spreadsheets list in Data Sheet.').setFontWeight("Bold");
  for(var i=1;i<iA.length;i++) {
    if(iA[i][0] && iA[i][1]) {
      var css=SpreadsheetApp.openById(iA[i][0]);
      var csh=css.getSheetByName(iA[i][1]);
      var vA=csh.getDataRange().getValues();
      var desc=Utilities.formatString('Data from %s',iA[i][1]);
      dsh.getRange(dsh.getLastRow()+1,1).setValue(desc).setFontWeight("Bold");
      dsh.getRange(dsh.getLastRow()+1,1,vA.length,vA[0].length).setValues(vA);
    }
  }
}

Это формат моей таблицы данных:

enter image description here

Вот как выглядит мой Сравнительный лист после запуска его с двумя другими таблицами в списке:

enter image description here

Добавление данных из других электронных таблиц

function getData() {
  var ss=SpreadsheetApp.getActive();
  var ish=ss.getSheetByName('Data');
  var iA=ish.getDataRange().getValues();
  var dsh=ss.getSheetByName('Sum');
  dsh.clearContents();
  for(var i=1;i<iA.length;i++) {
    if(iA[i][0] && iA[i][1]) {
      var css=SpreadsheetApp.openById(iA[i][0]);
      var csh=css.getSheetByName(iA[i][1]);
      dsh.appendRow([csh.getRange(iA[i][2]).getValue()]);
    }
  }
  var rg=dsh.getRange(dsh.getLastRow()+1,1).setFormula("=Sum(" +  dsh.getRange(1,1,i-1,1).getA1Notation() + ")");
  rg.offset(0,1).setValue("Total").setFontWeight("Bold")
}

Лист данных:

enter image description here

Лист суммы:

enter image description here

0 голосов
/ 05 июля 2019

Самый простой способ - получить доступ к различным электронным таблицам по их идентификаторам или именам, к соответствующим листам по имени, выбрать диапазоны , из которых вы хотите скопировать и в которые вы хотите вставить и установить ценности. Обратите внимание, что для использования метода setValues ​​() необходимо, чтобы исходный диапазон и диапазон назначения имели одинаковые размеры. Обратитесь к справочнику «Сценарий приложений» для получения дополнительной информации.

https://developers.google.com/apps-script/reference/spreadsheet/range

function myFunction() {

var sheet_origin1=SpreadsheetApp.openById("your spreadsheet ID 1").getSheetByName("name of sheet 1");
var sheet_origin2=SpreadsheetApp.openById("your spreadsheet ID 2").getSheetByName("name of sheet 2"); 
var sheet_destination=SpreadsheetApp.openById("your spreadsheet ID 3").getSheetByName("name of sheet 3"); 

//choose your range of interest  
var range1=sheet_origin1.getRange("A1:D3");
var range2=sheet_origin2.getRange("A1:E2"); 
var destinationrange_1=sheet_destination.getRange("A1:D3");
var destinationrange_2=sheet_destination.getRange("A4:E5");  

//Here you add the values from different sheets to to different ranges of the destination sheet  
destinationrange_1.setValues(range1.getValues());
destinationrange_2.setValues(range2.getValues());
}

Если вы хотите суммировать значения ячеек на разных листах и ​​вставить результат в соответствующую ячейку листа назначения - вы можете сделать это следующим образом:

function myFunction() {

var sheet_origin1=SpreadsheetApp.openById("1wUzNCzdQyVCe8VkZghTUQz_0QEAiU6ONpW45kiGE_2U").getSheetByName("Sheet1");
var sheet_origin2=SpreadsheetApp.openById("1CD0yp_0_5u-UX_9J4Az38NirAMMvu5G7kksmLz3S0cw").getSheetByName("Sheet1"); 
var sheet_destination=SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();


//define range as a string in A1 notation
var range="A1:D3"  
var values1=sheet_origin1.getRange(range).getValues();
var values2=sheet_origin2.getRange(range).getValues(); 
var destinationrange=sheet_destination.getRange(range);

//Here you sum the values of equivalent cells from different sheets
  for(var i=0; i<values1.length;i++)
  {
    for(var j=0; j<values1[0].length;j++)
    {
       sum=values1[i][j]+values2[i][j];
       destinationrange.getCell(i+1,j+1).setValue(sum);
    }
  } 
}
...