将Google表格导出到Excel 2016

时间:2016-11-01 08:09:23

标签: c# .net google-sheets google-drive-api excel-2016

我在.NET框架中创建一个控制台应用程序,将.XLSX文件上传到Google云端硬盘(在此过程中将其转换为Google表格格式),并将Google表格下载为.XLSX格式。

基本上我尝试将本地硬盘同步到Google云端硬盘,保留了所有格式的图纸。

我已经使用Google Drive API for .NET框架执行此操作并且工作得非常好,除了将Google表格下载到.XLSX文件时,下载的.XLSX文件没有任何问题Excel 2007但在使用Excel 2016打开时显示以下错误:

We found a problem with some content in the file. Do you want us to try to recover as much as we can?

单击"是",Excel会成功打开文件,但会显示包含错误日志的消息。我打开了错误日志,除了提到"条件格式"之外,没有任何细节。此外,原始Google表格中的一些冻结行在Excel 2016中不再冻结,但在Excel 2007中打开文件时完好无损。

您是否有任何建议可以将Google表格下载的.XLSX文件与Excel 2016兼容,或采用完全不同的方法来消除不同版本和不同格式的问题?

1 个答案:

答案 0 :(得分:0)

由于这是一篇旧帖子,您可能已经解决了问题。但是为了将来参考,我将尝试使用Google Drive api的v3来回答您的问题。

Google云端硬盘使用自己的MIME类型。可以找到这些MIME类型的列表here

Google Drive MIME可以使用相应的MIME类型进行转换。可以在this页面的底部找到相应MIME类型的列表。

因此,如果您想转换Google,则必须找出它的MIME类型以及相应的MIME类型。

public FileResult Download(string fileId, string fileName, string mimeType)
{
        DriveService service = new DriveService(new BaseClientService.Initializer
        {
            HttpClientInitializer = <user_credential>
            ApplicationName = "APPNAME"
        });

        string convertedMimeType = "";
        bool googleDoc = true;

        switch (mimeType)
        {
            case "application/vnd.google-apps.document":
            {
                convertedMimeType = "application/vnd.oasis.opendocument.text";
                break;
            }
            case "application/vnd.google-apps.spreadsheet":
            {
                convertedMimeType = "application/x-vnd.oasis.opendocument.spreadsheet";
                break;
            }
            case "application/vnd.google-apps.drawing":
            {
                convertedMimeType = "image/png";
                break;
            }
            case "application/vnd.google-apps.presentation":
            {
                convertedMimeType = "application/pdf";
                break;
            }
            default:
            {
                convertedMimeType = mimeType;
                googleDoc = false;
                break;
            }
        }

        MemoryStream stream = new MemoryStream();

        if (googleDoc)
        {
            var request = service.Files.Export(fileId, convertedMimeType);
            request.Download(stream);
        }
        else
        {
            service.Files.Get(fileId).Download(stream);
        }

        return File(stream.ToArray(), convertedMimeType, fileName);
}

您可以使用以下方法获取文件的MIME类型:

Google.Apis.Drive.v3.Data.File file = new Google.Apis.Drive.v3.Data.File(..);
string type = file.MimeType;

在切换案例中,我检查MIME类型是否为Google文档MIME类型。如果是,则将MIME类型设置为Google文档的相应MIME类型。如果它不是Google文档,您可以使用您从文件中获得的MIME类型。如果您上传的文件不是Google文档,则Google云端硬盘不会更改MIME类型。

请注意,上面的示例是在ASP.NET MVC项目中使用的。