【问题标题】:How to make a flask website that generates dynamic google sheets如何制作一个生成动态谷歌表格的烧瓶网站
【发布时间】:2019-07-01 17:30:01
【问题描述】:

我正在帮助一个组织,他们希望有一个网站,您可以在其中输入一些数字,并且应该出现一个 Google 表格链接,其中将数字放入某个公式中以给出结果(即,如果您输入 @ 987654322@ 它会显示一个表格,其中前两个数字相加然后乘以第三个数字:

Num1    Num2     Num2  Result
5       5        3     30

我已经搜索了 GitHub 和互联网,但我似乎找不到可以从网站创建 Google 表格并将给定数据输入公式的库。我发现的大多数东西都使用了 gsheet API,并且只修改了现有的工作表。我找到了一个名为 xlsxwriter 的 Python (Flask) 库,我想知道是否有任何方法可以将 .xlsx 转换为在线 Google 表格,或者是否可以从我的网站制作 Google 表格。

(我的网站目前在 Flask 中,但由于我实际上没有后端。如果有人知道另一个 Web 框架中的库,我愿意切换。)

谢谢你,约翰 D

【问题讨论】:

    标签: google-sheets google-sheets-api xlsxwriter google-sheets-formula


    【解决方案1】:

    也许我在这里遗漏了一些东西,但常规的 Google Sheets API(可用于 Python)允许您创建具有指定标题的空白电子表格。

    spreadsheet = {
        'properties': {
            'title': title
        }
    }
    spreadsheet = service.spreadsheets().create(body=spreadsheet,
                                        fields='spreadsheetId').execute()
    print('Spreadsheet ID: {0}'.format(spreadsheet.get('spreadsheetId')))
    

    以下是基于 Google 快速入门示例的更完整示例:

    from __future__ import print_function
    import pickle
    import os.path
    from googleapiclient.discovery import build
    from google_auth_oauthlib.flow import InstalledAppFlow
    from google.auth.transport.requests import Request
    
    # If modifying these scopes, delete the file token.pickle! Adjust scopes as needed
    SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
    
    
    def main():
        creds = None
        # The file token.pickle stores the user's access and refresh tokens, and is
        # created automatically when the authorization flow completes for the first
        # time.
        if os.path.exists('token.pickle'):
            with open('token.pickle', 'rb') as token:
                creds = pickle.load(token)
        # If there are no (valid) credentials available, let the user log in.
        if not creds or not creds.valid:
            if creds and creds.expired and creds.refresh_token:
                creds.refresh(Request())
            else:
                flow = InstalledAppFlow.from_client_secrets_file(
                    'credentials.json', SCOPES)
                creds = flow.run_local_server(port=0)
            # Save the credentials for the next run
            with open('token.pickle', 'wb') as token:
                pickle.dump(creds, token)
    
        service = build('sheets', 'v4', credentials=creds)
    
        # Call the Sheets API
    
        spreadsheet = {
            'properties': {
                'title': 'New Test Sheet 2'
            }
        }
        spreadsheet = service.spreadsheets().create(body=spreadsheet,
                                            fields='spreadsheetId').execute()
        #print('Spreadsheet ID: {0}'.format(spreadsheet.get('spreadsheetId')))
        spreadsheet_id = spreadsheet.get('spreadsheetId')
    
        range_name = 'Sheet1!A1:D5'
        body = {
            "majorDimension": "ROWS",
            "values": [
                ["Item", "Cost", "Stocked", "Ship Date"],
                ["Wheel", "$20.50", "4", "3/1/2016"],  # new row
                ["Door", "$15", "2", "3/15/2016"],
                ["Engine", "$100", "1", "30/20/2016"],
                ["Totals", "=SUM(B2:B4)", "=SUM(C2:C4)", "=MAX(D2:D4)"]
            ],
        }
        result = service.spreadsheets().values().update(
            spreadsheetId=spreadsheet_id,
            range=range_name,
            body=body,
            valueInputOption='USER_ENTERED'
        ).execute()
        print(result)
    
    if __name__ == '__main__':
        main()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-12
      • 2021-08-28
      • 1970-01-01
      相关资源
      最近更新 更多