【问题标题】:How to update forecolor only in Google Sheets for specific cells如何仅在 Google 表格中为特定单元格更新前景色
【发布时间】:2021-08-29 03:26:19
【问题描述】:

我需要更改某些单元格的文本颜色,同时使用 Sheets API v4 保留其余格式。 我在 how-to-read/write-google-sheets-with-c# 中跟踪了一个样本到 ForeColor 的单元格范围。

        if (foreColor != System.Drawing.Color.Empty)
        {
            var spreadsheet = await service.Spreadsheets.Get(_spreadsheetId).ExecuteAsync();
            var sheet = spreadsheet.Sheets.First(s => s.Properties.Title == worksheetTitle);
            int sheetId = sheet.Properties.SheetId ?? 0;

            var cellFormat = new CellFormat
            {
                TextFormat = new TextFormat
                {
                    ForegroundColor = new Color
                    {
                        Alpha = foreColor.A / 255f,
                        Red = foreColor.R / 255f,
                        Green = foreColor.G / 255f,
                        Blue = foreColor.B / 255f,
                    }
                }
            };

            CellData getFormatted() => new CellData { UserEnteredFormat = cellFormat };

            var request = new Request
            {
                UpdateCells = new UpdateCellsRequest
                {
                    Start = new GridCoordinate
                    {
                        SheetId = _sheetId,
                        ColumnIndex = startColumnIndex,
                        RowIndex = rowNumber - 1,
                    },
                    Fields = "*",
                    Rows = new List<RowData> { new RowData { 
                        Values = new List<CellData>
                        {
                            getFormatted(), //  details
                            getFormatted(), //  system type
                            getFormatted(), //  price
                            getFormatted(), //  primary cost
                            getFormatted(), //  secondary cost
                            getFormatted(), //  accepted
                        }
                    } },
                },
            };

            var requests = new BatchUpdateSpreadsheetRequest
            {
                ResponseIncludeGridData = true,
                Requests = new List<Request> { request },
            };

            var response = await service.Spreadsheets.BatchUpdate(requests, spreadsheet.SpreadsheetId).ExecuteAsync();
        }

上述代码的问题在于,虽然它确实改变了文本颜色,但它也清除了所有单元格值和现有格式 - (如边框、文本对齐等)。

有没有办法只更新单元格文本颜色?

【问题讨论】:

    标签: c# google-sheets-api


    【解决方案1】:

    首先看一下,Fields = "*", 会替换所有字段。由于您只想更新foregroundColor,请尝试使用它:

    Fields = "userEnteredFormat.textFormat.foregroundColor"
    

    示例请求正文:

    "requests": [
        {
          "repeatCell": {
            // A:B
            "range": {
              "sheetId": 0,
              "startColumnIndex": 0,
              "endColumnIndex": 2
            },
            // change font color to blue
            "cell": {
              "userEnteredFormat": {
                "textFormat": {
                  "foregroundColor": {
                    "blue": 1
                  }
                  // included bold for fields demonstration
                  "bold": true
                }
              }
            },
            "fields": "userEnteredFormat.textFormat.foregroundColor"
          }
        }
      ]
    

    请注意,我在 foregroundColor 下方添加了粗体字。由于我们刚刚在字段中指定了userEnteredFormat.textFormat.foregroundColor,它只会更新请求中的foregroundColor(忽略粗体)

    您的问题是,您使用了*,因此替换了所有格式和值,完全删除了单元格值和格式,因为您的请求中没有其他字段的值。

    示例:

    输出:

    您可以查看的示例参考:

    【讨论】:

    • 完美!非常感谢 - 工作就像一个魅力:-)
    猜你喜欢
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    • 2018-09-15
    • 2021-03-23
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多