google-spreadsheet sheet教學 - 如何使用Python訪問(讀取,寫入)Google表格電子表格?




api教學python android (6)

我知道這個帖子現在已經老了,但是這裡有一些關於Google Docs API的文檔。 這很難找到,但有用,所以也許它會幫助你一些。 http://pythonhosted.org/gdata/docs/api.html

我最近使用gspread來繪製員工時間數據的圖表。 我不知道它對你有多大幫助,但是這裡是代碼的鏈接: https://github.com/lightcastle/employee-timecardshttps://github.com/lightcastle/employee-timecards

Gspread讓我很輕鬆。 我還能夠添加邏輯來檢查各種條件,以創建月初至今和年初至今的結果。 但我剛剛導入了整個電子表格並從那裡解析了它,所以我不能100%確定它正是你正在尋找的。 祝你好運。

我想知道你是否可以給我一個使用python閱讀/寫入谷歌文檔/電子表格的例子。

我確實在這裡查看了google docs API https://developers.google.com/google-apps/spreadsheets/但不確定我是否點擊了正確的鏈接。 一個例子也會有很大的幫助。

我想要做的是查詢基於不同列的電子表格,更像是SQL查詢,然後對數據進行一些下游解析,並將其放入google docs中的另一個電子表格或doc。

最好的,-Abhi


我想您正在查看該API文檔頁面中基於單元格的供稿部分。 然後,您可以使用commands.getstatusoutputsubprocess在Python腳本中使用PUT / GET請求。


最新的谷歌api文檔記錄瞭如何使用python寫入電子表格,但導航有點困難。 這是一個如何追加的示例的鏈接。

以下代碼是我第一次成功嘗試附加到Google電子表格。

import httplib2
import os

from apiclient import discovery
import oauth2client
from oauth2client import client
from oauth2client import tools

try:
    import argparse
    flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
except ImportError:
    flags = None

# If modifying these scopes, delete your previously saved credentials
# at ~/.credentials/sheets.googleapis.com-python-quickstart.json
SCOPES = 'https://www.googleapis.com/auth/spreadsheets'
CLIENT_SECRET_FILE = 'client_secret.json'
APPLICATION_NAME = 'Google Sheets API Python Quickstart'


def get_credentials():
    """Gets valid user credentials from storage.

    If nothing has been stored, or if the stored credentials are invalid,
    the OAuth2 flow is completed to obtain the new credentials.

    Returns:
        Credentials, the obtained credential.
    """
    home_dir = os.path.expanduser('~')
    credential_dir = os.path.join(home_dir, '.credentials')
    if not os.path.exists(credential_dir):
        os.makedirs(credential_dir)
    credential_path = os.path.join(credential_dir,
                                   'mail_to_g_app.json')

    store = oauth2client.file.Storage(credential_path)
    credentials = store.get()
    if not credentials or credentials.invalid:
        flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)
        flow.user_agent = APPLICATION_NAME
        if flags:
            credentials = tools.run_flow(flow, store, flags)
        else: # Needed only for compatibility with Python 2.6
            credentials = tools.run(flow, store)
        print('Storing credentials to ' + credential_path)
    return credentials

def add_todo():
    credentials = get_credentials()
    http = credentials.authorize(httplib2.Http())
    discoveryUrl = ('https://sheets.googleapis.com/$discovery/rest?'
                    'version=v4')
    service = discovery.build('sheets', 'v4', http=http,
                              discoveryServiceUrl=discoveryUrl)

    spreadsheetId = 'PUT YOUR SPREADSHEET ID HERE'
    rangeName = 'A1:A'

    # https://developers.google.com/sheets/guides/values#appending_values
    values = {'values':[['Hello Saturn',],]}
    result = service.spreadsheets().values().append(
        spreadsheetId=spreadsheetId, range=rangeName,
        valueInputOption='RAW',
        body=values).execute()

if __name__ == '__main__':
    add_todo()

看看GitHub - gspread

我發現它非常容易使用,因為你可以檢索整個列

first_col = worksheet.col_values(1)

並且整整一個

second_row = worksheet.row_values(2)

你可以或多或少地建立一些基本的選擇...其中... = ...很容易。


看看api v4的gspread端口 - pygsheets 。 它應該非常容易使用而不是谷歌客戶端。

示例示例

import pygsheets

gc = pygsheets.authorize()

# Open spreadsheet and then workseet
sh = gc.open('my new ssheet')
wks = sh.sheet1

# Update a cell with value (just to let him know values is updated ;) )
wks.update_cell('A1', "Hey yank this numpy array")

# update the sheet with array
wks.update_cells('A2', my_nparray.to_list())

# share the sheet with your friend
sh.share("[email protected]")

請參閱here的文檔。

作者在這裡。


其他人提出的答案是:

for line in sys.stdin:
  print line

是非常簡單和pythonic,但必須注意,腳本將等待直到EOF開始迭代輸入行。

這意味著tail -f error_log | myscript.py tail -f error_log | myscript.py不會按預期處理行。

這種用例的正確腳本是:

while 1:
    try:
        line = sys.stdin.readline()
    except KeyboardInterrupt:
        break

    if not line:
        break

    print line

UPDATE
從註釋中已經清除了,在python 2中,只有可能存在緩衝,所以最終在打印調用發出之前等待緩衝區填滿或EOF。





python google-spreadsheet google-api google-api-python-client google-sheets-api