10

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

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

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

4

6 に答える 6

4

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

Microsoft のKB 記事 948615では、次のように説明されています。

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

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

于 2013-01-11T10:20:50.883 に答える
2

xls ファイルを完全に作成しますか、それともテンプレートの xls ファイルをコピーして入力しますか? 不適切な形式のテンプレート ファイルが問題の原因である可能性があります。

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

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

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

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();
于 2012-03-21T08:37:36.193 に答える
2

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

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();
                }
     }
于 2017-10-12T07:08:32.523 に答える
1

どのようにデータを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

于 2012-03-21T06:56:11.320 に答える
1

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

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

于 2013-07-01T11:10:39.960 に答える
0

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

于 2012-03-21T06:48:31.407 に答える