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.


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


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 .


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

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

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.


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

3

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


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.


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.


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()
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.