Google Script для преобразования Google Sheet в Excel и отправки по электронной почте - PullRequest
0 голосов
/ 18 июня 2019

Каждую неделю у меня есть несколько разных Google Sheets, которые я должен загрузить как Excel, удалить скрытые строки, исправить данные и затем отправить их по электронной почте.

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

Я провел массу поисков, чтобы попытаться заставить это работать, однако яЯ сталкиваюсь с несколькими проблемами.

Во-первых, данные в таблице извлекаются с помощью формулы запроса / импорта, поэтому после загрузки в Excel все данные выглядят следующим образом:

=IFERROR(__xludf.DUMMYFUNCTION("""COMPUTED_VALUE"""),"No")

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

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

Я нашелследующий код, который работает для этого:

function getGoogleSpreadsheetAsExcel(){
  
  try {
    
    var ss = SpreadsheetApp.getActive();
    
    var url = "https://docs.google.com/feeds/download/spreadsheets/Export?key=" + ss.getId() + "&exportFormat=xlsx";
    
    var params = {
      method      : "get",
      headers     : {"Authorization": "Bearer " + ScriptApp.getOAuthToken()},
      muteHttpExceptions: true
    };
    
    var blob = UrlFetchApp.fetch(url, params).getBlob();
    
    blob.setName(ss.getName() + ".xlsx");
    
    MailApp.sendEmail("amit@labnol.org", "Google Sheet to Excel", "The XLSX file is attached", {attachments: [blob]});
    
  } catch (f) {
    Logger.log(f.toString());
  }
}

Это в основном работает, но снова сталкивается с проблемой, описанной выше, из-за того, что данные importrange неверны и отображаются как = IFERROR (__ xludf.DUMMYFUNCTION.

Тамтакже есть два столбца (A и J), которые скрыты и должны быть удалены.

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

Я знаю, что это большая просьба, но любая помощь будет удивительной!

1 Ответ

0 голосов
/ 22 июня 2019

Этот скрипт решает часть вашего вопроса.

  1. Создайте копию листа и в процессе конвертируйте формулы в значения
  2. Удалить столбцы

Примечание. Существует несколько вариантов преобразования формулы в значения.

Что касается изменения адреса электронной почты, темы и сообщения через графический интерфейс, я предлагаю использовать настраиваемую боковую панель .


function so5665379502(){
  /*
  // The purpose of this script is to copy the content of one sheet to another;
  // converting formulas to values 
    // and deleting columns
  */

    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheetname = "ejbsheet01";
    var sourcesheet = ss.getSheetByName(sheetname); 
  var destname = "ejbsheet02";
    var destinationSheet = ss.getSheetByName(destname);
    sourcesheet.activate();
  var range = sourcesheet.getDataRange();
  var rFC = range.getColumn();
  var rLC = range.getLastColumn();
  var rFR = range.getRow();
  var rLR = range.getLastRow();
  //Logger.log("DEBUG: the data range = "+range.getA1Notation()+", column 1 = "+rFC+", the last column = "+rLC+", first row = "+rFR+", last row = "+rLR);

  //  syntax copyValuesToRange(sheet, column, columnEnd, row, rowEnd)
  range.copyValuesToRange(destinationSheet, rFC, rLC, rFR, rLR);

  // delete column J first so that other column numbers don't chnage.
  // column J = 10
  destinationSheet.deleteColumn(10);
  // Delete Column A
  // column A = 1
  destinationSheet.deleteColumn(1);  
}

до
Примечание: столбцы A и J скрыты BEFORE


ПОСЛЕ
Примечание. Скрытые столбцы исчезли, и данные представляют собой значения, а не формулы. AFTER

...