似乎使用新版本的谷歌电子表格不再可能使用 JS 下载整个谷歌电子表格。到目前为止,我一直在使用这种方法(对于之前创建的文件仍然可以正常工作):
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://docs.google.com/feeds/download/spreadsheets/Export?key=' + id + '&exportFormat=xlsx');
xhr.responseType = 'arraybuffer';
xhr.setRequestHeader('Authorization', 'Bearer ' + gapi.auth.getToken().access_token);
xhr.onload = function() {
...
};
xhr.send();
Run Code Online (Sandbox Code Playgroud)
https://docs.google.com/spreadsheets/d/_ID_/export?format=xlsx&id=_ID_
Run Code Online (Sandbox Code Playgroud)
但不幸的是,没有Access-Control-Allow-Origin标题,因此无法使用 JS 访问该链接。我还有其他可能下载文件吗?
Google Drive API 将导出 url 显示为:
https://docs.google.com/spreadsheets/export?id=_ID_&exportFormat=xlsx
Run Code Online (Sandbox Code Playgroud)
但也没有Access-Control-Allow-Origin标题。
是否有其他可能仅使用 JS 下载此文件?
我正在尝试弄清楚如何通过 Google Apps 脚本创建以横向(A4 尺寸)显示的 PDF 文档。这是迄今为止我用来创建 PDF 的代码,它以纵向显示。
function pdfSheet() {
var d = new Date();
var cdate = d.getDate();
var cmonth = d.getMonth() + 1;
var cyear = d.getFullYear();
var current = [cdate + "-" + cmonth + "-" + cyear];
var imageBlob = UrlFetchApp.fetch("https://sites.google.com/site/mysite/smalllogo.png").getBlob();
var base64EncodedBytes = Utilities.base64Encode(imageBlob.getBytes());
var logo = "<img src='data:image/png;base64," + base64EncodedBytes + "' width='170'/>";
var html = "<table width='100%'><tr><td align='right'>" + logo + "<br><br><b>Date:</b> " + current + "</td></tr></table>"; //PDF content will carry …Run Code Online (Sandbox Code Playgroud) 我正在尝试将包含多个工作表的Google电子表格转换为PDF文件.下面的脚本有效,但它只使用电子表格的最后一页创建PDF.
function savePDFs() {
SpreadsheetApp.flush();
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
var url = ss.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...
'&size=letter' + //paper size
'&portrait=false' + //orientation, false for landscape
'&fitw=true' + //fit to width, false for actual size
'&sheetnames=false&printtitle=false&pagenumbers=false' + //hide optional
'&gridlines=false' + //false = hide gridlines
'&fzr=false' + //do …Run Code Online (Sandbox Code Playgroud) 在单元格 B8:C8(在 Invoice To 下方)中,有一个下拉菜单可以从客户工作表中获取数据。
什么是要求?
- 制作选定单元格的 PDF。我想稍后添加一些按钮并为它们分配宏/脚本,并且 g sheet 打印操作会打印工作表上的所有内容。所以只需要打印发票部分(范围-A1:G46)。工作表名称为客户名称 + 发票日期(F8)。
我已经使用了一些来自堆栈溢出的脚本,但它们正在增加边距。我想要的是一个完整的 pdf 文件,如果我使用打印(ctrl+p)按钮,我就可以得到它。
- 将发票数据保存到“发票登记”表以跟踪发票和付款。这也达到了。
我可以通过使用相对引用记录宏来实现这一点。
function Untitledmacro1() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Invoice Register'), true);
spreadsheet.getRange('A1').activate();
spreadsheet.getCurrentCell().getNextDataCell(SpreadsheetApp.Direction.DOWN).activate();
spreadsheet.getCurrentCell().offset(1, 0).activate();
spreadsheet.getCurrentCell().setFormulaR1C1('=R[-1]C[0]+1');
spreadsheet.getCurrentCell().offset(0, 1).activate();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Invoice Register'), true);
spreadsheet.getRange('Invoice!E8').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
spreadsheet.getCurrentCell().offset(0, 1).activate();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Invoice Register'), true);
spreadsheet.getRange('Invoice!F8').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
spreadsheet.getCurrentCell().offset(0, 1).activate();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Invoice Register'), true);
spreadsheet.getRange('Invoice!B8:C8').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
spreadsheet.getCurrentCell().offset(0, 2).activate();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Invoice Register'), true);
spreadsheet.getRange('Invoice!F16').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
};
Run Code Online (Sandbox Code Playgroud)
- 保存发票数据并生成具有特定单元格范围的 pdf 后,我想清除某些字段中的数据。这也达到了。
function clearRange() {
//replace 'Sheet1' with your actual …Run Code Online (Sandbox Code Playgroud)