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.

Pengan
quelle
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.

Tim Schmelter
quelle
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 .

Daniele Armanasco
quelle
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();
}
TrailTrackers
quelle
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()
Johnny 5
quelle
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.

Jose
quelle
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();
leiit
quelle
3

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

xtds
quelle
3

Sie müssen die Breite berechnen. Es gibt keine automatische Größenfunktion in der Bibliothek, die wie beabsichtigt funktioniert.

Autofitcolumn funktioniert nicht mit umbrochenem Text und Zellen mit Formeln.

Unter http://epplus.codeplex.com/discussions/218294?ProjectName=epplus finden Sie Beispiele, wie Sie das Problem lösen können.

ffffff01
quelle
epplus.codeplex.com/discussions/218294?ProjectName=epplus Ich kann keine funktionierende Lösung für dieses Problem finden.
Pengan
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.

Ondrej Rozinek
quelle
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()
Jhonny Nina
quelle