Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Google Sheets API中处理工作表更改_C#_Google Sheets_Google Drive Api_Google Sheets Api - Fatal编程技术网

C# 在Google Sheets API中处理工作表更改

C# 在Google Sheets API中处理工作表更改,c#,google-sheets,google-drive-api,google-sheets-api,C#,Google Sheets,Google Drive Api,Google Sheets Api,我正在尝试处理电子表格更改以更新数据的本地版本,但遇到了一些问题: Google Sheets API没有任何检查上次修改时间或文件版本的请求。(如果我弄错了,请纠正我) 谷歌需要一些时间来处理文件的更改和更新版本元数据 例如: 文件的版本为10 正在发送带有某些数据的BatchUpdateRequest 在上一个请求结束时,通过DriveAPI文件检查文件版本。使用字段“version”获取请求并获取旧版本10 如果等待大约15秒,此请求将返回正确的数据,但这不是一个解决方案,因为每个电子

我正在尝试处理电子表格更改以更新数据的本地版本,但遇到了一些问题:

  • Google Sheets API没有任何检查上次修改时间或文件版本的请求。(如果我弄错了,请纠正我)

  • 谷歌需要一些时间来处理文件的更改和更新版本元数据

例如:

文件的版本为10

  • 正在发送带有某些数据的BatchUpdateRequest
  • 在上一个请求结束时,通过DriveAPI文件检查文件版本。使用字段“version”获取请求并获取旧版本10
  • 如果等待大约15秒,此请求将返回正确的数据,但这不是一个解决方案,因为每个电子表格的数据每分钟都会更新,因此,它将花费更多的时间

    为了克服这些问题,我实现了电子表格版本的本地计算逻辑,并在上传后进行比较:如果在线版本>本地版本电子表格将被重新加载。但它带来了新的问题:

    若在几台计算机上对电子表格进行更改,所有计算机上的本地版本都将增加,但谷歌将此更改为一个版本。所以,为了正确工作,它必须是oldversionnubmer+进行更改的计算机数,但实际上它是oldVersionNumber+1。因此,没有人会得到实际的电子表格数据,因为在线版本不会高于本地版本

    这样,我就有了一个问题:如何更新来自其他来源的数据变化的电子表格?

    GoogleSpreadsheets版本填充如下:

    var versions = Instance.GoogleSpreadsheetsVersions;
    
        if (!versions.ContainsKey(newTable.SpreadsheetId)) {
                            var request = GoogleSpreadsheetsServiceDecorator.Instance.DriveService.Files.Get(newTable.SpreadsheetId);
                            request.Fields = "version";
                            var response = request.Execute();
                            versions.Add(newTable.SpreadsheetId, response.Version);
                        }
    
    版本比较本身:

                var newInfo = new Dictionary<string, long?>();
                foreach (var info in GoogleSpreadsheetsVersions)
                {
                    try
                    {
                        //Gets file version
                        var request = GoogleSpreadsheetsServiceDecorator.Instance.DriveService.Files.Get(info.Key);
                        request.Fields = "version";
                        var response = request.Execute();
    
                        // local version < actual google version
                        if (info.Value < response.Version)
                        {
                            // setting flag of reloading for each sheet from this file
                            foreach (var t in GoogleSpreadsheets.Where(sheet => sheet.SpreadsheetId == info.Key))
                                t.IsLoadRequestRequired = true;
                        }
                        //Refreshing local versions
                        newInfo.Add(info.Key, response.Version);
                    }
                    catch (Exception e) when (e.Message.Contains("File not found"))
                    {
                        newInfo.Add(info.Key, null);
                    }
                }
                GoogleSpreadsheetsVersions = newInfo;
    
    var newInfo=newdictionary();
    foreach(谷歌电子表格版本中的var信息)
    {
    尝试
    {
    //获取文件版本
    var request=GoogleSpreadsheetsServiceDecorator.Instance.DriveService.Files.Get(info.Key);
    request.Fields=“version”;
    var response=request.Execute();
    //本地版本<实际谷歌版本
    如果(信息值<响应版本)
    {
    //为此文件中的每张图纸设置重新加载标志
    foreach(GoogleSpreadsheets.Where中的var t(sheet=>sheet.SpreadsheetId==info.Key))
    t、 IsLoadRequestRequired=true;
    }
    //刷新本地版本
    newInfo.Add(info.Key,response.Version);
    }
    捕获(异常e)时(e.Message.Contains(“未找到文件”))
    {
    newInfo.Add(info.Key,空);
    }
    }
    谷歌电子表格版本=newInfo;
    
    附言:

    • 谷歌指南中的版本字段描述: 文件的单调递增的版本号。这反映了对服务器上的文件所做的每一次更改,即使是用户看不到的更改

    • 代码中的电子表格本地类表示Google中一张工作表的数据。所以,如果一个谷歌电子表格包含10张表格,那么它将是程序中的10张电子表格

    • 可能会有帮助


    我认为最好的解决方案是使用。有了它,你就可以有一个新家了。你能接受应用程序脚本解决方案吗?我认为,对于你正在尝试做的事情,最好的解决方案是使用。有了它,你就可以有一个新家了。你能接受应用程序脚本解决方案吗?