使用GDrive API.v3将Google工作表导出到Excel时出现问题



我正在尝试使用GDrive REST API.v3以Excel格式(实际上是Open Office MIME类型)将Google工作表导出并保存到本地文件系统,但没有成功。

我也尝试过使用直接链接:

string path1 = "https://drive.google.com/file/d/" + fileId + "/edit?usp=sharing"; //DOESN'T WORK; EXPECTED
string path2 = "https://drive.google.com/uc?export=download&id=" + fileId; //FILE NOT FOUND
string path3 = "https://drive.google.com/open?id=" + fileId; //DOWNLOADS A MESS
string path4 = "https://www.googleapis.com/drive/v3/files/" + fileId + "?alt=media"; //Google API: The remote server returned an error: (403) Forbidden.
WebClient oClient = new WebClient();
oClient.DownloadFile(path4, saveAs);
result = path4;

而且。。。

var webcontentlink = "https://drive.google.com/uc?export=download&id=" + fileId;
Google.Apis.Drive.v3.Data.File file = 
driveService.Files.Get(fileId).Execute();
var x = driveService.HttpClient.GetByteArrayAsync(webcontentlink);
byte[] arrBytes = x.Result;
File.WriteAllBytes(saveAs, arrBytes);

这是我想要的代码:

//GET THE MIME TYPE OF THE GOOGLE FILE
Google.Apis.Drive.v3.Data.File oFile = 
driveService.Files.Get(fileId).Execute();
string mimeType = oFile.MimeType;
bool googleDoc = true;
switch (mimeType) {
case "application/vnd.google-apps.document": {
mimeType = "application/vnd.oasis.opendocument.text";
break;
}
case "application/vnd.google-apps.spreadsheet": {
mimeType = "application/x-vnd.oasis.opendocument.spreadsheet";
break;
}
case "application/vnd.google-apps.drawing": {
mimeType = "image/png";
break;
}
case "application/vnd.google-apps.presentation": {
mimeType = "application/pdf";
break;
}
default: {
googleDoc = false;
break;
}
}
var oRequest = driveService.Files.Export(fileId, mimeType);
oRequest.Fields = "*";
MemoryStream stream = new MemoryStream();
oRequest.MediaDownloader.ProgressChanged += (IDownloadProgress progress) => 
{
switch (progress.Status) {
case DownloadStatus.Downloading: {
result = progress.BytesDownloaded.ToString();
break;
}
case DownloadStatus.Completed: {
result = "Export complete.";
break;
}
case DownloadStatus.Failed: {
result = "Export failed.";
break;
}
}
};
oRequest.Download(stream);
SaveStream(stream, saveAs);
private static void SaveStream(MemoryStream stream, string saveAs) {
//PURPOSE: SAVE THE FILE STREAM TO A FILE.
using (FileStream file = new FileStream(saveAs, FileMode.Create, FileAccess.Write)) {
stream.CopyTo(file);
}
}

API示例代码显示"下载完成",但文件内容要么是损坏的,要么是空白的。我有正确的MIME类型等,并尝试了几种不同的方法。我希望能够成功地从GDrive导出一个文件,理想情况下至少可以将谷歌工作表导出到Excel。这是一个非常受欢迎的问题,但似乎没有人回答…

问题在于文档中列出的MIME类型(下载文件指南)不要工作。我确实找到了有效的MIME类型。以下是测试各种可能的MIME转换类型的详细信息(请参阅每行的注释):

switch (mimeType) {
case "application/vnd.google-apps.spreadsheet": {
mimeType = "text/csv"; //CSV: WORKING
//mimeType = "application/x-vnd.oasis.opendocument.spreadsheet"; //OPEN OFFICE: NOT WORKING (GARBLED)
//mimeType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; //MS EXCEL: NOT WORKING (GARBLED)
break;
}
case "application/vnd.google-apps.document": {
//mimeType = "text/plain"; //PLAIN TEXT: WORKING (DOUBLE TEXT IN THE FILE, BUT NOT THE API EXPLORER)
mimeType = "application/rtf"; //RICH TEXT: WORKING
//mimeType = "application/vnd.oasis.opendocument.text"; //OPEN OFFICE DOC: NOT WORKING (GARBLED)
//mimeType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; //MS WORD DOCUMENT (GARBLED)
break;
}
case "application/vnd.google-apps.presentation": {
mimeType = "application/pdf"; //PLAIN TEXT: WORKING
//mimeType = "application/vnd.openxmlformats-    officedocument.presentationml.presentation"; //MS POWER POINT (GARBLED)
//mimeType = "application/vnd.oasis.opendocument.presentation"; //OPEN OFFICE (GARBLED)
break;
}
case "application/vnd.google-apps.drawing": {
mimeType = "image/png"; //PNG: WORKING
//mimeType = "image/jpeg"; //JPEG: WORKING
//mimeType = "image/pdf"; //NOT WORKING (INVALID FILE: ACROBAT DOESN'T LIKE IT)
break;
}
default: {
googleDoc = false;
break;
}
}

最新更新