web-dev-qa-db-ja.com

.xlsファイルを開いているときにエラーメッセージが表示される理由

私のasp.net、C#アプリケーションでは、.xlsファイルを生成してダウンロードしています。しかし、私が開こうとしているとき、それはメッセージを与えています

「開こうとしているファイル 'filename.xls'は、ファイル拡張子で指定された形式とは異なります。ファイルを開く前に、ファイルが破損しておらず、信頼できるソースからのものであることを確認してください。開きますか?今すぐファイル?」

「はい」を押すと開きます。ファイル拡張子を.xlsxに変更しましたが、メッセージは同じです。なぜこれが起こっているのか誰か教えてもらえますか? .xlsxMIMEタイプ拡張子をIIS manager with MIME Type as application/vnd.openxmlformats-officedocument.spreadsheetml.sheet。に追加しました。それでも同じメッセージが表示されます。どうすればそれを取り除くことができますか?.

10
Sukanya

Xlsファイルを完全に作成しますか、それともテンプレートxlsファイルをコピーして入力しますか?フォーマットテンプレートファイルが正しくないと、問題が発生する可能性があります。

また、ファイルを埋めるためにどのプロバイダーを使用していますか? --xlsx/xlsm用のMicrosoft.ACE.OLEDB.12.0? --xls用のMicrosoft.Jet.OLEDB.4.0?

プロバイダーと拡張機能の組み合わせが正しくないと、問題が発生する可能性があります。

あなたのコメントによると、これは私が過去にそれを行ったコードの一部です:(なぜそれらが有用であるか覚えていないのでいくつかの行にコメントしました)

Response.Clear();                           
Response.ContentType = "application/vnd.ms-Excel";
//Response.ContentEncoding = Encoding.Default; 
//Response.Charset=""; 
Response.AddHeader("Content-Disposition: ",
    String.Format(@"attachment; filename={0}",myfileName));

//EnableViewState = false; 

Response.Write(myFileContentAsString); 
Response.Flush();
Response.Close();
2
jbl

これは古い投稿かもしれませんが、私は同じ問題の答えを探していて、それが役立つかもしれないと思いました。アプリケーションがxlsファイルをブラウザに提供する方法とは関係がないようです。これは、Office2007の過剰なセキュリティの問題です。

Microsoftの KB記事948615 はそれを説明しています:

Excel 2007でファイルを開くと、ファイル形式がファイル名拡張子で指定されている形式と異なるという警告が表示されます。

唯一の解決策は、クライアントのレジストリにエントリを追加することです。おそらく数百人のユーザーがいるWebアプリケーションにとって、これは実際の解決策ではないことはわかっていますが、少なくとも、その迷惑な警告を修正する方法を説明するメモをページに追加できます。

3
Adrian Platte

アラートは、拡張機能強化と呼ばれるExcel 2007の新しいセキュリティ機能であり、開かれているファイルの内容が、ファイルを開こうとしているシェルコマンドで指定された拡張機能の種類と一致することを保証します。現在の設計では、URLの拡張子が.HTM/.HTML/.MHT/.MHTMLでない限り、ExcelでWebサイトからHTMLコンテンツを開くことはできません。したがって、ASP HTMLを返し、MIMEタイプをXLSのようなものに設定して、HTMLをWebブラウザではなくExcelで強制的に開かせようとするページ(予想どおり)は、常にセキュリティアラートを受け取ります。コンテンツがMIMEタイプと一致しません。

http://blogs.msdn.com/b/vsofficedeveloper/archive/2008/03/11/Excel-2007-extension-warning.aspx

1
Tipper

データをExcelにエクスポートする方法がわかりません。 DisplayAlertsをfalseに設定すると役立つ場合があります。

xlApp = new Excel.Application();
xlApp.DisplayAlerts = false;

相互運用DLLを使用しています。名前空間はMicrosoft.Office.Interop.Excel。参照を追加する方法については、次のリンクのFeng Chenの回答を参照してください。 http://social.msdn.Microsoft.com/Forums/en/netfxsetup/thread/c9e83756-4ae2-4ed4-b154-1537f3bb3a22 ==

次のリンクも役立つ場合があります。

http://www.dotnetperls.com/Excel

1
Manoj

ファイル拡張子.xls(バージョン2003)はHTMLレイアウトをサポートしていますが、Office2007以降のバージョンはHTMLレイアウトをサポートしていません。

Excelファイルを.xlsxにエクスポートする形式にする必要があります。私の経験から、それはすべてのバージョンでそれをサポートします。

以下のDLLをbinフォルダーに追加します

  • ClosedXML.dll
  • DocumentFormat.OpenXml.dll

ファイルを.xlsxにエクスポートするコード

    DataTable dt = new DataTable(); 
    //Create column and inser rows
    using (XLWorkbook wb = new XLWorkbook())
    {           
                var ws = wb.Worksheets.Add(dt, Sheetname); 
                HttpContext.Current.Response.Clear();
                HttpContext.Current.Response.Buffer = true;
                HttpContext.Current.Response.Charset = "";
                HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=" + p_FileName + ".xlsx");
                using (MemoryStream MyMemoryStream = new MemoryStream())
                {
                    wb.SaveAs(MyMemoryStream);
                    MyMemoryStream.WriteTo(HttpContext.Current.Response.OutputStream);
                    HttpContext.Current.Response.Flush();
                    HttpContext.Current.Response.End();
                }
     }
0
Jitendra G2

ファイル名に.xlsを使用し、MIMEタイプに.xlsxを使用しています。 filename.xlsxで試してください。

0
Mujtaba Hassan