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.