none
Tabelle als XLS anzeigen: Wie kann ich einen Zeilenumbruch in einer TableCell erzeugen RRS feed

  • Frage

  • Hallo Leute

    Ich möchte eine HtmlTable als XLS-Datei öffnen - soweit funktioniert das problemlos. Wenn ich aber in einer Zelle mehrere Zeilen anzeigen will, geht das nicht.
    Wie kann ich in einer Zelle den Text mit Zeilenumbruch darstellen?
    So mach ich's:
    Response.Clear()
    Response.ContentType = "application/vnd.ms-excel"
    Response.AddHeader("Content-Disposition", String.Format("attachment; filename={0}.xls", filename))
    Response.ContentEncoding = System.Text.Encoding.GetEncoding(28591)
    
    Dim tr As New HtmlTableRow
    Dim td As New HtmlTableCell
    td.InnerHtml = "Zeile 1" & vbCrLf & "Zeile 2"
    tr.Controls.Add(td)
    tb.Controls.Add(tr)
    
    Dim sb As New StringBuilder
    Dim tw As New StringWriter(sb)
    Dim hw As New HtmlTextWriter(tw)
    tb.RenderControl(hw)
    
    Response.Write(sb.ToString)
    
    
    Dienstag, 16. November 2010 11:35

Antworten

  • Hallo Stefan
    Dass der Zeilenumbruch mit <br /> geht und nicht mit rowspan hab ich ja geschrieben.
    Da scheint mir, dass du dir selber widersprichst;
    Das von dir gewünschte ist mit einem Umbruch innerhalb einer Zelle nicht umsetzbar.
    Was Du machen kannst, ist mit rowspan und ggfs. auch colspan zu arbeiten.
    Aber wie auch immer, dank userem kurzen Schriftwechsel bin ich auf die Lösung gekommen: Ich setze eine <texarea> ins <tr> und dann kann ich beliebig Zeilenumbrüche schrieben.

    Besten Dank
    André
    Dienstag, 16. November 2010 16:39

Alle Antworten

  • Hallo André,
    Ich möchte eine HtmlTable als XLS-Datei öffnen - soweit funktioniert das problemlos. Wenn ich aber in einer Zelle mehrere Zeilen anzeigen will, geht das nicht.
    Wie kann ich in einer Zelle den Text mit Zeilenumbruch darstellen?

    Zeilenumbrüche in HTML werden mit <br /> bzw. <br> dargestellt.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Dienstag, 16. November 2010 12:16
    Moderator
  • Hallo Stefan
    Danke für die schnelle Antwort
    Ja, <br/> hab ich auch eingesetzt nur, und das ist das Problem, dann wird der Zeilenumbruch nicht im <td> gesetzt sondern über die
    ganze Zeile und das ist nicht das Resultat, welche ich angezeit haben möchte.
    Der Zeilenumbruch sollte in einer Zelle erscheinen.

    Das Beispiel unten funktioniert nicht:
    Dim tr As New HtmlTableRow
    Dim td As New HtmlTableCell
    td.InnerHtml = "Zeile 1" & "<br />  & "Zeile 2"
    tr.Controls.Add(td)
    tb.Controls.Add(tr)
    Dienstag, 16. November 2010 12:31
  • Hallo André,

    Ja, <br/> hab ich auch eingesetzt nur, und das ist das Problem, dann wird der Zeilenumbruch nicht im <td> gesetzt sondern über die
    ganze Zeile
    wo auch sonst? In HTML (und eigentlich auch sonst überall außer vielleicht bei Excel^^) passen sich die Zeilenhöhen an die höchsten Zellen an. Wenn eine Zelle also 1000 Pixel hoch ist, sind alle anderen auch so hoch.
    und das ist nicht das Resultat, welche ich angezeit haben möchte.
    Das ist aber das, was normal ist.
    Der Zeilenumbruch sollte in einer Zelle erscheinen.

    Das Beispiel unten funktioniert nicht:
    Doch. Es funktioniert genau so wie es soll. Dass das evtl. nicht das ist, was Du willst, ist eine ganz andere Sache.

    Das von dir gewünschte ist mit einem Umbruch innerhalb einer Zelle nicht umsetzbar. Was Du machen kannst, ist mit rowspan und ggfs. auch colspan zu arbeiten. Damit kannst Du verschiedene Zellen miteinander verbinden. In deinem Fall wäre das bspw. sowas:

    <tr>
      <td rowspan="2">Wert 1<br />Wert 2</td>
      <td>Wert Abc</td>
    </tr>
    <tr>
      <td>Wert Xyz</td>
    </tr>
    
    

    Damit hast Du dann in der ersten Spalte eine Zelle, die sich über zwei Zeilen erstreckt, in der zweiten Spalte zwei ganz normale Zellen.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Dienstag, 16. November 2010 13:32
    Moderator
  • Lieber Stefan, Danke für deine Antwort.

    Vermutlich reden wir nicht von der selben Sache
    Dass dein Beispiel richtig funktioniert bezweifle ich nicht.
    Was ich per VB erreichen will kann ich so dokumentieren:
    <tr>
     <td>Z1<br />z2</td><td>Sp2</td>
     </tr>
    <tr>
     <td>Z1<br />z2</td><td>Sp2</td>
    </tr>
    

    Mit andern Worten ein Zeilenumbruch ist auch ohne rowspan möglich, und genau so möchte ich die Tabelle als XLS an den Benutzer senden. In der ersten Spalte einen Mehrzeiligen Text und in den restlichen Einzeiligen.

    Besten Dank
    André

    p.s.
    In meinem ersten Posting siehst du auch, wie ich die Tabelle nach XLS umsetzen will. Dort vermute ich, liegt auch die Lösung des Problems.
    Dienstag, 16. November 2010 15:01
  • Hi,
    Vermutlich reden wir nicht von der selben Sache
    Dass dein Beispiel richtig funktioniert bezweifle ich nicht.
    Was ich per VB erreichen will kann ich so dokumentieren:
    ...

    und was soll da anders sein als bei der HTML Ausgabe, die

      td.InnerHtml = "Zeile 1" & "<br />"  & "Zeile 2"

    erzeugt?

    Damit kommt genau <td>Zeile 1<br />Zeile 2</td> raus, also das, was Du geschrieben hast.

    Dass der Zeilenumbruch mit <br /> geht und nicht mit rowspan hab ich ja geschrieben.

    Ggfs. solltest Du einfach mal einen Screenshot in Excel machen und den hier posten. Evtl. sieht man dann, was Du meinst.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Dienstag, 16. November 2010 15:17
    Moderator
  • Hallo Stefan
    Dass der Zeilenumbruch mit <br /> geht und nicht mit rowspan hab ich ja geschrieben.
    Da scheint mir, dass du dir selber widersprichst;
    Das von dir gewünschte ist mit einem Umbruch innerhalb einer Zelle nicht umsetzbar.
    Was Du machen kannst, ist mit rowspan und ggfs. auch colspan zu arbeiten.
    Aber wie auch immer, dank userem kurzen Schriftwechsel bin ich auf die Lösung gekommen: Ich setze eine <texarea> ins <tr> und dann kann ich beliebig Zeilenumbrüche schrieben.

    Besten Dank
    André
    Dienstag, 16. November 2010 16:39
  • Hallo André,

    Da scheint mir, dass du dir selber widersprichst;

    Nö. Ein Zeilenumbruch wird immer mit <br /> erzeugt. Da das angeblich nicht das ist, was Du willst, habe ich eine Alternative aufgezeigt, die mit rowspan arbeitet. Aber das hat mit dem Umbruch nichts zu tun sondern lediglich mit deiner "Anforderung"

    dann wird der Zeilenumbruch nicht im gesetzt sondern über die ganze Zeile und das ist nicht das Resultat, welche ich angezeit haben möchte.
    Wobei ich keine Ahnung habe, was daran verkehrt sein soll (Rest siehe unten)
    Aber wie auch immer, dank userem kurzen Schriftwechsel bin ich auf die Lösung gekommen: Ich setze eine <texarea> ins <tr> und dann kann ich beliebig Zeilenumbrüche schrieben.

    Was auch immer das bringen soll. Leider verstehe ich nicht, was Du eigentlich für ein Problem hattest und warum die gezeigten Lösungen für dich keine Lösungen sein sollten. Da es aber wohl nicht so wichtig zu sein scheint, lassen wir es halt gut sein. Wobei mich der Screenshot eines Excelbeispiels der gewünschten Ausgabe schon interessiert hätte. Aber wenn Du das nicht posten magst, muss ich wohl damit leben.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Dienstag, 16. November 2010 16:51
    Moderator
  • Hallo Stefan

    Klar, Hier der Code:

    td.InnerHtml = "Text1<br/>Text2"
    tr.Controls.Add(td)
    tb.Controls.Add(tr)
    Dienstag, 16. November 2010 17:22
  • Entschuldige, Stefan

    Wie kann ich hier einen Screenshot mit senden?

    Dienstag, 16. November 2010 17:26
  • Hallo André,

    Wie kann ich hier einen Screenshot mit senden?

    Grafiken hochladen kannst Du hier leider nicht. Du könntest die Grafik aber bspw. bei einem Freehoster hochladen und dann hier verlinken. Wichtig ist, dass Du in Excel ein Beispiel zeigst, wie es genau aussehen soll.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Dienstag, 16. November 2010 18:02
    Moderator
  • So, Guten Morgen Stefan

    Hier der Link: http://www.potaufeu.ch/pic/xls.gif

    Besten Dank und freundlichen Gruss

    André

    Mittwoch, 17. November 2010 07:46
  • Hallo André,

    Hier der Link: http://www.potaufeu.ch/pic/xls.gif

    aaaaaahhh, jetzt kommen wir der Sache schon näher. Ich meld mich nachher nochmal dazu und schaue, dass ich dir ein Beispiel an die Hand geben kann.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Mittwoch, 17. November 2010 08:09
    Moderator
  • Hallo Stefan
    Ich meld mich nachher nochmal dazu und schaue, dass ich dir ein Beispiel an die Hand geben kann.

    Die Sache scheint mir nicht so einfach zu sein.
    Möglicherweise geht das gar nicht bzw. ich muss den Code-Abschnitt (siehe Unten) ändern.

    Hab einfach keine Ahnung wie...
    Dim sb As New StringBuilder
    Dim tw As New StringWriter(sb)
    Dim hw As New HtmlTextWriter(tw)
    tb.RenderControl(hw)
    
    Response.Write(sb.ToString)
    
    
    

    Nochmals besten Dank

    Gruss, André

    Donnerstag, 18. November 2010 12:17