2016-11-01 5 views
-1

私は.XLSXファイルをGoogleドライブにアップロードする(そのプロセスでGoogleスプレッドシート形式に変換する).NETフレームワークでコンソールアプリケーションを作成しています。また、Googleスプレッドシートを.XLSX形式にダウンロードしています。GoogleスプレッドをExcelに書き出す2016

基本的には、Googleドライブでローカルドライブを同期しようとしていますが、すべての書式設定を保持しています。

GoogleドライブAPI for .NETのフレームワークを使用してこれを行っていますが、Googleスプレッドシートを.XLSXファイルにダウンロードすると、ダウンロードした.XLSXファイルがExcelで問題なく開かれます2007しかし、エクセル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

ドライブUIを使用してファイルをアップロードして変換し、ダウンロードすると同じ問題が発生しますか?同じ問題が発生した場合は、Googleスプレッドシート>ヘルプ>問題を報告して問題をGoogleに報告してください。同じ問題が発生しない場合は、アップロード/変換/ダウンロードに使用しているコードで質問をここに更新してください。 –

+0

@Peter:私のプログラムは、GoogleドライブにE​​xcelファイル(.xlsx)をアップロードします(Googleシート形式に変換します)。ユーザーがGoogleスプレッドシートを更新すると、ファイルがローカルドライブにダウンロードされます。問題は、ダウンロード後、ファイルがExcel 2016で開かれている場合、コンテンツが回復されたという警告メッセージが表示されます。 – NavkarJ

+0

提案はありませんが、Googleに報告する価値はあります。 –

答えて

0

これは古い投稿であるため、すでに問題を修正している可能性があります。今後の参考として、GoogleドライブAPIのv3を使用して質問にお答えします。

Googleドライブは、独自のMIMEタイプを使用します。これらのMIMEタイプの一覧はhereです。

GoogleドライブのMIMEは、対応するMIMEタイプで変換できます。対応するMIMEタイプのリストはthisページの下部にあります。

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プロジェクトでは使用しないでください。

+0

こんにちはMennoB!あなたの答えをありがとう、それはまさに私がやっていたものです。プログラムはGoogle SheetsファイルのみをダウンロードしてExcelファイルとして保存していたので、MIMEタイプを比較することは重要ではありませんでした。参考までに、私は上記の問題を解決していませんでしたので、GoogleスプレッドシートファイルをダウンロードしてローカルのExcelファイルを置き換えるのではなく、ローカルのExcelファイルで必要な列のみを配列形式で読み込むようにプログラムを変更しました対応するGoogleスプレッドシートファイルから – NavkarJ

+0

@Nvj MIMEタイプを比較するとどういう意味ですか?適切なMIMEタイプに変換するローカルのExcelファイルにGoogleスプレッドシートファイルを保存する場合は、実際には問題ありません。私はあなたの問題を再現し、右のMIMEタイプに変換するときにExcel 2007とExcel 2016の両方で自分の側で正常に動作します。 Googleシートファイルをバイト配列として取り出します。次に、適切なMIMEタイプのファイルにバイトを書き込みます。 – MennoB

関連する問題