Question

Je l’utilise actuellement pour exporter un répéteur (avec plusieurs répéteurs imbriqués) vers Excel:

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

Mais cela ne fait pas ce que je veux. Au lieu de cela, il me donne du code HTML dans le fichier Excel (bien que les données soient là), voici ce que je reçois (chaque ligne est une cellule de la feuille 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"><*>.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"><*>.00</td>
</tr>

et ainsi de suite ... maintenant les données sont correctes, mais comment puis-je les afficher correctement dans le tableur?

Était-ce utile?

La solution

Vous devez inclure tout cela dans des balises de table. Excel peut comprendre les structures de tableau HTML.

Essayez:

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

Autres conseils

ne pas répondre directement à votre question mais vous donner mon avis

pour ce genre de données, à mon avis, vous devez utiliser un contrôle GridView. En prenant votre exemple, vous devrez écrire quelque chose comme:

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

utiliser un GridView tout ce que vous devez écrire dans la partie HTML n’est que:

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

quelque chose de plus simple et plus facile à lire

vous aurez beaucoup plus de contrôle en utilisant un objet GridView plutôt qu'un répéteur, et vous ne rencontrerez jamais ce genre de problème, car le rendu de gridView sera toujours accompagné des balises de table.

J'espère que ça aide

Et BTW, j’ai testé votre cas et je n’ai eu aucun problème même si je n’écrivais pas les tags comme le mentionne Spencer.

pour voir mon code: Fichier avec HTML et méthode - Fichier avec myObject

vous devriez faire du fichier de sortie un fichier HTML approprié, avec les balises HTML et body. Cela devrait mieux fonctionner.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top