Pergunta

Agora eu estou usando isso para exportar um repetidor (com vários repetidores aninhados) para o 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(); 
}

Mas isso não está fazendo o que eu quero. Em vez disso, está me dando html no arquivo excel (embora os dados estão lá), este é o que eu recebo (cada linha é uma célula na folha de 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>

e assim por diante ... agora os dados estão corretos, mas como posso obtê-lo para mostrar-se corretamente na planilha?

Foi útil?

Solução

Você precisa colocar tudo isso em tags de mesa. Excel pode compreender estruturas de tabelas HTML.

Tente:

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

Outras dicas

não responder à sua pergunta diretamente, mas dei minha opinião

para esse tipo de dados, na minha opinião é que você deve usar um controle GridView, tendo o seu exemplo, você terá que escrever algo como:

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

usando um GridView tudo OU nee dto escrita na parte HTML é apenas:

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

algo mais simples e mais fácil de ler

você terá muito mais controle usando um objeto GridView em vez de um Repeater, e, você nunca terá que tipo de problemas, porque tornando o gridView sempre veio com as tags da tabela.

Hope isso ajuda

E BTW, eu testei o seu caso e eu não tenho nenhum problema, mesmo que eu não estava writting as tags como Spencer menção.

para ver o meu código: arquivo com HTML e Método - arquivo com myObject

você deve fazer o arquivo de saída um arquivo html adequada, com o HTML e corpo tags. Isso deve funcionar melhor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top