VB で記述された ASP.NET WebForms アプリケーションを変更するように依頼されました (通常は C# を使用します)。
1 つのタスクは、Excel のダウンロードを試して修正することです。クライアントは、スプレッドシートを Excel で開こうとすると、スプレッドシートが破損しているというエラーが表示されると報告しました。
Excel ダウンロードをエクスポートするコードは、専用の ASPX ページの Load イベントに表示されます。そして、次のようになります。
Dim mytable As New HtmlTable
mytable = [Populate HTML Table Here]
mytable = returnclass.displaytable
mytable.Border = 1
mytable.BorderColor = "#CCCCCC"
HttpContext.Current.Response.Clear()
HttpContext.Current.Response.Buffer = True
Response.Write("<html xmlns:x=""urn:schemas-microsoft-com:office:excel"">")
Response.Write("<head>")
Response.Write("<!--[if gte mso 9]><xml>")
Response.Write("<x:ExcelWorkbook>")
Response.Write("<x:ExcelWorksheets>")
Response.Write("<x:ExcelWorksheet>")
Response.Write("<x:Name>" & worksheetTitle & "</x:Name>")
Response.Write("<x:WorksheetOptions>")
Response.Write("<x:Print>")
Response.Write("<x:ValidPrinterInfo/>")
Response.Write("</x:Print>")
Response.Write("</x:WorksheetOptions>")
Response.Write("</x:ExcelWorksheet>")
Response.Write("</x:ExcelWorksheets>")
Response.Write("</x:ExcelWorkbook>")
Response.Write("</xml>")
Response.Write("<![endif]--> ")
Response.Write("</head>")
Response.Write("<body>")
HttpContext.Current.Response.ContentType = "application/vnd.ms-excel"
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=hhexport.xls ")
HttpContext.Current.Response.Charset = ""
'ouput table to html so excel can interperet.
Me.EnableViewState = False
Dim stringWriter As New System.IO.StringWriter()
Dim htmlWriter As New System.Web.UI.HtmlTextWriter(stringWriter)
mytable.RenderControl(htmlWriter)
HttpContext.Current.Response.Write(stringWriter.ToString)
これが何をしようとしているのか本当に理解できません。
質問:
このコードは通常の ASP.NET
HtmlTable
を生成し、それを に割り当てmytable
ます。Excel で HTML を開くことができる惑星はどこですか?私は、ここの XML 全般と、
<!--[if gte mso 9]
コメントによって、本当にある種の損失を被っています。ここで何が起こっているのかを理解してくれる人はいますか。
結果は有効に見えますが、ここでの意図がよくわかりません。ヒントをいただければ幸いです。
編集
さらにテストすると、問題はファイルに付けられた拡張子 (xls) に関連しているようです。現在のバージョンの Excel は、私が指定した場合に先に進み、ファイルを読み込みます。ただし、すべてのフォーマットが失われます。これがどのタイプのファイルになるかについて何か提案はありますか?
編集
元の作者はhereからアイデアを得たようですが、そのページでは実際に何が起こっているのかを説明していません.
アップデート
みんなの反応に感謝します。上記の質問にどのように対処したかに従って、それらの回答を評価します。ただし、私の目的では、コードはずっと機能しているように見えます。新しいバージョンの Excel では、HTML を含む XLS ファイルは、ファイル拡張子が示すものとは異なる種類のファイルであるとユーザーに警告しているようです。そして、CSV、OpenXML、またはその他のアプローチを使用してエクスポートする以外に、これについてできることはないようです。このブログで詳細を見つけました。