.Net 如何在 Google Drive 中创建 Google 电子表格? 模式 1:模式 2:模式 3:模式 4:参考:

问题描述

全新的 Google SpreadSheet API (v4)。我正在使用 .Net (5.0) 创建一个新的电子表格,我认为它会保存在我的 Google 云端硬盘/帐户中。

从我能找到的示例/文档中拼凑出以下内容,但我不明白电子表格的保存(存储)位置 - 因为我无法在我的帐户中找到它。

下面是我正在使用的代码——它执行时没有错误并返回一个电子表格 ID 和 URL——但是在我的 Google 帐户中找不到电子表格!!

     String sheet_name;

     Google.Apis.Sheets.v4.SpreadsheetsResource.CreateRequest create_request;

     Google.Apis.Sheets.v4.Data.Spreadsheet spreadsheet_body;
     Google.Apis.Sheets.v4.Data.Spreadsheet spreadsheet;

     Google.Apis.Sheets.v4.Data.Sheet sheet;


     // Create spreadsheet object and set properties ...

     spreadsheet_body = new Google.Apis.Sheets.v4.Data.Spreadsheet();

     spreadsheet_body.Properties = new Google.Apis.Sheets.v4.Data.SpreadsheetProperties();

     spreadsheet_body.Properties.Title = "TEST1";


     // Create list of sheets to include in this spreadsheet ...

     spreadsheet_body.Sheets = new List<Google.Apis.Sheets.v4.Data.Sheet>();


     // Create a sheet object and set properties ...

     sheet_name = "Sheet 1";

     sheet = new Google.Apis.Sheets.v4.Data.Sheet();

     sheet.Properties = new Google.Apis.Sheets.v4.Data.SheetProperties();

     sheet.Properties.Title = sheet_name;

     sheet.Properties.SheetId = 1;

     sheet.Properties.SheetType = "GRID";


     // Add sheet to this spreadsheet ...

     spreadsheet_body.Sheets.Add( sheet );


     // Try to create the spreadsheet ...

     try
     {

        create_request = sheet_service.Spreadsheets.Create( spreadsheet_body );

        spreadsheet = create_request.Execute();

        // Spreadsheet ID returned -- but where is the spreadsheet saved??? ...

        Console.WriteLine( $"spreadsheet.SpreadsheetId: {spreadsheet.SpreadsheetId}" );

        Console.WriteLine( $"spreadsheet.SpreadsheetUrl: {spreadsheet.SpreadsheetUrl}" );

     }
     catch ( Exception ex )
     {

        Console.WriteLine( ex.ToString() );

     }

  }

当我将返回的 URL 剪切并粘贴到浏览器中时 -- Google 显示以下内容

   You need access
   Ask for access,or switch to an account with access.

...带有一个名为“请求访问”的按钮——点击后,系统显示

   Request sent
   You'll get an email letting you kNow if the file is shared with you

...但我从未收到任何电子邮件

我在向 API 发出请求时使用了服务帐户/凭据,这可能是问题吗?

如果有人有通过 API 在自己的 Google 帐户中创建 Google 电子表格的工作示例,请分享

非常感谢任何帮助/见解。

解决方法

I am using a service account / credentials when making the requests to the API,could this be the problem? 开始,我认为您的问题可能与此有关。

当使用 Sheets API 中的“方法:spreadsheets.create”方法创建新的电子表格时,电子表格将创建到服务帐户的 Google 驱动器的根文件夹中。服务帐户的 Google Drive 与您的 Google Drive 不同。这样,您就无法使用浏览器直接访问服务帐户创建的电子表格。我认为这就是您的问题的原因。

当您想使用浏览器打开创建的电子表格时,以下模式如何?

模式 1:

使用服务帐户创建电子表格后,它会与您的 Google 帐户共享创建的电子表格。

为了与您的 Google 帐户共享电子表格,您可以使用 Drive API 中的“权限:创建”方法来实现。

模式 2:

首先,在您的Google Drive中创建一个文件夹,并将创建的文件夹作为作者与服务帐户的电子邮件共享,然后在该文件夹中创建新的电子表格。

在这种情况下,我认为您可以使用以下两种方法。

  1. 使用Drive API中的“文件:创建”方法直接在特定文件夹中新建电子表格。

  2. 使用Sheets API中的“Method:spreadsheets.create”方法新建电子表格,并使用Drive API中的“Files:update”方法将电子表格移动到特定文件夹(您的共享文件夹)。

模式 3:

使用 OAuth2 而不是服务帐户创建新的电子表格。

关于OAuth2的授权流程和示例脚本,可以看官方文档的“.NET quickstart”。 Ref 关于对 API 的请求,您可以使用您的脚本。

模式 4:

如果您想通过一个简单的脚本来实现您的目标,例如,使用 Web Apps 作为包装器 API 怎么样?在这种情况下,流程如下。

  1. 创建网络应用。
    • 在这种情况下,将使用 Google Apps 脚本。这样,您的 Google 云端硬盘中就会创建电子表格。
  2. 使用 Web Apps 时,您可以通过 HTML 请求访问 Web Apps。
  3. 在 Web Apps 端,当从客户端访问时,会使用 Google Apps 脚本创建新的电子表格。

在这种情况下,您也可以不使用访问令牌来实现。当然,您可以使用访问令牌访问 Web 应用程序。 Ref1Ref2

参考: