2009-01-13 13 views
5

Teraz używam tego wyeksportować Repeater (z wielu zagnieżdżonych repeaterów) excel:Eksportować do programu Excel z repeatera?

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

Ale to nie robi tego, co chcę. Zamiast tego daje mi html w pliku excel (choć dane są tam) to co mam (każdy wiersz jest komórka w arkuszu 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> 

i tak dalej ... teraz dane jest poprawny, ale jak mogę go poprawnie wyświetlić w arkuszu kalkulacyjnym?

Odpowiedz

12

Musisz załączyć to wszystko w znacznikach tabeli. Excel może zrozumieć struktury tabel HTML.

Spróbuj:

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

tak proste ... Nie mogę uwierzyć, że brakowało mi, dzięki! – naspinski

0

należy dokonać plik wyjściowy właściwy plik html z html i ciała tagi. To powinno działać lepiej.

0

nie odpowiedzieć na pytanie bezpośrednio, ale wam moją opinię

za to trochę danych, jest moim zdaniem, że należy użyć GridView kontroli, biorąc swój przykład trzeba będzie napisać coś takiego:

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

używając GridView wszystkie ou nee dto zapisu w części HTML jest tylko:

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

coś prostsze i łatwiejsze do odczytania

będziesz miał znacznie więcej kontroli za pomocą obiektu GridView, a nie wzmacniacza, i nigdy nie będziesz mieć tego rodzaju problemów, ponieważ renderowanie gridView zawsze będzie miało znaczniki tabeli.

Nadzieja pomaga

I BTW, ja testowałem swoje sprawy, a ja nie mam żadnych problemów, nawet jeśli nie było pisanie tagów jak Spencer wspominając.

zobaczyć mój kod: File with HTML and Method - File with myObject

Powiązane problemy