如何使用 google 工作表 api 和 c# 将 csv 文件上传到 google 工作表?
How do you upload a csv file to google sheets using the google sheets api with c#?
我有一种方法可以使用 restsharp 从网站中提取 csv。
class ScheduledBilling
{
public string Report()
{
var client = new RestClient("http://example.com");
client.CookieContainer = new System.Net.CookieContainer();
client.Authenticator = new SimpleAuthenticator("username", "xxx", "password", "xxx");
var request = new RestRequest("/login", Method.POST);
IRestResponse response = client.Execute(request);
var ScheduledBilling = client.DownloadData(new RestRequest("/file));
var csv = System.Text.Encoding.Default.GetString(ScheduledBilling);
return(csv);
}
}
总的来说,我一直在混合使用教程和快速入门,这样我就可以将信息输入 google sheet。
//ScheduledCRMBilling.Report();
ScheduledCRMBilling obj = new ScheduledCRMBilling();
string csv = obj.Report();
String spreadsheetId2 = "xxx";
String range1 = "Scheduled Billing";
ValueRange valueRange1 = new ValueRange();
valueRange1.MajorDimension = "ROWS";//"ROWS";//COLUMNS
var oblist1 = new List<object>() { csv };
SpreadsheetsResource.ValuesResource.UpdateRequest update1 = service.Spreadsheets.Values.Update(valueRange1, spreadsheetId2, range1);
update1.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.RAW;
UpdateValuesResponse result1 = update1.Execute();
Console.WriteLine("done!");
我已将范围设置为整个 sheet(计划结算)。发生的情况是第一个单元格填充了 csv 中的所有信息,而不是将 csv 导入 google sheets。我该如何进行?
我觉得我应该将 csv 变量作为字符串列表传递,这会在每个单元格中放置一个字符串。但是我不知道它怎么知道什么时候该换一条新线了。
正如我在 OPs 问题上链接的答案中提到的,Sheets API 不提供上传 sheet 的功能,只能从头开始创建。
不得不最终使用驱动器 API,因为它允许上传文件。特别相关的是关于 uploading google docs types 的部分,因为它们将被转换为适当的类型。所以你的 CSV 文件将变成 Google Sheet.
如果您的传播sheet 在内存中,也就是存储在变量中,您可以替换此行:
using (var stream = new System.IO.FileStream("files/report.csv",
System.IO.FileMode.Open))
具有以下内容:
using (var stream = new System.IO.MemoryStream(Encoding.ASCII.GetBytes(csv)))
在调用上传功能之前,您必须使用 this guide 为您的应用程序创建凭据,您还必须将范围更改为 Drive
。下面是我用来演示整个上传流程的一个小应用程序 - 假设您已经为 Drive API 创建了 OAuth 令牌并将秘密下载到您的项目中。
using Google.Apis.Auth.OAuth2;
using Google.Apis.Drive.v3;
using Google.Apis.Services;
using Google.Apis.Util.Store;
using System;
using System.IO;
using System.Text;
using System.Threading;
namespace ConsoleApp3
{
internal class Program
{
// If modifying these scopes, delete your previously saved credentials
// at ~/.credentials/sheets.googleapis.com-dotnet-quickstart.json
private static string[] Scopes = { DriveService.Scope.Drive };
private static string ApplicationName = "CsvTest";
private static void Main(string[] args)
{
UserCredential credential;
using (var stream =
new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))
{
string credPath = System.Environment.GetFolderPath(
System.Environment.SpecialFolder.Personal);
credPath = Path.Combine(credPath, ".credentials/drive.googleapis.com1.json");
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 DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
var fileMetadata = new Google.Apis.Drive.v3.Data.File()
{
Name = "My Report",
MimeType = "application/vnd.google-apps.spreadsheet"
};
var csv = "Heading1,Heading2,Heading3\r\nEntry1,Entry2,Entry3";
FilesResource.CreateMediaUpload request;
using (var stream = new System.IO.MemoryStream(Encoding.ASCII.GetBytes(csv)))
{
request = service.Files.Create(
fileMetadata, stream, "text/csv");
request.Fields = "id";
request.Upload();
}
var file = request.ResponseBody;
Console.WriteLine("File ID: " + file.Id);
Console.Read();
}
}
}
编辑
您可以将 Name
和 Application
更改为您喜欢的任何名称,它们只是友好的名称。
编辑
编码愉快。
我有一种方法可以使用 restsharp 从网站中提取 csv。
class ScheduledBilling
{
public string Report()
{
var client = new RestClient("http://example.com");
client.CookieContainer = new System.Net.CookieContainer();
client.Authenticator = new SimpleAuthenticator("username", "xxx", "password", "xxx");
var request = new RestRequest("/login", Method.POST);
IRestResponse response = client.Execute(request);
var ScheduledBilling = client.DownloadData(new RestRequest("/file));
var csv = System.Text.Encoding.Default.GetString(ScheduledBilling);
return(csv);
}
}
总的来说,我一直在混合使用教程和快速入门,这样我就可以将信息输入 google sheet。
//ScheduledCRMBilling.Report();
ScheduledCRMBilling obj = new ScheduledCRMBilling();
string csv = obj.Report();
String spreadsheetId2 = "xxx";
String range1 = "Scheduled Billing";
ValueRange valueRange1 = new ValueRange();
valueRange1.MajorDimension = "ROWS";//"ROWS";//COLUMNS
var oblist1 = new List<object>() { csv };
SpreadsheetsResource.ValuesResource.UpdateRequest update1 = service.Spreadsheets.Values.Update(valueRange1, spreadsheetId2, range1);
update1.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.RAW;
UpdateValuesResponse result1 = update1.Execute();
Console.WriteLine("done!");
我已将范围设置为整个 sheet(计划结算)。发生的情况是第一个单元格填充了 csv 中的所有信息,而不是将 csv 导入 google sheets。我该如何进行? 我觉得我应该将 csv 变量作为字符串列表传递,这会在每个单元格中放置一个字符串。但是我不知道它怎么知道什么时候该换一条新线了。
正如我在 OPs 问题上链接的答案中提到的,Sheets API 不提供上传 sheet 的功能,只能从头开始创建。
不得不最终使用驱动器 API,因为它允许上传文件。特别相关的是关于 uploading google docs types 的部分,因为它们将被转换为适当的类型。所以你的 CSV 文件将变成 Google Sheet.
如果您的传播sheet 在内存中,也就是存储在变量中,您可以替换此行:
using (var stream = new System.IO.FileStream("files/report.csv",
System.IO.FileMode.Open))
具有以下内容:
using (var stream = new System.IO.MemoryStream(Encoding.ASCII.GetBytes(csv)))
在调用上传功能之前,您必须使用 this guide 为您的应用程序创建凭据,您还必须将范围更改为 Drive
。下面是我用来演示整个上传流程的一个小应用程序 - 假设您已经为 Drive API 创建了 OAuth 令牌并将秘密下载到您的项目中。
using Google.Apis.Auth.OAuth2;
using Google.Apis.Drive.v3;
using Google.Apis.Services;
using Google.Apis.Util.Store;
using System;
using System.IO;
using System.Text;
using System.Threading;
namespace ConsoleApp3
{
internal class Program
{
// If modifying these scopes, delete your previously saved credentials
// at ~/.credentials/sheets.googleapis.com-dotnet-quickstart.json
private static string[] Scopes = { DriveService.Scope.Drive };
private static string ApplicationName = "CsvTest";
private static void Main(string[] args)
{
UserCredential credential;
using (var stream =
new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))
{
string credPath = System.Environment.GetFolderPath(
System.Environment.SpecialFolder.Personal);
credPath = Path.Combine(credPath, ".credentials/drive.googleapis.com1.json");
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 DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
var fileMetadata = new Google.Apis.Drive.v3.Data.File()
{
Name = "My Report",
MimeType = "application/vnd.google-apps.spreadsheet"
};
var csv = "Heading1,Heading2,Heading3\r\nEntry1,Entry2,Entry3";
FilesResource.CreateMediaUpload request;
using (var stream = new System.IO.MemoryStream(Encoding.ASCII.GetBytes(csv)))
{
request = service.Files.Create(
fileMetadata, stream, "text/csv");
request.Fields = "id";
request.Upload();
}
var file = request.ResponseBody;
Console.WriteLine("File ID: " + file.Id);
Console.Read();
}
}
}
编辑
您可以将 Name
和 Application
更改为您喜欢的任何名称,它们只是友好的名称。
编辑
编码愉快。