【问题标题】:Download all Google sheets下载所有 Google 表格
【发布时间】:2019-01-22 10:23:00
【问题描述】:

我想使用 Google.Apis.Sheets.v4 从 C# 的 Google 电子表格下载所有可用的表格; 我编写了以下从 Google 开发者网页获得的代码,但在这里它只能通过其 id 连接粒子表:

UserCredential 凭证;

        using (var stream =
            new FileStream(@"credentials.json", FileMode.Open, FileAccess.Read))
        {
            string credPath = System.Environment.GetFolderPath(
                System.Environment.SpecialFolder.Personal);


            credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                GoogleClientSecrets.Load(stream).Secrets,
                Scopes,
                "user",
                CancellationToken.None,
                new FileDataStore(credPath, true)).Result;
            Console.WriteLine("Credential file saved to: " + credPath);
        }

        // Create Google Sheets API service.
        var service = new SheetsService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credential,
            ApplicationName = ApplicationName,
        });




        // Define request parameters.
        String spreadsheetId = "1rpmT0S1Naic8wG8xok2cjNJBIgKa8t24C80muc8YVNE";// "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms";
        String range = "Class Data!A1:B4";
        SpreadsheetsResource.ValuesResource.GetRequest request =
                service.Spreadsheets.Values.Get(spreadsheetId, range);

有没有办法下载所有表格名称及其电子表格 ID,以便我的程序可以通过其 ID 逐个连接并更新数据? 在此先感谢

【问题讨论】:

    标签: c# google-api google-sheets-api google-api-dotnet-client


    【解决方案1】:

    我认为这完全取决于您想要做什么,因为我怀疑您的问题不清楚,因为您对 API 及其作用有误解。

    • Google Sheets API 可让您访问工作表中的内容。
    • Google Drive API 将允许您对实际工作表本身进行文件存储访问。

    因此,例如,如果您要下载用户有权访问的所有 google 表格的列表,则可以使用 Google drive api file.list 方法。然后,您可以将文件本身下载到您的硬盘上。或者您可以使用 Google 表格 api 查看文件本身的限制。

    var request = service.Files.List();
    request.Q = "mimeType = 'application/vnd.google-apps.spreadsheet'"
    var result = request.Execute();
    

    My drive samples

    Google drive api 上的路线

    您需要记住的是 Google drive api 是一个文件存储 api。将其视为 Windows PC 上的文件资源管理器。它包含有关用户有权访问的文件的所有信息。 google sheet api 只能访问类型为 pplication/vnd.google-apps.spreadsheet 的文件中的数据

    获取 sheet 类型的文件列表

    var driveService = new DriveService(new BaseClientService.Initializer()
                {
                    HttpClientInitializer = credential,
                    ApplicationName = "Drive Oauth2 Authentication Sample"
                });
    
    var request = driveService.Files.List();
    request.Q = "mimeType = 'application/vnd.google-apps.spreadsheet'"
    var result = request.Execute();
    
    var fileId = result.FirstOrDefault().Id
    var fileId = result.FirstOrDefault().Name
    

    范围

    请记住,要访问用户数据,您必须获得该用户的访问权限才能访问该数据才能正常工作,您必须已请求访问其驱动器数据的权限。以下范围之一应该可以工作。

    列出所有文件教程

    本教程也可以帮助您List All files。您只需添加 Q 参数即可仅列出特定元数据类型的文件。

    【讨论】:

    • 感谢您的回复。实际上,我只想在 winform C# 的下拉列表中填充所有工作表名称及其 ID。因此,当用户从下拉列表中选择任何工作表并以编程方式更新该工作表时。
    • 然后像我向你展示的那样通过搜索 mimetype 来查看 Google drive api 使用文件列表。
    • 好的。我试过了,但它无法识别 File 类方法,// 创建 Google Sheets API 服务。 var service = new SheetsService(new BaseClientService.Initializer() { HttpClientInitializer = credential, ApplicationName = ApplicationName, }); var request = service.Files.List(); request.Q = "mimeType = 'application/vnd.google-apps.spreadsheet'" var 结果 = request.Execute();
    • 好的,谢谢。我查看了提到的链接。这很好,但不幸的是它让我感到困惑。我没有查看任何下载所有文件的代码,此链接也不适用于电子表格,我需要任何只需要填充所有电子表格名称和 ID 的方法或服务,以便用户可以通过从下拉列表中选择任何工作表名称来进行更新。不过谢谢你的回复。等待其他开发者的意见。
    • 该链接只是为了向您展示如何创建一个驱动器服务,它不是供您下载文件的。我以为你可以把两个和两个放在一起,请检查最后的更新。我认为您不会从其他开发人员那里得到更好的答案,因为这就是这两个 api 的工作方式。 Sheets api 无法为您提供用户驱动器帐户上的文件列表,这就是 google drive api 的用途。
    【解决方案2】:

    您可以使用@DaImTo 提供的代码获取驱动器上所有必要的电子表格 ID。

    然后您可以使用 spreadsheets.get 方法获取特定电子表格上的所有信息,包括工作表名称和 ID https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/get

    然后您可以使用spreadsheets.values Resource 中的各种方法来获取/更新/批量更新工作表中的值。 https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values 提示:在values.get 中仅将工作表名称作为range 参数的值返回包含所有工作表值的范围,非常方便。

    【讨论】:

    • 这不是我的要求,我的要求是在我的下拉列表中显示所有电子表格名称。代码不起作用,您建议的带有逻辑的代码是针对我已经实现的特定电子表格的。 @DaImT 分享的链接令人困惑。
    • 此链接已在我的案例中使用。 developers.google.com/sheets/api/v3/worksheets
    • 正好我在看同样的东西。谢谢大家的回复
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    相关资源
    最近更新 更多