pythonでGoogleドライブのフォルダへ保存及びスプレッドシート書き込み【続】


[前回の続き](https://qiita.com/disk131/items/0cbb5ca528d07b48bfbc)

## Googleドライブ側で下準備

pythonでGoogleドライブのフォルダ及びスプレッドシートを編集する場合、共有する必要があります。
ファイル右クリックで共有をクリックします。
**pythonでGoogleドライブのフォルダ内にファイルを保存したり、スプレッドシートを作成して編集などをしたい場合は、そのフォルダを共有**します。
**特定のスプレッドシートしか読み書きしない場合はそのスプレッドシートを共有**します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399745/67ea666e-614e-745f-9a51-36673a6b194a.png)

GCPからダウンロードしてきたjsonファイルを開いてください。
pythonのプロジェクトフォルダ直下にあるはずです。
メモ帳やVSCodeなどで開いて大丈夫です。

```
"client_email": "~~~~~~~~~~~~~~~~@~~~~~~~~~~~~~~.iam.gserviceaccount.com"
```
↑この部分を探してください。
`~~~~~~~~~~~~~~~~@~~~~~~~~~~~~~~.iam.gserviceaccount.com`の部分だけコピーします。
そしてGoogleドライブの方での共有のメールアドレスを打ち込むところにペーストします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399745/6cdeb14f-35d6-20f7-00bc-f240de33c481.png)
図のようにクリックし、送信を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399745/a2056609-3011-d533-1888-63ac3d1e17a7.png)
これで下準備はできました。

## python側

### 必要なライブラリをインストール

```sh
pip install gspread oauth2client pydrive
```

```python
import os

import gspread
from oauth2client.service_account import ServiceAccountCredentials
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive


JSON_PATH = os.path.join(os.getcwd(), "jsonファイル名.json")
# GoogleドライブのURLからIDを取ってきます。
FOLDER_ID = "~~~~~~~~~~~~~~~~~~~~~"
# 対象フォルダのIDはhttps://drive.google.com/drive/u/0/folders/以下
SHEET_ID = "~~~~~~~~~~~~~~~~~~~~~"
# スプレッドシートの場合https://docs.google.com/spreadsheets/d/ここがID/edit#gid=0

class Gspread:
    def __init__(self) -> None:
        self.workbook: Spreadsheet
        self.worksheet: Worksheet
        self.drive: GoogleDrive
        self.credentials: Any
        self.set_gspread()

    def set_gspread(self):
        scope = [
            "https://spreadsheets.google.com/feeds",
            "https://www.googleapis.com/auth/drive",
        ]
        self.credentials = ServiceAccountCredentials.from_json_keyfile_name(
            JSON_PATH , scope
        )
        gauth = GoogleAuth()
        gauth.credentials = self.credentials
        self.drive = GoogleDrive(gauth)

    # フォルダにファイルを保存してみる
    def save_file(self) -> None:
        f = self.drive.CreateFile({"parents": [{"id": FOLDER_ID}]})
        f.SetContentFile("パスとファイル名")
　　　　# Googleドライブのフォルダに保存したファイルを命名
        f["title"] = "ファイル名"
        f.Upload()

    # スプレッドシートを開く
    def open_sheet_by_(self):
        gc = gspread.authorize(self.credentials)
        # スプレッドシートを開く
        self.workbook = gc.open_by_key(SHEET_ID)
        # ワークシート１シート目指定
        self.worksheet = self.workbook.get_worksheet(0)

　　# 最終行に書き込み
　　def append_row(self) -> None:
　　　　test = ["test1", "test2", "test3"]
        # value_input_option="USER_ENTERED"全て文字列として書き込みのを防止
        self.worksheet.append_row(test, value_input_option="USER_ENTERED")

　　# セルに書き込み
　　def update_cell(self) -> None:
        # update_cell(row, column, val)
        self.worksheet.update_cell(1, 2, "test")
```

スプレッドシートは書き込みはもちろん、読み込みもできます。
他にもスプレッドシートのシートを追加したり、名前をつけたりいろいろ操作できるのでいろいろ調べてやってみましょう。

- スクレイピングしてきた画像URLをIMAGE関数で画像を貼り付けたりもできます。  
[こちらを参考に](https://roboma.io/blog/marketing/image-function-of-google-spreadsheet/)  
- 罫線書いたり、色変えたり、行及び列の幅も操作できます。
その場合はgspread_formattingというライブラリを使いましょう。  
[gspread_formatting公式](https://pypi.org/project/gspread-formatting/)