Frage

Im Moment mir dies mit einem Repeater exportieren (mit mehreren verschachtelten Repeater) zu übertreffen:

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(); 
}

Aber das ist nicht das, was ich will. Stattdessen ist es mir html in der Excel-Datei geben (obwohl die Daten gibt es) das ist, was ich bekomme (jede Zeile eine Zelle im Excel-Blatt ist):

<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>

und so weiter ... jetzt sind die Daten korrekt, aber wie kann ich es richtig in der Tabelle zu zeigen?

War es hilfreich?

Lösung

Sie müssen alles in Tabellen-Tags einzuschließen. Excel kann HTML-Tabellenstrukturen verstehen.

Versuchen:

Response.Write("<table>");
Response.Write(stringWrite.ToString()); 
Response.Write("</table>");

Andere Tipps

Ihre Frage nicht direkt zu beantworten, aber man meiner Meinung nach gegeben

für die irgendwie von Daten, ist meiner Meinung nach, dass Sie ein Gridview-Steuerelement verwenden sollten, Ihr Beispiel nehmen Sie so etwas schreiben müssen:

<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>

mit einem Gridview alle ou nee dto schreiben im HTML-Teil ist nur:

<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>

etwas einfacher und leichter lesen

werden Sie viel mehr Kontrolle haben ein Gridview-Objekt eher als ein Repeater verwendet wird, und Sie werden nie, dass ein bisschen Probleme, weil Rendering Gridview wird immer mit dem Tabellen-Tags kam.

Hoffe, es hilft

Und BTW, testete ich Ihren Fall und ich habe keine Probleme, auch wenn ich die Tags wie Spencer war nicht writting erwähnen.

meinen Code zu sehen: Datei - Datei mit myObject

:

sollten Sie die Ausgabedatei eine geeignete HTML-Datei machen, mit den HTML-und Body-Tags. Das sollte besser funktionieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top