.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种方法。
在DriveAPI.
中使用“Files:create”的方法直接新建电子表格到指定文件夹
在表格API中使用“方法:spreadsheets.create”的方法创建新的电子表格,并使用该方法将电子表格移动到特定文件夹(您的共享文件夹) Drive API.
中的“文件:更新”
模式 3:
使用 OAuth2 而不是服务帐户创建新的电子表格。
关于OAuth2的授权流程和示例脚本,可以参考官方文档“.NET quickstart”。 Ref关于API的请求,你可以使用你的脚本。
模式 4:
如果您想通过一个简单的脚本来实现您的目标,例如,使用 Web Apps 作为包装器怎么样?API?本例中的流程如下
- 创建 Web 应用程序。
- 在本例中,使用了 Google Apps 脚本。由此,电子表格已创建到您的 Google 驱动器。
- 当您使用 Web Apps 时,您可以通过 HTML 请求访问 Web Apps。
- 在 Web Apps 端,当从客户端访问它时,使用 Google Apps 脚本创建新的电子表格。
这种情况下,不使用access token也可以实现。当然,您可以使用访问令牌访问 Web 应用程序。 Ref1, Ref2
参考文献:
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种方法。
在DriveAPI.
中使用“Files:create”的方法直接新建电子表格到指定文件夹在表格API中使用“方法:spreadsheets.create”的方法创建新的电子表格,并使用该方法将电子表格移动到特定文件夹(您的共享文件夹) Drive API.
中的“文件:更新”
模式 3:
使用 OAuth2 而不是服务帐户创建新的电子表格。
关于OAuth2的授权流程和示例脚本,可以参考官方文档“.NET quickstart”。 Ref关于API的请求,你可以使用你的脚本。
模式 4:
如果您想通过一个简单的脚本来实现您的目标,例如,使用 Web Apps 作为包装器怎么样?API?本例中的流程如下
- 创建 Web 应用程序。
- 在本例中,使用了 Google Apps 脚本。由此,电子表格已创建到您的 Google 驱动器。
- 当您使用 Web Apps 时,您可以通过 HTML 请求访问 Web Apps。
- 在 Web Apps 端,当从客户端访问它时,使用 Google Apps 脚本创建新的电子表格。
这种情况下,不使用access token也可以实现。当然,您可以使用访问令牌访问 Web 应用程序。 Ref1, Ref2