现在我正在使用它来导出转发器(带有多个嵌套转发器)以实现卓越:
protected void ExportToExcel(object sender, EventArgs e)
{
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment;filename=finance.xls");
Response.Charset = "";
Response.ContentType = "application/vnd.ms-excel";
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
rptMinistry.RenderControl(htmlWrite);
Response.Write(stringWrite.ToString());
Response.End();
}
但这不是我想要的。相反,它在excel文件中给我html(虽然数据在那里)这是我得到的(每行是excel表中的一个单元格):
<tr class="alt">
<td class='hidden'>LOR In Development</td>
<td>MOD</td>
<td>Air Force</td>
<td class="size1"></td>
<td>Hellfire (AGM-114) Follow On</td>
<td>10-Mar-08</td>
<td class="align_right ">$50,000,000.00</td>
<td class="align_right hidden">$0.00</td>
</tr>
<tr class="alt">
<td class='hidden'>LOR In Development</td>
<td>MOD</td>
<td>Air Force</td>
<td class="size1"></td>
<td>Precision Strike Mi-17 (block 20)</td>
<td>17-May-08</td>
<td class="align_right ">$20,100,000.00</td>
<td class="align_right hidden">$0.00</td>
</tr>
依此类推......现在数据是正确的,但我怎样才能让它在电子表格中正确显示?
答案 0 :(得分:12)
您需要将所有这些都包含在表格标签中。 Excel可以理解HTML表结构。
尝试:
Response.Write("<table>");
Response.Write(stringWrite.ToString());
Response.Write("</table>");
答案 1 :(得分:1)
不要直接回答你的问题,而是给你我的意见
对于那种数据,在我看来你应该使用GridView控件,以你的例子为例,你需要编写类似的东西:
<asp:Repeater ID="rpt" runat="server" DataSourceID="ods">
<HeaderTemplate>
<table>
<tr>
<td>Header</td>
<td>Type</td>
<td>Name</td>
<td>Date</td>
<td>Amount</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<%#Eval("Header")%>
</td>
<td>
<%#Eval("Type")%>
</td>
<td>
<%#Eval("Name")%>
</td>
<td>
<%#Eval("Date", "{0:d}")%>
</td>
<td>
<%#Eval("Value", "{0:c}")%>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
使用GridView,只需在HTML部分中编写:
<asp:GridView ID="gv" runat="server" DataSourceID="ods" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="Header" HeaderText="Header" />
<asp:BoundField DataField="Type" HeaderText="Type" />
<asp:BoundField DataField="Name" HeaderText="Name" />
<asp:BoundField DataField="Date" DataFormatString="{0:d}" HeaderText="Date" />
<asp:BoundField DataField="Value" DataFormatString="{0:c}" HeaderText="Value" />
</Columns>
</asp:GridView>
更简单易读的内容
使用GridView对象而不是Repeater可以获得更多控制权,并且,您将永远不会遇到这类问题,因为渲染gridView将始终带有表标记。
希望有所帮助
顺便说一下,我测试了你的情况,即使我没有写像斯宾塞提到的标签,我也没有遇到任何问题。
答案 2 :(得分:0)
你应该使用html和body标签使输出文件成为一个合适的html文件。这应该会更好。