.Net 如何在 Google 驱动器中创建一个 Google 电子表格?

.Net How to create a Google Spreadsheet in Google Drive?

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

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

下面是我正在使用的代码——执行时没有错误,returns 电子表格 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?,我认为您的问题可能是由于此引起的。

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

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

模式 1:

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

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

模式二:

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

对于这种情况,我觉得可以使用以下2种方法。

  1. 在DriveAPI.

    中使用“Files:create”的方法直接新建电子表格到指定文件夹
  2. 在表格API中使用“方法:spreadsheets.create”的方法创建新的电子表格,并使用该方法将电子表格移动到特定文件夹(您的共享文件夹) Drive API.

    中的“文件:更新”

模式 3:

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

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

模式 4:

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

  1. 创建 Web 应用程序。
    • 在本例中,使用了 Google Apps 脚本。由此,电子表格已创建到您的 Google 驱动器。
  2. 当您使用 Web Apps 时,您可以通过 HTML 请求访问 Web Apps。
  3. 在 Web Apps 端,当从客户端访问它时,使用 Google Apps 脚本创建新的电子表格。

这种情况下,不使用access token也可以实现。当然,您可以使用访问令牌访问 Web 应用程序。 Ref1, Ref2

参考文献: