javascript - Hur man anger färger för en Google Sheet-cell via Google Sheet API


Här är koden jag använder för att komma åt ett Google-kalkylblad och ändra några av egenskaperna för en av cellerna i Javascript

API:et verkar kräva att du anger en procentandel av RGB-färger snarare än den mer traditionella faktiska RGB-färgen i antingen RGB-notation (såsom 255,242,204) eller hex (#fffccc). Finns det ett alternativ?

Jag är också förvirrad över varför jag inte kan ange ett enda cellintervall för att uppdatera. I koden nedan vill jag bara uppdatera cell BB338, men API:et verkar tvinga mig att gå en rad högre för att ange en startrow och en kolumn till vänster för att ange startkolumnnumret. Finns det ett sätt att endast ange en enda cell att formatera?

Jag har försökt använda RGB-färgerna och hex-färgkoden, och cellens bakgrund blir svart, så det fungerar inte.

Jag har försökt ange samma rad som start- och slutrad och samma kolumn som start- och slutkolumn, och ingenting händer i den cell jag anger.

Jag verkar inte kunna hitta någon API 4-dokumentation som verkligen går in på detta. Allt jag hittar är översikter och några specifika detaljer som inte är vad jag letar efter.

{
  "requests": [
    {
      "repeatCell": {
        "range": {
          "sheetId":@[User::var_SheetID],
          "startRowIndex": 337,
          "endRowIndex": 338,
          "startColumnIndex": 53,
          "endColumnIndex": 54
        },
            "cell": {
             "userEnteredFormat": {
                "backgroundColor": {
                  "red": 1.0,
                  "green": 0.95,
                  "blue": 0.8
                },
                "textFormat": {
                  "fontSize": 9,
                  "bold": true
                }
              }
            },
        "fields": "userEnteredFormat(backgroundColor,textFormat)"
      }
    }
  ]
}

Jag skulle förvänta mig att API:et skulle tillåta mig att använda vanliga RGB- eller HEX-färgspecifikationer för en cell, men det verkar inte göra det. Jag skulle också förvänta mig att jag kan ange en enskild cell att formatera, men specifikationen "upprepa cell" verkar inte tillåta det. Finns det ett annat sätt att göra detta?

Svar #1

För att få rätt procentandelar av färgerna ta RGB-färgen och dela med 255, så i ditt exempel (255,242,204) blir det:

{
  "red": 255/255,
  "green": 242/255,
  "blue": 204/255
}

eller

{
  "red": 1.0,
  "green": 0.949019608,
  "blue": 0.8
}

Svar #2

Jag har stött på samma problem med hex-rgb-färgkonvertering och jag har skapat en funktion för att konvertera mellan format:

function hexToRgb(hexColor) {
    hexColor = hexColor.replace('#', '');
    return [
        parseInt(hexColor.substring(0, 2), 16) / 255.0,
        parseInt(hexColor.substring(2, 4), 16) / 255.0,
        parseInt(hexColor.substring(4, 6), 16) / 255.0
    ];
}

Och också ett utdrag av json som skickats till gsheet api...

{
            "repeatCell": {
                "range": {
                    "sheetId": 0,
                    "startRowIndex": row_index,
                    "endRowIndex": row_index + 1,
                    "startColumnIndex": 0,
                    "endColumnIndex": 9
                },
                "cell": {
                    "userEnteredFormat": {
                        "backgroundColor": {
                            "red": rgb_color[0],
                            "green": rgb_color[1],
                            "blue": rgb_color[2]
                        },
                        "horizontalAlignment": "CENTER",
                        "textFormat": {
                            "foregroundColor": {
                                "red": 1.0,
                                "green": 1.0,
                                "blue": 1.0
                            },
                            "fontSize": 10,
                            "bold": True
                        }
                    }
                },
                "fields": "userEnteredFormat(backgroundColor,textFormat,horizontalAlignment)"
            }
        }

Även om det har gått lång tid sedan frågan ställdes... tycker jag att lösningen jag har utvecklat kan vara användbar för någon.

I förhållande till den del av frågan du frågar om huruvida det är möjligt att direkt ange cellen som ska ändras... har jag inte hittat något annat sätt än att ange området som du gör i din fråga...