2009-01-13 27 views
5

En este momento estoy usando esto para exportar un repetidor (con múltiples repetidores anidados) para sobresalir:Exportar a Excel desde un repetidor?

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

Pero esto no es hacer lo que quiero. En su lugar, me está dando html en el archivo de Excel (aunque los datos están ahí) esto es lo que me pasa (cada línea es una celda de la hoja 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> 

y así sucesivamente ... ahora los datos es correcto, pero ¿cómo puedo hacer que se muestre correctamente en la hoja de cálculo?

Respuesta

12

Debe encerrar todo eso en las etiquetas de la tabla. Excel puede entender las estructuras de tabla HTML.

Probar:

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

tan simple ... No puedo creer que echaba de menos que, gracias! – naspinski

0

que debería hacer que el archivo de salida un archivo HTML adecuado, con las etiquetas HTML y corporales. Eso debería funcionar mejor.

0

no contestar a su pregunta directamente, pero dado mi opinión

para que un poco de los datos, es en mi opinión de que se debe utilizar un control GridView, tomar su ejemplo, usted tendrá que escribir 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 un GridView toda ou nee dto escritura en la parte HTML es única:

<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 más simple y más fácil de leer

tendrá mucho más control utilizando un objeto GridView en lugar de un repetidor, y nunca tendrá ese tipo de problemas, porque renderizar el gridView siempre incluirá las etiquetas de la tabla.

creo que sirve

Y por cierto, he probado su caso y que no tiene ningún problema incluso si no estaba WRITTING las etiquetas como Spencer mencionar.

a ver mi código: File with HTML and Method-File with myObject

Cuestiones relacionadas