実現したいこと
スプレッドシートのデータをexcelに貼りつけたい
初め、スプレッドシートをdataframeに格納してからエクセルに貼り付けのコードを書いてたのですがget_as_dataframeは取得してくる範囲設定が必須と書いてあり
私の場合データが増えていくので範囲指定ができず、シートごと取得する方法を探してのですがgspreadのcopyは新しいシートにコピーまたduplicate_sheet()もスプレッド自体にしかできなさそうで解決策ご存じの方ご教授お願いします。
スプレッドシートをdataframeに格納してからエクセルに貼り付けのコード
python
1import os 2import gspread 3from gspread_dataframe import get_as_dataframe, set_with_dataframe 4from oauth2client.service_account import ServiceAccountCredentials 5import pandas as pd 6import json 7import win32com.client 8import openpyxl as px 9import xlsxwriter 10from openpyxl.utils.dataframe import dataframe_to_rows 11from openpyxl.utils import get_column_letter 12import clipboard as clp 13import datetime 14now = datetime.datetime.now() 15path1 = "xxxxx.xlsm" 16scope = ['https://spreadsheets.google.com/feeds', 17 'https://www.googleapis.com/auth/drive'] 18 19 20credentials = ServiceAccountCredentials.from_json_keyfile_name('XXXXXXXXXXXX', scope) 21gc = gspread.authorize(credentials) 22#エクセルファイル読み込み 23wb = px.load_workbook(filename=path1, keep_vba=True) 24ws = wb['シート名'] 25 26wks = gc.open('xxxx').worksheet('xxxx1') 27#スプレッドシートデータをdataframeに取り込む 28spread = get_as_dataframe(wks,sheet_name='xxxx1',usecols=[3,4,5,6,7,8,9],skiprows=2, skipcol=3,evaluate_formulas=True) 29 30print(spread) 31 32rows = dataframe_to_rows(spread, index=False, header=False) 33 34#セルに値貼り付け 35for r_idx, row in enumerate(rows, start=5): 36 for c_idx, value in enumerate(row, start=2): 37 ws.cell(row=r_idx, column=c_idx, value=value) 38
厳密には原則としてget_as_dataframeに限らず、範囲を指定しないと限り任意のセルへの書き込みは出来ません。
例えば「データが入力された最終行の次の行」←こちらも範囲の指定となります。
一体どういった容量のどういったデータを、スプレッドシート内のどこに貼り付けしたいのかを明示的にする必要があると思います。
お返事ありがとうございます。
なるほど!
copy、duplicate_sheet()はスプレッドシートからスプレッドシートしか無理という認識で間違いなでしょうか??
はい。いずれのメソッドもシートキーやシートIdなどを使用するものであり、スプレッドシートtoスプレッドシートが対象となります。
例えば日毎に数件、スプレッドシートへとデータが追加され、追加されたデータだけをExcelに追加していきたいという事であれば、スプレッドシート上で同時にいつ追加したかも管理する事で新規追加された日にちを指定してExcelに追加する事もできるでしょうし
スプレッドシートへのデータ追加自体が手動ではなくpythonなどで行われているのならば、その際に同時にExcelにもデータを追加すれば良いでしょう。
とても丁寧な説明ありがとうございます。
スプレッドシートへのデータ追加自体が手動ではなくpythonなどで行われているのならば、その際に同時にExcelにもデータを追加すれば良いでしょう。
↓
追加というのはget_as_dataframeのようにdataframeに格納しないと難しいですか??
そうなると、単なるExcelへのデータの追加となるのでまずはpythonによるExcelへのデータの追加の手法等をお調べしてはいかがでしょうか。
データフレームに限らず、Excelへの書き込みの手法は様々あると思います。
どういった形式でExcelに保存されているのかわからない為具体的な解答が出来ませんが、例えばExcel内の最終行を取得し、最終行+1を指定して書き込んでいく等。
excelのsheet1(すべて空白)にスプレッドシートの202011というシートに書いてある全ての値を取得し貼り付けたいでのです!
質問する際にかなり大事な情報だと思います。
一番初めにコメント差し上げた際にも明示的にする様にとコメント差し上げましたが事前の質問内容の投稿時にそういった内容は記載すべきです。
回答1件
あなたの回答
tips
プレビュー