Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.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
Python 将谷歌工作表转换为PDF格式,并存储在与工作表相同的谷歌驱动器文件夹中_Python_Google Apps Script_Google Sheets_Gspread_Pydrive - Fatal编程技术网

Python 将谷歌工作表转换为PDF格式,并存储在与工作表相同的谷歌驱动器文件夹中

Python 将谷歌工作表转换为PDF格式,并存储在与工作表相同的谷歌驱动器文件夹中,python,google-apps-script,google-sheets,gspread,pydrive,Python,Google Apps Script,Google Sheets,Gspread,Pydrive,设置 我在一个文件夹中有一个空的Google表单发票模板 我使用Python、Gspread和PyDrive复制模板并用数据填充副本 问题 客户需要收到发票的pdf文件,而不是谷歌表单 我遇到了一个地方,说明了如何将本地工作表导出为pdf,即 file_obj = drive.CreateFile({'id': 'sfkldjlfsdkjfgdklj'}) file_obj.GetContentFile('temp.pdf', mimetype='application/pdf') 如何创建

设置

我在一个文件夹中有一个空的Google表单发票模板

我使用Python、Gspread和PyDrive复制模板并用数据填充副本


问题

客户需要收到发票的pdf文件,而不是谷歌表单

我遇到了一个地方,说明了如何将本地工作表导出为pdf,即

file_obj = drive.CreateFile({'id': 'sfkldjlfsdkjfgdklj'})
file_obj.GetContentFile('temp.pdf', mimetype='application/pdf')

如何创建google工作表的PDF,而不是本地下载PDF,将其存储在与google工作表相同的google Drive文件夹中?

您可以使用驱动器API的Files.export方法,将工作表转换为“application/PDF”mime类型。
在中试用。

您可以使用驱动器API的Files.export方法,将工作表转换为“application/pdf”mime类型。 请在中试用。

  • 您希望将Google电子表格转换为PDF格式,并在Google电子表格的同一文件夹中创建一个文件
  • 在本例中,PDF文件是在Google Drive上创建的
  • 您希望使用pydrive和python来实现这一点
如果我的理解是正确的,那么这个答案呢?请把这看作是几个可能的答案之一

问题和解决方法: 不幸的是,谷歌电子表格无法直接转换并使用谷歌API导出到谷歌硬盘。在这种情况下,需要使用变通方法。在这个回答中,我想提出以下两个解决办法

模式1: 在这种模式中,您的目标是使用pydrive实现的。在这种情况下,电子表格将作为PDF文件下载到本地PC,并将PDF文件上载到Google Drive上电子表格的同一文件夹中

示例脚本:
  • 为了检索电子表格的父文件夹ID,我使用了files.get方法,在驱动器API中使用
    请求
模式2: 在这种模式中,您的目标是通过使用GoogleApps脚本创建的Web应用程序来实现的。在这种情况下,使用Web应用程序,电子表格将转换为PDF格式,并在电子表格的同一文件夹中创建一个文件。所以这个过程只能在Google端运行。python脚本仅通过请求发送电子表格ID。为此,请执行以下流程

1.创建谷歌应用程序脚本的新项目。 Web应用程序的示例脚本是Google应用程序脚本。因此,请创建一个谷歌应用程序脚本项目

如果要直接创建,请访问。在这种情况下,如果您没有登录Google,则会打开登录屏幕。所以请登录谷歌。这样,谷歌应用程序脚本的脚本编辑器就打开了

2.准备脚本。 请将以下脚本(Google Apps脚本)复制并粘贴到脚本编辑器。此脚本用于Web应用程序

function doGet(e) {
  var spreadsheetId = e.parameter.id;
  var file = DriveApp.getFileById(spreadsheetId);
  var blob = file.getBlob();
  var folder = file.getParents().next();
  var pdfFile = folder.createFile(blob.setName(file.getName() + ".pdf"));
  return ContentService.createTextOutput(pdfFile.getId());
}
  • 在这种情况下,使用GET方法
3.部署Web应用程序。
  • 在脚本编辑器上,通过“发布”->“部署为web应用”打开对话框
  • 选择“我”以执行应用程序:“”。
    • 这样,脚本将作为所有者运行
  • 为有权访问应用程序的用户选择“任何人,甚至匿名”“。
    • 在这种情况下,请求时不需要访问令牌。我认为作为测试用例,我推荐这种设置
    • 当然,您也可以使用访问令牌。此时,请将其设置为“任何人”
  • 单击“部署”按钮作为新的“项目版本”
  • 自动打开“需要授权”对话框。
  • 单击“查看权限”
  • 选择自己的帐户
  • 单击“此应用未验证”处的“高级”
  • 单击“转到####项目名称###(不安全)”
  • 单击“允许”按钮
  • 单击“确定”
  • 复制Web应用程序的URL。就像
    https://script.google.com/macros/s/###/exec
    • 当您修改Google Apps脚本时,请重新部署为新版本。这样,修改后的脚本将反映到Web应用程序中。请注意这一点。
  • 3.使用Web应用程序运行该功能。 这是一个用于请求Web应用程序的示例python脚本。请设置您的Web应用URL和电子表格ID

    import requests
    spreadsheet_id = '###'  # Please set the Spreadsheet ID.
    url = 'https://script.google.com/macros/s/###/exec?id=' + spreadsheet_id
    res = requests.get(url)
    print(res.text)
    
    参考资料:
    如果我误解了你的问题,而这不是你想要的方向,我道歉。

    • 您希望将Google电子表格转换为PDF格式,并在Google电子表格的同一文件夹中创建一个文件
    • 在本例中,PDF文件是在Google Drive上创建的
    • 您希望使用pydrive和python来实现这一点
    如果我的理解是正确的,那么这个答案呢?请把这看作是几个可能的答案之一

    问题和解决方法: 不幸的是,谷歌电子表格无法直接转换并使用谷歌API导出到谷歌硬盘。在这种情况下,需要使用变通方法。在这个回答中,我想提出以下两个解决办法

    模式1: 在这种模式中,您的目标是使用pydrive实现的。在这种情况下,电子表格将作为PDF文件下载到本地PC,并将PDF文件上载到Google Drive上电子表格的同一文件夹中

    示例脚本:
    • 为了检索电子表格的父文件夹ID,我使用了files.get方法,在驱动器API中使用
      请求
    模式2: 在这种模式中,您的目标是通过使用GoogleApps脚本创建的Web应用程序来实现的。在这种情况下,使用Web应用程序,电子表格将转换为PDF格式,并在电子表格的同一文件夹中创建一个文件。所以这个过程只能在Google端运行。python脚本仅通过请求发送电子表格ID。为此,请执行以下流程

    1.创建谷歌应用程序脚本的新项目。 Web应用程序的示例脚本是Google应用程序脚本。
    import requests
    spreadsheet_id = '###'  # Please set the Spreadsheet ID.
    url = 'https://script.google.com/macros/s/###/exec?id=' + spreadsheet_id
    res = requests.get(url)
    print(res.text)