【问题标题】:.Net How to create a Google Spreadsheet in Google Drive?.Net 如何在 Google Drive 中创建 Google 电子表格?
【发布时间】:2021-08-22 18:14:54
【问题描述】:

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 电子表格的工作示例,请分享。

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

【问题讨论】:

  • 虽然我不确定我是否能正确理解你的情况,但我提出了4个方向来实现你的目标。你能确认一下吗?如果这些对您的情况没有用,我深表歉意。
  • 是的 - 我相信你是对的 - 那就是“电子表格是在服务帐户的谷歌驱动器的根文件夹中创建的。”。甚至可以登录服务帐户吗?我相信模式 3 可能是答案 - 但我还没有找到创建快速入门示例中所需的“credentials.json”文件的分步说明。这很痛苦。
  • 感谢您的回复。关于您Is it even possible to log in to a service account?的附加问题,如果您想使用浏览器登录服务帐号的Google Drive,很遗憾,目前阶段无法实现。我为此道歉。至此,我提出了模式1和2。关于I have yet to find step-by-step instructions for creating the "credentials.json" file,如果“.NET quickstart”的this section没有用,再次道歉。
  • @Tanaike - 无需道歉 - 你是最有帮助的。由于我对凭据缺乏了解,我现在看到,在使用服务帐户时,必须授予对电子表格的访问权限,服务帐户才能访问/修改电子表格。为了创建电子表格(在不同的 Google 帐户/驱动器中),必须使用 OAuth(用户)凭据。对于我的特定用例,暂时授予对服务帐户的访问权限。再次感谢您的建议和时间。
  • 感谢您的回复。我不得不为我糟糕的英语水平道歉。很遗憾,从您的回复中,我无法了解您目前的情况。当我的建议对您的情况没有用时,我必须道歉。可以问一下您目前的情况吗?

标签: .net google-sheets-api c#-5.0


【解决方案1】:

来自I am using a service account / credentials when making the requests to the API, could this be the problem?,我认为您的问题可能是由于这个。

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

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

模式一:

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

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

模式2:

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

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

  1. 使用Drive API中的“Files:create”方法直接新建电子表格到指定文件夹。

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

模式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 脚本创建新的电子表格。

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

参考资料:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    • 2012-09-26
    • 2012-09-05
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多