在Google电子表格中更新单元格返回错误“缺少资源版本号”;/ "远程服务器返回一个错误:(400)错误的请

本文关键字:错误 返回 电子表格 服务器 Google 一个 quot 更新 资源 版本号 单元格 | 更新日期: 2023-09-27 17:54:47

我想在谷歌电子表格中更新一个单元格值,但不幸的是收到一个错误:

Google.GData.Client.GDataRequestException was unhandled
  HResult=-2146233088
  Message=Execution of request failed: https://spreadsheets.google.com/feeds/cells/1nW8nxoS2l9pbj6dctreEfKHNXmsfbbsCAvOd7TIj4Bo/od6/private/full/R1C1
  Source=Google.GData.Client
  ResponseString=Missing resource version ID
  StackTrace:
   at Google.GData.Client.GDataRequest.Execute()
   ...
   at System.Threading.ThreadHelper.ThreadStart()
InnerException: System.Net.WebException
   HResult=-2146233079
   Message=The remote server returned an error: (400) Bad Request.
   Source=System
   StackTrace:
        at System.Net.HttpWebRequest.GetResponse()
        at Google.GData.Client.GDataRequest.Execute()

我的代码是非常简单的,是基于样本下载https://developers.google.com/google-apps/spreadsheets/?csw=1#changing_contents_of_a_cell:

        SpreadsheetsService service = new SpreadsheetsService("MySpreadsheetIntegration-v1");
        // TODO: Authorize the service object for a specific user (see other sections)
        service.setUserCredentials("...", "...");            
        // Instantiate a SpreadsheetQuery object to retrieve spreadsheets.
        SpreadsheetQuery query = new SpreadsheetQuery();
        // Make a request to the API and get all spreadsheets.
        SpreadsheetFeed feed = service.Query(query);
        foreach (SpreadsheetEntry spreadsheet in feed.Entries)
        {
            if (spreadsheet.Title.Text == "Test01")
            {
                // Get the first worksheet of the first spreadsheet.
                WorksheetFeed wsFeed = spreadsheet.Worksheets;
                WorksheetEntry worksheet = (WorksheetEntry)wsFeed.Entries[0];
                // Fetch the cell feed of the worksheet.
                CellQuery cellQuery = new CellQuery(worksheet.CellFeedLink);
                cellQuery.MinimumRow = 1;
                cellQuery.MaximumRow = 10;
                cellQuery.MinimumColumn = cellQuery.MaximumColumn = 1;
                cellQuery.ReturnEmpty = ReturnEmptyCells.yes;
                CellFeed cellFeed = service.Query(cellQuery);
                // Iterate through each cell, updating its value if necessary.
                foreach (CellEntry cell in cellFeed.Entries)
                {
                    cell.InputValue = "Foooooo!";
                    cell.Update();
                }
            }
        }

在以下行引发错误:

                    cell.Update();

我用谷歌。GData版本2.2.0.0 (http://code.google.com/p/google-gdata/)。你知道什么会导致这个问题吗?

[Edit] gdata python客户端也报告了这个问题。希望它能尽快修好。http://code.google.com/p/gdata-python-client/issues/detail?id=692&排序= -opened& colspec =打开% 20恒星% 20 id % 20类型% 20地位% 20优先% 20组件% 20总结

谢谢!

在Google电子表格中更新单元格返回错误“缺少资源版本号”;/ "远程服务器返回一个错误:(400)错误的请

我们在大约一周前遇到了同样的问题,当时谷歌似乎将所有电子表格翻转为"新"格式。
这也适用于通过GData api创建的新对象。到处都有400个错误

我深入研究了GData变体库(Python, Java, .Net等)的报告,最终发现了这个小金块:https://stackoverflow.com/a/23438381/1685090

将Etag属性设置为"*"就是答案:)

要清楚,我们正在设置WorksheetEntry。Etag当我们想在工作表上运行Update()时,我们也设置了CellEntry。当通过SpreadsheetsService.Batch()进行批处理更新时,Etag .

到目前为止,它似乎与谷歌的"新"电子表格工作得很好。

这种方法的一个问题是,任何并发/合并操作都将被放弃——本质上你是在告诉Google,你的更新必须清除单元格中任何其他并发的先验值。

我解决这个问题的另一种方法是通过添加额外的HTTP头

If-Match: *

表示覆盖所有内容。