Automatische Spaltenbreite in EPPlus


139

Wie kann man die automatische Breite von Spalten festlegen, wenn die Texte in Spalten lang sind?

Ich benutze diesen Code

 Worksheet.Column(colIndex).AutoFitColumn() 'on all columns'
 Worksheet.cells.AutoFitColumns()
 Worksheet.Column(colIndex).BestFit = True  'on all columns'

Keine dieser Methoden funktioniert

Gibt es Möglichkeiten, es zum Laufen zu bringen?

Hinweis: Einige meiner Texte verwenden Unicode.


2
Worksheet.cells.AutoFitColumns (); funktioniert, sollte jedoch hinzugefügt werden, nachdem Sie alle Daten formatiert und gedruckt haben.
Suresh Kamrushi

Antworten:


249

Verwenden Sie AutoFitColumns, aber Sie müssen die Zellen angeben, ich nehme das gesamte Arbeitsblatt an:

VB.NET

Worksheet.Cells(Worksheet.Dimension.Address).AutoFitColumns()

C #

Worksheet.Cells[Worksheet.Dimension.Address].AutoFitColumns();

Bitte beachten Sie, dass Sie diese Methode nach dem Ausfüllen des Arbeitsblatts aufrufen müssen.


9
Wichtig ist hier, dass Sie diese Methode nach dem Ausfüllen des Arbeitsblatts aufrufen müssen, da die Eigenschaft Worksheet.Dimension null zurückgibt, wenn das Arbeitsblatt keine Daten enthält.
Landeeyo

@ Landeyo Danke, es hilft mir. Es ist wichtig, dass Sie die Breite nach dem Füllen des Inhalts einstellen.
Lanka

3
Die AutoFitColumns-Methode hat bei mir nicht funktioniert, als ich keine Parameter angegeben habe. Wenn ich die minimale und maximale Breite hinzufüge, funktioniert sie perfekt.
Zeeshan Ajmal

4
Dies ist absolut die richtige Antwort - Pangan sollte es als solche markieren.
GDB

Wenn Sie Zellen berechnet haben, müssen Sie Worksheet.Calculate()zuerst aufrufen, damit der Wert für diese Zellen bestimmt werden kann.
MikeH

38

Ich habe diesen Code mit der Version 3.1.3.0 von EPPlus verwendet und er funktioniert:

worksheet.Column(1).AutoFit();

Dabei ist ein Arbeitsblatt die Variable, die auf das Arbeitsblatt verweist, das ich in meinem Code erstellt habe (keine Klasse mit einer statischen Methode!).

Natürlich müssen Sie diese Methode aufrufen, nachdem Sie die Spalten gefüllt haben .


den ganzen Tag Fehler bekommen. "'System.Drawing wird auf dieser Plattform nicht unterstützt."
Kursat Turkay

15

Ich weiß, dass dies eine alte Frage ist, aber ich verwende den folgenden Code und er scheint direkt darauf einzugehen, was Sie versucht haben.

using (var xls = new ExcelPackage())
{
    var ws = xls.Workbook.Worksheets.Add("Some Name");

    //**Add Column Names to worksheet!**
    //**Add data to worksheet!**

    const double minWidth = 0.00;
    const double maxWidth = 50.00;

    ws.Cells.AutoFitColumns(minWidth, maxWidth);

    return pkg.GetAsByteArray();
}

11

Ich wollte nur darauf hinweisen, dass Sie Zellen anpassen können, ohne den Bereich anzugeben. Rufen Sie dies einfach auf, nachdem Sie alle Spalten usw. formatiert haben:

worksheet.Cells.AutoFitColumns()

1
Das hat bei mir funktioniert. Denken Sie daran, es aufzurufen, nachdem Sie die Daten hinzugefügt haben. Als ich es anrief, bevor Daten hinzugefügt wurden, passierte nichts.
Mortb

10

Ich weiß, es ist ein bisschen spät, aber ich hatte heute das gleiche Problem. Wenn Sie eine worksheet.DefaultColWidthdefiniert haben, wird es nicht funktionieren. Ich habe diese Zeile entfernt und hinzugefügt Worksheet.cells.AutoFitColumns();und es funktioniert jetzt.


5
sheet.Cells.AutoFitColumns()ist einfacher, danke für den Tipp! In ClosedXml tun Siesheet.Columns().AdjustToContents()
nawfal

6

Es funktioniert gut für mich.

Versuchen:

ExcelWorksheet wsSheet1 = ExcelPkg.Workbook.Worksheets.Add("Sheet1");
wsSheet1.Cells[wsSheet1.Dimension.Address].AutoFitColumns();
ExcelPkg.SaveAs();

3

Musste worksheet.Column(1).AutoFit(0);AutoFit () verwenden, war nicht der Trick.



3

Der .NET Core als Nachfolger von .NET unterstützt die Funktion Autofit-Zellen mit EPPplus-Bibliothek nicht mehr.

worksheet.Cells.AutoFitColumns();

oder

worksheet.Column(1).AutoFit();

verursacht Ausnahme:

"System.Drawing is not supported on this platform."

Die System.Drawing-Assembly ist abhängig von GDI- und Windows-spezifischen Bibliotheken, die durch eine andere Lösung ersetzt werden müssen. Die Lösung für dieses Problem ist mir unbekannt.


1

Ich benutze das und funktioniert gut.

Dim objExcel As New ExcelPackage
Dim Sheet As ExcelWorksheet = objExcel.Workbook.Worksheets.Add("SheetName")
Sheet.Cells("B1:BN").AutoFitColumns()
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.