Конвертируйте Google Sheet в PDF и храните в той же папке Google Drive, что и лист - PullRequest
1 голос
/ 30 марта 2020

Настройка

У меня есть пустой шаблон счета-фактуры Google Sheet в папке.

Используя Python, Gspread и PyDrive, я дублирую шаблон и заполняю копия с данными.


Вопрос

Клиенты должны получать PDF-файл счета, а не Google лист.

Я сталкивался с этим вопросом , где указано, как локально экспортировать лист в PDF, а именно:

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

Как создать PDF-файл Google лист, но вместо загрузки PDF локально сохраните его в той же папке Google Drive, что и лист Google?

Ответы [ 2 ]

2 голосов
/ 31 марта 2020
  • Вы хотите преобразовать электронную таблицу Google в формат PDF и создать ее в виде файла в той же папке электронной таблицы Google.
  • В этом случае файл PDF создается на Google Диске .
  • Вы хотите добиться этого, используя pydrive с python.

Если мое понимание верно, как насчет этого ответа? Думайте об этом как об одном из нескольких возможных ответов.

Проблема и обходное решение:

К сожалению, таблицу Google нельзя напрямую конвертировать и экспортировать в Google Диск с помощью Google API. В этом случае необходимо использовать обходные пути. В этом ответе я хотел бы предложить следующие 2 обходных пути.

Шаблон 1:

В этом шаблоне ваша цель достигается с помощью pydrive. В этом случае электронная таблица загружается в локальный P C в виде файла PDF и загружает файл PDF в ту же папку электронной таблицы на Google Диске.

Пример сценария:

spreadsheet_id = '###'  # Please set the Spreadsheet ID.
pdf_filename = 'sample.pdf'

drive = GoogleDrive(gauth)

# Download Spreadsheet as PDF file.
dl_file = drive.CreateFile({'id': spreadsheet_id})
dl_file.GetContentFile(pdf_filename, mimetype='application/pdf')

# Get parent folder ID of the Spreadsheet.
url = 'https://www.googleapis.com/drive/v3/files/' + spreadsheet_id + '?fields=parents'
headers = {'Authorization': 'Bearer ' + drive.auth.credentials.token_response["access_token"]}
res = requests.get(url, headers=headers)

# Upload the PDF file to the same folder of Spreadsheet.
up_file = drive.CreateFile({'parents': [{'id': res.json()['parents'][0]}]})
up_file.SetContentFile(pdf_filename)
up_file.Upload()
print('title: %s, mimeType: %s' % (up_file['title'], up_file['mimeType']))
  • Чтобы получить идентификатор родительской папки Spreadsheet, я использовал метод files.get в Drive API, используя requests.

Pattern 2:

В этом шаблоне ваша цель достигается с помощью веб-приложений, созданных Google Apps Script. В этом случае с помощью веб-приложений электронная таблица преобразуется в формат PDF и создается файл в той же папке электронной таблицы. Таким образом, процесс может быть запущен только на стороне Google. Сценарий python отправляет только идентификатор электронной таблицы по запросу. Для этого выполните следующий поток:

1. Создайте новый проект скрипта Google Apps.

Пример скрипта веб-приложений - это скрипт Google Apps. Поэтому, пожалуйста, создайте проект Google Apps Script.

Если вы хотите создать его напрямую, перейдите к https://script.new/. В этом случае, если вы не вошли в Google, откроется экран входа. Пожалуйста, войдите в Google. При этом открывается редактор сценариев Google Apps Script.

2. Подготовьте скрипт.

Скопируйте и вставьте следующий скрипт (Google Apps Script) в редактор скриптов. Этот скрипт предназначен для веб-приложений.

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. Развертывание веб-приложений.

  1. В редакторе сценариев откройте диалоговое окно с помощью «Publi sh» -> «Развернуть как веб-приложение».
  2. Выберите «Me " for " Запустите приложение как: ".
    • При этом сценарий запускается от имени владельца.
  3. Выберите "Любой, даже анонимный" для "У кого есть доступ к приложению: ".
    • В этом случае токен доступа не требуется запрашивать. Я думаю, что в качестве тестового примера я рекомендую этот параметр.
    • Конечно, вы также можете использовать токен доступа. В это время установите "Anyone" .
  4. Нажмите кнопку "Развернуть" как новую версию проекта.
  5. Автоматически открывать диалоговое окно «Требуется авторизация».
    1. Нажмите «Просмотреть разрешения».
    2. Выберите собственную учетную запись.
    3. Нажмите «Дополнительно» в разделе «Это приложение не подтверждено».
    4. Нажмите " Go to ### имя проекта ### (небезопасно) "
    5. Нажмите кнопку" Разрешить ".
  6. Нажмите" ОК ".
  7. Скопируйте URL-адрес веб-приложений. Это как https://script.google.com/macros/s/###/exec.
    • Когда вы изменили скрипт Google Apps, пожалуйста, повторно разверните его как новую версию. Этим измененный сценарий отражается в веб-приложениях. Пожалуйста, будьте осторожны.

3. Запустите функцию с помощью веб-приложений.

Это пример сценария python для запроса веб-приложений. Укажите URL-адрес веб-приложения и идентификатор таблицы.

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)

Ссылки:

Если Я неправильно понял ваш вопрос, и это было не то направление, которое вы хотите, я прошу прощения.

0 голосов
/ 30 марта 2020

Вы можете использовать метод Files.export в Drive API, чтобы преобразовать лист в mime-тип application / pdf. Попробуйте это в Files API Explorer .

...