前提・実現したいこと
以下の処理を行いたいと思っています。
(1) Cloud Functions(以下、CF)でJSONを受け取る。
(2) JSONの内容を解析し、Google Cloud Storage上のExcelテンプレートに書き込む。
(3) 書き込んだExcelファイルをレスポンスとして返す。(ダウンロードさせる。)
発生している問題・エラーメッセージ
Cloud Storage上のExcelをopenpyxlでloadできません。
おかしな点があればご指摘いただけないでしょうか。よろしくお願いいたします。
Error: function terminated. Recommended action: inspect logs for termination reason. Details: expected str, bytes or os.PathLike object, not Blob
該当のソースコード
import json import openpyxl import datetime from google.cloud import storage def index(request): #JSONを受け取る req_json = request.get_json() #Google cloud storageからファイルの取得 storage_client = storage.Client(project='XXX') bucket = storage_client.get_bucket('YYY') blob = bucket.get_blob('YYY') #openpyxlでExcelテンプレートを読み込む wb = openpyxl.load_workbook(blob, keep_vba=True) #wsに情報を入力 ws = wb.get_sheet_by_name('Sheet1') ws.cell(row=1,column=1).value=req_json['document_name'] # HttpResponseを生成する response = HttpResponse(content_type='application/vnd.ms-excel.sheet.macroEnabled.12') #ファイル名部分だけをURLエンコードしてセットする response['Content-Disposition'] = 'attachment; filename="{fn}"'.format(fn=urllib.parse.quote(req_json['document_name']+'.xlsm')) # データの書き込みを行なったExcelファイルを保存する wb.save(response) # 生成したHttpResponseをreturnする return response
試したこと
blobのままではだめなようなので、blob.download_as_string()で文字列にしてみましたが、openpyxlではサポートしていない形式であると表示されました。
補足情報(FW/ツールのバージョンなど)
python:3.7
openpyxl:3.0.0
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/26 12:49 編集
2019/11/26 14:05
2019/11/27 14:20