0

データベースから Excel 2007 ファイルにデータをエクスポートしようとしています。

HTMLファイルのヘッダーをExcel 2007ファイルに変更したいだけです。

データをテーブルにフォーマットし、ヘッダーを次のように変更します。

Response.AddHeader("Content-Disposition", "attachment;filename= filename.xlsx");
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";

同じエラーが発生し続けます:

「ファイル拡張子のファイル形式が無効なため、Excel はファイル "filename.xlsx" を開けません。ファイルが破損していないこと、およびファイル拡張子がファイルの形式と一致していることを確認してください。」

オンラインで見つけたこの例も試してみましたが、Excel 2003 で開くと警告メッセージが表示されますが、2007 では上記のエラー メッセージが表示されます。Excel2007で動作させる必要があります

<html 
xmlns:o="urn:schemas-microsoft-com:office:office" 
xmlns:x="urn:schemas-microsoft-com:office:excel" 
xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
<meta name=ProgId content=Excel.Sheet>
<meta name=Generator content="Microsoft Excel 11">
<!--[if gte mso 9]><xml>
 <x:ExcelWorkbook>
  <x:ExcelWorksheets>
   <x:ExcelWorksheet>
    <x:Name>Sheet1</x:Name>
    <x:WorksheetOptions>
     <x:Selected/>
     <x:ProtectContents>False</x:ProtectContents>
     <x:ProtectObjects>False</x:ProtectObjects>
     <x:ProtectScenarios>False</x:ProtectScenarios>
    </x:WorksheetOptions>
   </x:ExcelWorksheet>
  </x:ExcelWorksheets>
  <x:ProtectStructure>False</x:ProtectStructure>
  <x:ProtectWindows>False</x:ProtectWindows>
</x:ExcelWorkbook>
</xml><![endif]-->
<style>
<!--table
    {mso-displayed-decimal-separator:"\.";
    mso-displayed-thousand-separator:" ";}
.xl2
    {
    mso-number-format:M/D/YY;
    border-left:.5pt solid;
    border-top:.5pt solid;
    border-right:.5pt solid;
    border-bottom:.5pt solid;
    }
.xl3
    {
    border-left:.5pt solid;
    border-top:.5pt solid;
    border-right:.5pt solid;
    border-bottom:.5pt solid;
    }
-->
</style>
</head>
<body>
<table>
<tr>
<td class=xl2>17.02.2010</td>
<td class=xl3>4</td>
<td class=xl3>0</td>
</tr>
<tr>
</tr>
</table>
</body>
</html>
4

2 に答える 2

2

私はこのフォームを使用します:

using(System.IO.MemoryStream ms = /*Include Excel File*/) {
  ControllerContext.HttpContext.Response.Clear();
  ControllerContext.HttpContext.Response.AddHeader("cache-control", "private");
  ControllerContext.HttpContext.Response.AddHeader("Content-disposition", "attachment; filename=" + filename + ";");
  ControllerContext.HttpContext.Response.AddHeader("Content-type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
  ms.WriteTo(ControllerContext.HttpContext.Response.OutputStream);
}
return null;
于 2012-09-15T07:31:03.427 に答える
0

.csv を生成するだけではどうですか? 本格的なネイティブ Excel ファイルが必要なのはなぜですか? もう 1 つの簡単なオプションは、HTML コンテンツを生成し、出力コンテンツ タイプを Excel に設定することです。Excelはそれを開いてフォーマットします。これは簡単なショートカットですが、機能します。

于 2012-09-15T01:14:45.570 に答える