次のコードは数か月前に書かれ、Excelでその面白い小さな警告メッセージで完全にテストされました。ただし、C#コードがエラーなく実行され、ブラウザがエクスポートされた.xlsファイルをダウンロードした後は、Excelアプリケーションが開きますが、エクスポートされたファイルを開いていないかのように何も表示されません。誰でもこのコードの問題を見たり、Excelが突然この文書を開かない理由を知ることができますか?事前に多くの感謝!Excelが開かないC#StringBuilderから作成された.xls
C#コード:
[HttpGet]
public void DownloadReport()
{
string filename = "ReportExport";
//Report source data organized here
StringBuilder sb = new StringBuilder();
sb.Append("<table>");
sb.Append("<tr>");
foreach (DataColumn column in reportData.Columns)
{
sb.Append("<th>");
sb.Append(column.ColumnName);
sb.Append("</th>");
}
sb.Append("</tr>");
foreach (DataRow row in reportData.Rows)
{
sb.Append("<tr>");
foreach (DataColumn column in reportData.Columns)
{
sb.Append("<td>");
if (row[column] == null)
{
sb.Append("");
}
else
{
sb.Append(row[column]);
}
sb.Append("</td>");
}
sb.Append("</tr>");
}
sb.Append("</table>");
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment;filename=" + fileName + ".xls");
Response.Charset = "";
Response.ContentType = "application/vnd.ms-excel";
string style = @"<style> .textmode { } </style>";
Response.Write(style);
Response.Output.Write(sb.ToString());
Response.Flush();
Response.End();
}
XLSファイルを生成していません。上記のコードはHTMLフラグメントを生成し、これがExcelファイルであることをブラウザに伝えます。 Excel自体がデータをチェックし、解析できません(バイナリデータが必要です)。 Excelジェネレータライブラリを使用する方が効果的です。 –
@rboe - お返事ありがとうございます。このコードは、以前はExcelファイルを生成していましたが、ここで説明する原則に基づいています。http://www.icodefor.net/2016/07/export-data-to-excel-sheet-in-asp-dot-net-c -sharp.html。問題はそれがなぜ前に働き、突然仕事を止めるのでしょうか? – jle
この方法では、Excelが自動的に他の形式(この場合はHTMLとしてのテキスト)を自動的に検出する機能に依存しています。私は、この自動発見機能が時間の経過とともに行動を変えないことに頼るつもりはない。 –