При написании сценария приложения Google, как я могу ссылаться на значение столбца на второй вкладке листа Google? - PullRequest
1 голос
/ 08 апреля 2020

В настоящее время я создаю сценарий, который берет информацию из google sheet , которая заполнена формами , а затем вставляет ее в do c шаблон, который я создал. Когда я впервые создал сценарий и протестировал его с примерами вопросов, все работало так, как я хотел, поэтому я начал создавать форму и шаблон do c, к которым в конечном итоге данные будут go. Для справки я использовал этот учебник: https://youtu.be/ziLtj5-_D7c

Первая проблема, с которой я столкнулся, это то, что я хотел, чтобы do c включал данные листа, которые будут созданы формулой I добавили на лист. Новые представления формы создали новые строки на листе, к которым формула не будет автоматически применена. Я справился с этим, создав новую вкладку на листе и примерно продублировав вкладку ответа, используя = query. Я создал новые столбцы на второй вкладке листа и применил к ним необходимые формулы. Теперь, когда я отправляю новую форму, ответы go на первой вкладке, вторая вкладка заполняется, чтобы соответствовать, и я получаю дополнительную информацию, которая мне нужна, из формул, которые там находятся. Я сделал это, следуя этому руководству: https://youtu.be/rSBb84QIjwg

Что я не знаю, как сделать, так это отредактировать скрипт так, чтобы он брал информацию с обеих вкладок для вставки в do c шаблон. Например, следующий бит отлично работает, чтобы взять данные из первой вкладки и вставить их в do c:

function autofillGoogleDocFromForm(e) {
  var timestamp = e.values[0];
  var invoicenumber = e.values[1];
  var datesubmitted = e.values[2];
  var pdatebegin = e.values[3];
  var pdateend = e.values[4];
  var invoicesalary = e.values[5];
  var invoicetravel = e.values[6];
  var invoicesupplies = e.values[7];
  var invoiceother = e.values[8];
  var invoiceindirect = e.values[9];

Что я хочу сделать, это добавить дополнительные переменные, которые будут поступать из второй вкладки , Столбец K на первой вкладке будет [10], как мне ссылаться на столбец K на вкладке second ?

EDIT: вот полный сценарий, который сделал все, что мне нужно было сделать из первый лист, прежде чем задавать этот вопрос:

function autofillGoogleDocFromForm(e) {
  var timestamp = e.values[0];
  var invoicenumber = e.values[1];
  var datesubmitted = e.values[2];
  var pdatebegin = e.values[3];
  var pdateend = e.values[4];
  var invoicesalary = e.values[5];
  var invoicetravel = e.values[6];
  var invoicesupplies = e.values[7];
  var invoiceother = e.values[8];
  var invoiceindirect = e.values[9];


  var templateFile = DriveApp.getFileById("1CRMLGw-dq8vsQASkFDuOVvg03DgqYInKeTscGu9jXn4");
  var templateResponseFolder = DriveApp.getFolderById("1lCLWLKochBNW1uvG9hJkjZtu7EWNXhx6");

  var copy = templateFile.makeCopy('012 Invoice Number: ' + invoicenumber, templateResponseFolder);

  var doc = DocumentApp.openById(copy.getId());

  var body = doc.getBody();

  body.replaceText("{{Invoice number}}", invoicenumber);
  body.replaceText("{{Date submitted}}", datesubmitted);
  body.replaceText("{{Beginning date}}", pdatebegin);
  body.replaceText("{{Ending date}}", pdateend);
  body.replaceText("{{Invoice salary}}", invoicesalary);
  body.replaceText("{{Invoice travel}}", invoicetravel);
  body.replaceText("{{Invoice supplies}}", invoicesupplies);
  body.replaceText("{{Invoice other}}", invoiceother);
  body.replaceText("{{Invoice indirect}}", invoiceindirect);

  doc.saveAndClose();

}

И вот моя пересмотренная попытка после прочтения комментариев здесь:

function autofillGoogleDocFromForm(e) {

  var secondTab = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Totals");
  var timestamp = e.values[0];
  var invoicenumber = e.values[1];
  var datesubmitted = e.values[2];
  var pdatebegin = e.values[3];
  var pdateend = e.values[4];
  var invoicesalary = e.values[5];
  var invoicetravel = e.values[6];
  var invoicesupplies = e.values[7];
  var invoiceother = e.values[8];
  var invoiceindirect = e.values[9];
  var invoiceamount = secondTab.getRange("K:K").getValues();
  var salarytotal = secondTab.getRange("L:L").getValues();
  var traveltotal = secondTab.getRange("M:M").getValues();
  var suppliestotal = secondTab.getRange("N:N").getValues();
  var othertotal = secondTab.getRange("O:O").getValues();
  var indirecttotal = secondTab.getRange("P:P").getValues();
  var totaltodate = secondTab.getRange("Q:Q").getValues();


  var templateFile = DriveApp.getFileById("1CRMLGw-dq8vsQASkFDuOVvg03DgqYInKeTscGu9jXn4");
  var templateResponseFolder = DriveApp.getFolderById("1lCLWLKochBNW1uvG9hJkjZtu7EWNXhx6");

  var copy = templateFile.makeCopy('012 Invoice Number: ' + invoicenumber, templateResponseFolder);

  var doc = DocumentApp.openById(copy.getId());

  var body = doc.getBody();

  body.replaceText("{{Invoice number}}", invoicenumber);
  body.replaceText("{{Date submitted}}", datesubmitted);
  body.replaceText("{{Beginning date}}", pdatebegin);
  body.replaceText("{{Ending date}}", pdateend);
  body.replaceText("{{Invoice salary}}", invoicesalary);
  body.replaceText("{{Invoice travel}}", invoicetravel);
  body.replaceText("{{Invoice supplies}}", invoicesupplies);
  body.replaceText("{{Invoice other}}", invoiceother);
  body.replaceText("{{Invoice indirect}}", invoiceindirect);
  body.replaceText("{{Invoice amount}}", invoiceamount);
  body.replaceText("{{Salary total}}", salarytotal);
  body.replaceText("{{Travel total}}", traveltotal);
  body.replaceText("{{Supplies total}}", suppliestotal);
  body.replaceText("{{Other total}}", othertotal);
  body.replaceText("{{Indirect total}}", indirecttotal);
  body.replaceText("{{Total outlays to date}}", totaltodate);

  doc.saveAndClose();

}

Эта вторая версия определенно извлечение данных со второго листа, и это здорово, но он берет данные из каждой ячейки столбца, и мне нужны данные только из нижней ячейки столбца, которая создается при добавлении новой строки с каждой новой формой представление.

Ответы [ 2 ]

1 голос
/ 08 апреля 2020

Ответ:

Используя метод getSheets() класса Spreadsheet, вы можете получить массив all листов в вашей электронной таблице и легко ссылаться на них.

Пример кода:

Предполагается, что в вашей электронной таблице есть 5 листов:

var sheets = SpreadsheetApp.openById("id").getSheets();

var firstSheet = sheets[0];
var secondSheet = sheets[1];
var thirdSheet = sheets[2];
var fourthSheet = sheets[3];
var fifthSheet = sheets[4];

Или просто:

var sheetTwo = SpreadsheetApp.openById("id").getSheets()[1];

Я надеюсь, что это полезно для вас!

Ссылки:

1 голос
/ 08 апреля 2020

Для ссылки на вторую вкладку в листе вы можете использовать службы электронных таблиц внутри вашей autofillGoogleDocFromForm функции

function autofillGoogleDocFromForm(e) {
...
var secondTab = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet-name")
//and to get values from column you can use
var colK = secondTab.getRange("K:K").getValues()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...