Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 以PDF格式保存图像并在横向视图中保存_Google Apps Script_Google Sheets_Google Forms - Fatal编程技术网

Google apps script 以PDF格式保存图像并在横向视图中保存

Google apps script 以PDF格式保存图像并在横向视图中保存,google-apps-script,google-sheets,google-forms,Google Apps Script,Google Sheets,Google Forms,我有一个代码,在从链接表单提交时,将选择包含最新提交信息的行,该行将自动以我喜欢的格式填充另一个工作表,然后将其保存为PDF。我已经在几张工作表中使用了这段代码,但现在我需要在包含图像的工作表中使用它。我的PDF保存时没有图像,这对保存过程至关重要。除此之外,我还希望它能在景观中保存下来,如果有人能帮忙,我将不胜感激 我对代码做了一些修改,但我在编写代码时得到了帮助,但我对语言的理解还不够,无法完成这项工作 function generatePdf() { var ss = Spreadshee

我有一个代码,在从链接表单提交时,将选择包含最新提交信息的行,该行将自动以我喜欢的格式填充另一个工作表,然后将其保存为PDF。我已经在几张工作表中使用了这段代码,但现在我需要在包含图像的工作表中使用它。我的PDF保存时没有图像,这对保存过程至关重要。除此之外,我还希望它能在景观中保存下来,如果有人能帮忙,我将不胜感激

我对代码做了一些修改,但我在编写代码时得到了帮助,但我对语言的理解还不够,无法完成这项工作

function generatePdf() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheeta = ss.getSheetByName('Firstsheet');
sheeta.getRange("A2:A").clear();
var lastrow = sheeta.getLastRow();
var range = sheeta.getRange(lastrow, 1);
var values = range.setValue("autofill"); //This is a checkbox in column A which triggers the vlookup on the second sheet

var originalSpreadsheet = SpreadsheetApp.getActive();

var sourcesheet = originalSpreadsheet.getSheetByName("Secondsheet");
var sourcerange = sourcesheet.getRange('A:I');
var sourcevalues = sourcerange.getValues();
var data = sourcesheet.getDataRange().getValues();
var pdfname = sourcesheet.getRange('E34').getDisplayValue();

var newSpreadsheet = SpreadsheetApp.create("Spreadsheet to export");
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var projectname = SpreadsheetApp.getActiveSpreadsheet();
var sheet = sourcesheet.copyTo(newSpreadsheet);
var destrange = sheet.getRange('A:I');
destrange.setValues(sourcevalues);
newSpreadsheet.getSheetByName('Sheet1').activate();
newSpreadsheet.deleteActiveSheet();

var pdf = DriveApp.getFileById(newSpreadsheet.getId());
var theBlob = pdf.getBlob().getAs('application/pdf').setName("Sheet" + pdfname);

var folderID = "folder ID goes here";
var folder = DriveApp.getFolderById(folderID);
var newFile = folder.createFile(theBlob);

DriveApp.getFileById(newSpreadsheet.getId()).setTrashed(true);

sheeta.getRange("A2:A").clear();
}
我需要A1:F29(合并)中的图像保存到该公式创建的中间页,然后保存到PDF。如果可能的话,也可以保存在横向视图中。

1)缺少图像的问题是复制过程要进行两次,第一次使用copyTo()函数正确复制所有工作表。然后是第二个,您可以使用:

  var destrange = sheet.getRange('A:I');
  destrange.setValues(sourcevalues);
复制所有数据,即使是“单元”图像,但不复制“单元”图像(可能是因为这是一个新的图纸功能),这可能是您面临的问题。因此,您应该删除这两行代码,以免覆盖第一次复制过程。我就是这么做的,工作得很好

2)由于没有指定横向特征的选项,您可以使用@cooper[1]请求导出Url时提供的链接中使用的方法。我实现了代码并按预期工作,您只需删除以下两行:

  var pdf = DriveApp.getFileById(newSpreadsheet.getId());
  var theBlob = pdf.getBlob().getAs('application/pdf').setName("Sheet" + pdfname);
为此:

var url = newSpreadsheet.getUrl();

  //remove the trailing 'edit' from the url
  url = url.replace(/edit$/, '');

  //additional parameters for exporting the sheet as a pdf
  var url_ext = 'export?exportFormat=pdf&format=pdf' + //export as pdf
    //below parameters are optional...
    '&portrait=false' + //orientation, false for landscape
    '&gid=' + newSpreadsheet.getSheetId(); //the sheet's Id

  var token = ScriptApp.getOAuthToken();

  var response = UrlFetchApp.fetch(url + url_ext, {
    headers: {
      'Authorization': 'Bearer ' + token
    }
  });

  var theBlob = response.getBlob().setName("Sheet" + pdfname);

[1]

我认为,为了正确了解您的情况,提供一个示例电子表格将帮助用户思考您的问题和解决方案。当然,请删除你的个人信息。在我问这个问题后,我也在想同样的事情。这是表格:这是表格:风景画做得很好,谢谢。您对图像的看法是正确的,但是,如果我进行了建议的更改,我的信息不会显示出来。在我看来,这些行是复制在formresponses上的,所以第二页可以读取这些行。我认为,如果我们让这部分仅引用formresponses表单,这将防止它覆盖PDF表单上的信息。我想你给我指明了正确的方向。谢谢你,安德烈斯!我只是操纵范围来围绕图片工作,效果很好。再次感谢你为我指明了正确的方向。