我想从.csv文件创建电子表格。 代码:
static void Main()
{
String CLIENT_ID = "<MY ID>";
String CLIENT_SECRET = "<MY SECRET>";
var provider = new NativeApplicationClient(GoogleAuthenticationServer.Description, CLIENT_ID, CLIENT_SECRET);
var auth = new OAuth2Authenticator<NativeApplicationClient>(provider, GetAuthorization);
var service = new DriveService(auth);
File body = new File();
body.Title = "My spread";
body.Description = "A test spread";
body.MimeType = "application/vnd.google-apps.spreadsheet";
byte[] byteArray = System.IO.File.ReadAllBytes("spread.csv");
System.IO.MemoryStream stream = new System.IO.MemoryStream(byteArray);
service.Files.Insert(body, stream, "application/vnd.google-apps.spreadsheet").Upload();
}
private static IAuthorizationState GetAuthorization(NativeApplicationClient arg)
{
string[] scopes = new string[] { "https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/userinfo.profile" };
IAuthorizationState state = new AuthorizationState(scopes);
state.Callback = new Uri(NativeApplicationClient.OutOfBandCallbackUrl);
Uri authUri = arg.RequestUserAuthorization(state);
// Request authorization from the user (by opening a browser window):
Process.Start(authUri.ToString());
Console.Write(" Authorization Code: ");
string authCode = Console.ReadLine();
Console.WriteLine();
// Retrieve the access token by using the authorization code:
return arg.ProcessUserAuthorization(authCode, state);
}
在google-drive页面上插入文件并点击它(以所有者身份登录)后,我收到消息
“我们很抱歉。 找不到此网址的电子表格。确保您拥有正确的网址,并且电子表格的所有者尚未将其删除“
当我将MimeType更改为“text / csv”并插入文件时,点击它后,我收到消息 “无法预览 此项目是使用Google Drive应用程序(MyApp'sName)创建的。 下载此文件或使用您已安装的某个应用程序打开它。“
我也可以右键单击此文件(使用“text / csv”MimeType创建的文件)并选择选项“导出到Google文档”这会给我一些我想要的结果到达 - 我的.csv文件内容的电子表格文件。但这种间接方法并不能完全满足我的需要。有没有方法可以在谷歌驱动器上制作电子表格文件,直接从我的应用程序中提供.csv文件的内容?
答案 0 :(得分:1)
我不知道c#,但在它的基础上它反映了Java,在行
中service.Files.Insert(body,stream, “应用程序/ vnd.google-apps.spreadsheet”)上传();
您需要插入等效的
.setConvert(真)
也...
mimetype应为“text / csv”
答案 1 :(得分:1)
我找到了答案:)
如何以编程方式将文件转换为适当的Google文档格式:
var service = new DriveService(new BaseClientService.Initializer
{
...
});
...
FilesResource.InsertMediaUpload request = service.Files.Insert(body, stream, _mimeType);
request.Convert = true;
request.Upload();