Извлеките эти данные из листа и создайте PDF-файл с этими данными. - PullRequest
0 голосов
/ 09 мая 2019

Мне нужен кто-то, кто поможет мне написать скрипт для этого листа https://docs.google.com/spreadsheets/d/14JgHIvp8aEyDaHYcExWWQM9E0lTdg0W5Jb-UzWIHHX0/edit#gid=0 Лист1, и данные будут меняться по количеству строк как вверх, так и вниз каждый месяц.

Мне нужен скрипт, запускаемый по датеЯ могу настроить триггер даты, но мне нужно, чтобы первое число каждого месяца мне требовалось, чтобы скрипт извлекал эти данные на листе 1 (различающихся по количеству строк) и создавал PDF-файл с этими данными.Затем сохраните этот PDF-файл на моем диске с названием «Месяц» и текстом, например, этот месяц будет выглядеть как «Данные формы мая», а затем отправьте мне этот PDF-файл по электронной почте.Итак, 1-го числа следующего месяца, он создаст новый PDF-файл и назовет его «Июньские данные формы» и отправит мне по электронной почте.Это будет происходить каждый месяц, так как данные на листе будут меняться каждый месяц.Данные на листе будут получены по формуле из других листов.

1 Ответ

0 голосов
/ 10 мая 2019

Ежемесячный отчет

Вы предоставляете: триггер, SpreadsheetId, SheetName, ваш адрес электронной почты и FolderId.

function firstDayOfTheMonthReport() {
  var ss=SpreadsheetApp.openById('SpreadsheetId');
  var shts=ss.getSheets();
  for(var i=0;i<shts.length;i++) {
    if(shts[i].getName()!='SheetName') {
      shts[i].hideSheet();
    }
  }
  var fileid=ss.getId();
  var folder=DriveApp.getFolderById('FolderId');
  var name=Utilities.formatString('%s Form Data', Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "MMM"));
  var fileblob=DriveApp.getFileById(fileid).getBlob().getAs('application/pdf').setName(name);
  var file=folder.createFile(fileblob);
  GmailApp.sendEmail('your email', 'Monthly Report', 'Report in Attachments', {attachments:[file.getAs(MimeType.PDF)]});
}

Версия, которую вы запросили и, возможно, немного больше.

ПОЖАЛУЙСТА, ПРОЧИТАЙТЕ ЭТИ ИНСТРУКЦИИ, ПРЕЖДЕ ЧЕМ НАЧАТЬ СЦЕНАРИЙ

  1. Вам необходимо предоставить Триггер.
  2. Вам необходимо предоставить SpreadsheetId.
  3. Вам необходимо указать FolderId, в котором хранятся файлы PDF.
  4. Вам необходимо указать адрес электронной почты
  5. Вы должны предоставить имена листов, которые вы хотите в PDF. Вам нужно будет поставить туда имена в pdfshtsA. Примерно так: pdfshtsA = ['SheetName1', 'SheetName2', .....]. Вы также помещаете скрытые листы в отчет PDF, и после отправки отчета они возвращаются в скрытое состояние.

Сценарий:

function firstDayOfTheMonthReport1() {
  var ss=SpreadsheetApp.openById('SpreadsheetId');//You have to provide this Spreadsheet Id
  var shts=ss.getSheets();
  var pdfshtsA=['Sheet1'];//You have to put sheetnames that you want included in pdf in here you can included hidden sheets if you wish they will hidden again after the pdfs are created and the email is sent.
  var visshtsA=[];//The script will put current visible sheets that are not in the above list
  var hidshtsA=[];//The script will put sheets that are in pdfshtsA but are currently hidden so that they can be in the pdf and then hidden afterward
  for(var i=0;i<shts.length;i++) {
    if(pdfshtsA.indexOf(shts[i].getName()) == -1) {
      if(!shts[i].isSheetHidden()) {
        visshtsA.push(shts[i].getName());
        shts[i].hideSheet();
      }
    }else{
      if(shts[i].isSheetHidden()) {
        hidshtsA.push(shts[i].getName());
        shts[i].showSheet();
      }
    }
  }
  var fileid=ss.getId();
  var folder=DriveApp.getFolderById('FolderId');//You need to provide the FolderId
  var name=Utilities.formatString('%s Form Data', Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "MMM"));
  var fileblob=DriveApp.getFileById(fileid).getBlob().getAs('application/pdf').setName(name);
  var file=folder.createFile(fileblob);
  GmailApp.sendEmail('your email', 'Monthly Report', 'Report in Attachments', {attachments:[file.getAs(MimeType.PDF)]});
  for(var i=0;i<visshtsA.length;i++) {
    ss.getSheetByName(visshtsA[i]).showSheet();
  }
  for(var i=0;i<hidshtsA.length;i++) {
    ss.getSheetByName(hidshtsA[i]).hideSheet();
  }
}
...