【问题标题】:Change row color using Google spreadsheet API使用 Google 电子表格 API 更改行颜色
【发布时间】:2014-08-04 17:18:20
【问题描述】:

我想使用 Google Spreadsheet API 更改电子表格的行颜色。

我正在使用 JAVA,我看到它在 JavaScript 中工作,但我没有在 JAVA 中找到它。

【问题讨论】:

    标签: java google-sheets google-spreadsheet-api


    【解决方案1】:

    Google Sheet API 文档至少可以说不是最好的,但经过一番摆弄之后,python 代码可以工作:

    http = credentials.authorize(httplib2.Http())
    discovery_url = ('https://sheets.googleapis.com/$discovery/rest?'
                     'version=v4')
    service = discovery.build('sheets', 'v4', http=http, discoveryServiceUrl=discovery_url, cache_discovery=False)
    
    spreadsheet = service.spreadsheets().get(spreadsheetId=ss.id).execute()
    
    requests = []
    
    for sheet in spreadsheet.get('sheets'):
        sheetId = sheet.get('properties').get('sheetId')
        requests.append({
                "updateCells": {
                "rows": [
                    {
                        "values": [{
                                       "userEnteredFormat": {
                                           "backgroundColor": {
                                               "red": 1,
                                               "green": 0,
                                               "blue": 0,
                                               "alpha": 1
                                           }}}
                        ]
                    }
                ],
                "fields": 'userEnteredFormat.backgroundColor',
                "range": {
                    "sheetId": sheetId,
                    "startRowIndex": 0,
                    "endRowIndex": 1,
                    "startColumnIndex": 0,
                    "endColumnIndex": 1
                }}})
    
        body = {
            'requests': requests
        }
    
        response = service.spreadsheets().batchUpdate(spreadsheetId=ss.id, body=body).execute()
    

    【讨论】:

    • 这似乎只改变了单个单元格的背景。即使将 endColumnIndex 更新为 > 1 的值,它仍然只为我更新一个单元格。
    • 不确定这是 Java API 还是 .NET API,但我最终不得不使用 RepeatCellRequest 而不是 UpdateCellRequest,如 this solution
    【解决方案2】:

    通过 JavaScript API,您可以使用:

        const range = {
          sheetId: 250062959, // find your own
          startRowIndex: 0,
          endRowIndex: 1,
          startColumnIndex: 0,
          endColumnIndex: 1,
        };
    
        const request = {
          spreadsheetId, // fill with your own
          resource: {
            requests: [
              {
                updateCells: {
                  range,
                  fields: '*',
                  rows: [
                    {
                      values: [
                        {
                          userEnteredValue: { stringValue: 'message' },
                          userEnteredFormat: {
                            backgroundColor: { red: 1, green: 0, blue: 0 },
                          },
                        },
                      ],
                    },
                  ],
                },
              },
            ],
          },
        };
    
        try {
          const result = await client.spreadsheets.batchUpdate(request);
          console.log(result);
        } catch (error) {
          throw `update row error ${error}`;
        }
    

    【讨论】:

      【解决方案3】:

      我知道自从您最初询问以来已经有很长时间了,但根据 v4 API,您可以在技术上设置一个条件格式,该格式始终适用于 spreadsheets.batchUpdate

      例如。 https://developers.google.com/sheets/api/samples/conditional-formatting

      可能不是最容易管理的事情,但“技术上”是可能的

      【讨论】:

        【解决方案4】:

        设置单元格颜色:

        https://developers.google.com/apps-script/reference/spreadsheet/range#setBackground(String)

        据我所知,google-apps-script (JavaScript) 是唯一的选择。电子表格 API (gdata) 无法做到这一点

        【讨论】:

          【解决方案5】:
          object = {
    
          "updateCells": {
             "range": {
                  "sheetId": sheetId,
    
                   "startRowIndex":startRowIndex,
                   "endRowIndex": endRowIndex,
    
                   "startColumnIndex": startColumnIndex,
                
                   "endColumnIndex": endColumnIndex
    
                  }
            "rows": [{
                "values": [{
                    "textFormatRuns": [
     
                        {"format": {
    
                          "foregroundColor": {
     
                             "red": 0.0,
    
                             "green": 255.0,
    
                             "blue": 31.0
    
                          },
    
                       },"startIndex": 0
     
                   },
    
                 ]
    
               }
    
              ]
    
            }]
          "fields": "textFormatRuns(format)"
    
          }
    }
          

          【讨论】:

            猜你喜欢
            • 2014-10-02
            • 1970-01-01
            • 2015-02-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多