Automatyczna szerokość kolumn w EPPlus

139

Jak sprawić, by kolumny miały automatyczną szerokość, gdy teksty w kolumnach są długie?

Używam tego kodu

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

Żadna z tych metod nie działa

Czy są jakieś sposoby, aby to zadziałało?

Uwaga: niektóre moje teksty używają Unicode.

Pengan
źródło
2
Worksheet.cells.AutoFitColumns (); zadziała, ale powinien zostać dodany zaraz po sformatowaniu i wydrukowaniu wszystkich danych.
Suresh Kamrushi

Odpowiedzi:

250

Użyj AutoFitColumns, ale musisz określić komórki, zakładam cały arkusz:

VB.NET

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

DO#

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

Należy pamiętać, że po wypełnieniu arkusza należy wywołać tę metodę.

Tim Schmelter
źródło
9
Ważną rzeczą jest to, że musisz wywołać tę metodę po wypełnieniu arkusza roboczego, ponieważ właściwość Worksheet.Dimension zwróci wartość null, jeśli nie ma danych w arkuszu.
Landeeyo
@Landeeyo Dzięki, że mi pomaga. Ważne jest, aby ustawić szerokość po wypełnieniu treści.
Lanka
3
Metoda AutoFitColumns nie działała u mnie, gdy nie podawałem żadnych parametrów, kiedy dodam do niej min i max szerokość, działa idealnie.
Zeeshan Ajmal
4
To absolutnie poprawna odpowiedź - Pangan powinien to oznaczyć jako taką.
GDB
Jeśli masz obliczone komórki, musisz najpierw wywołać, Worksheet.Calculate()aby można było określić wartość dla tych komórek.
MikeH
38

Użyłem tego kodu z wersją 3.1.3.0 EPPlus i działa:

worksheet.Column(1).AutoFit();

gdzie arkusz roboczy jest zmienną odwołującą się do arkusza, który utworzyłem w moim kodzie (nie jest to klasa z metodą statyczną!).

Oczywiście musisz wywołać tę metodę po wypełnieniu kolumn .

Daniele Armanasco
źródło
otrzymywanie błędów przez cały dzień. „„ System.Drawing nie jest obsługiwany na tej platformie ”.
Kursat Turkay
15

Wiem, że to stare pytanie, ale używam poniższego kodu i wydaje się, że bezpośrednio odnosi się do tego, co próbowałeś zrobić.

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
źródło
11

Chciałem tylko podkreślić, że możesz dopasować komórki bez określania zakresu, po prostu pamiętaj, aby wywołać to po sformatowaniu wszystkich kolumn itp .:

worksheet.Cells.AutoFitColumns()
johnny 5
źródło
1
To zadziałało dla mnie. Pamiętaj, aby zadzwonić po dodaniu danych. Kiedy zadzwoniłem przed dodaniem danych, nic się nie wydarzyło.
mortb
10

Wiem, że jest trochę za późno, ale mam dzisiaj ten sam problem. Jeśli masz worksheet.DefaultColWidthzdefiniowane, to nie zadziała. Usunąłem tę linię i dodałem Worksheet.cells.AutoFitColumns();i teraz działa.

Jose
źródło
5
sheet.Cells.AutoFitColumns()jest prostsze, dzięki za wskazówkę! W ClosedXml robiszsheet.Columns().AdjustToContents()
nawfal
6

U mnie działa dobrze.

Próbować:

ExcelWorksheet wsSheet1 = ExcelPkg.Workbook.Worksheets.Add("Sheet1");
wsSheet1.Cells[wsSheet1.Dimension.Address].AutoFitColumns();
ExcelPkg.SaveAs();
leiit
źródło
3

Musiał użyć worksheet.Column(1).AutoFit(0);AutoFit () nie załatwił sprawy.

xtds
źródło
3

Będziesz musiał obliczyć szerokość. W bibliotece nie ma funkcji automatycznego określania rozmiaru, która będzie działać zgodnie z zamierzeniami.

Autofitcolumn nie będzie działać z zawiniętym tekstem i komórkami zawierającymi formuły.

Spójrz na http://epplus.codeplex.com/discussions/218294?ProjectName=epplus, aby zapoznać się z przykładami rozwiązania problemu.

ffffff01
źródło
epplus.codeplex.com/discussions/218294?ProjectName=epplus Nie mogę znaleźć żadnego działającego rozwiązania tego problemu.
Pengan,
3

.NET Core jako następca platformy .NET nie obsługuje już funkcji autodopasowywania komórek za pomocą biblioteki EPPplus.

worksheet.Cells.AutoFitColumns();

lub

worksheet.Column(1).AutoFit();

powoduje wyjątek:

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

Zespół System.Drawing jest zależny od bibliotek specyficznych dla GDI i Windows, które muszą zostać zastąpione innym rozwiązaniem. Rozwiązanie tego problemu nie jest mi znane.

Ondrej Rozinek
źródło
1

Używam tego i działa dobrze.

Dim objExcel As New ExcelPackage
Dim Sheet As ExcelWorksheet = objExcel.Workbook.Worksheets.Add("SheetName")
Sheet.Cells("B1:BN").AutoFitColumns()
Jhonny Nina
źródło