Estoy creando un complemento para las hojas de Google que los clubes voluntarios de mi escuela secundaria pueden usar para realizar un seguimiento de las horas de voluntariado de su miembro. La mayor parte del código se realiza y funciona muy bien, y actualmente estoy trabajando en un sistema que enviará a un miembro una hoja de cálculo que enumera todos los eventos voluntarios que han registrado. Tengo gas Crear una hoja de cálculo separada y luego envíe un correo electrónico con esa hoja de cálculo separada adjunta en PDF. Cuando se recibe el correo electrónico, el PDF está vacío, excepto por una celda vacía singular en la parte superior izquierda de la página.

Soy bastante nuevo en gasolina, pero he podido agarrar el contenido con bastante facilidad. Solo he intentado un método para enviar la hoja de cálculo y eso es usando el .GETAS (MIMETYPE.PDF). Cuando cambié el "PDF" a "Google_Shoets,", el gas devolvió el error: "El objeto BLOB debe tener datos no nulos para esta operación". No estoy totalmente seguro de lo que es un objeto Blob, y no ha encontrado ningún sitio web o video que lo haya explicado completamente, por lo que no estoy seguro de cómo ayudarlo a solucionar ese error.

Creo que estoy teniendo un problema agarrando el archivo porque envía un PDF vacío o devuelve un error que reclama que necesita "datos no nulos".

function TigerMail()
{
  var Drive = DriveApp;
  var app = SpreadsheetApp;
  var LOOKUP = app.getActiveSpreadsheet().getSheetByName("Student 
  Lookup");
  var Name = LOOKUP.getRange("E1").getValue();
  Name = Name + "'s Hours";
  //app.openById(Name+"'s Hours");
  var HOURS = app.create(Name);
  var ESheet = HOURS.getSheets()[0];
  var ROW = LOOKUP.getLastRow();
  var arr = LOOKUP.getRange("D1:J"+ROW).getValues();
  var cell = ESheet.getRange("A1:G"+ROW);
  cell.setValues(arr);

////////////////////////////////////////////////////

  var LOOKUP = app.getActiveSpreadsheet().getSheetByName("Student 
  Lookup");
  var cell = LOOKUP.getRange("D1");  
  var Addr = cell.getValue();
  var ROW = LOOKUP.getLastRow();
  var file = Drive.getFilesByName(Name);
  var file = file.next();
  var FORMAT = file.getAs(MimeType.GOOGLE_SHEETS);

  TigerMail.sendEmail(Addr, "Hours", "Attached is a list of all of the 
  events you have volunteered at:", {attachments: [FORMAT]} );
}

Las cuatro líneas finales son donde están ocurriendo los errores. Creo que estoy malinterpretando cómo el .Next () y .GetFilesByName () trabajan.

(por encima de la línea de comentarios: creando una hoja de cálculo de horas)

(debajo de la línea de comentarios: agarrando la hoja de cálculo y adjuntándola a un correo electrónico)

Aquí está el enlace a la hoja de Google: https://docs.google.com/spreadsheets/d/ 1qluftwaj-vybd2m45f63bthaqf0uovkwi04xwzfj4vg / edit? USP = Compartir

2
Noah Galvin 26 jun. 2019 a las 06:53

1 respuesta

La mejor respuesta
  • En su script, se crea una nueva hoja de cálculo y se coloca valores.
  • Desea enviar un correo electrónico adjuntando el archivo que se convirtió de la hoja de cálculo creada al formato PDF.

Si mi comprensión es correcta, ¿qué tal esta modificación? Piense en esto como solo una de varias respuestas.

Puntos de modificación:

  • Acerca de Drive.getFilesByName(Name), desafortunadamente, no hay un método de getFilesByName() en Drive.
    • Creo que cuando quiere usar la hoja de cálculo creada, HOURS de var HOURS = app.create(Name) se puede usar.
  • Acerca de var FORMAT = file.getAs(MimeType.GOOGLE_SHEETS), en el caso de Google Docs, cuando se recupera la bloba, la BLOB se convierte automáticamente en formato PDF. Esto también se puede utilizar para su situación.
  • Para guardar los valores colocados en la hoja de cálculo creada, utiliza SpreadsheetApp.flush().

Cuando los puntos anteriores se reflejan en su guión, se convierte en lo siguiente.

Script modificado:

Por favor, modifique de la siguiente manera.

var file = Drive.getFilesByName(Name);
var file = file.next();
var FORMAT = file.getAs(MimeType.GOOGLE_SHEETS);
SpreadsheetApp.flush();
var FORMAT = HOURS.getBlob();

Nota:

  • En su script, parece que var ROW = LOOKUP.getLastRow() no se usa.

Referencias:

Si entendí mal su pregunta y este no fue el resultado que desea, me disculpo.

1
Tanaike 26 jun. 2019 a las 06:05