Автоматическая ширина столбца в EPPlus

Как сделать столбцы шириной автоматически, если текст в столбцах длинный?

Я использую этот код

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

Ни один из этих методов не работает

Есть ли способы заставить его работать?

Примечание: некоторые из моих текстов используют Unicode.


person Pengan    schedule 26.03.2013    source источник
comment
Worksheet.cells.AutoFitColumns (); будет работать, но его следует добавить сразу после форматирования и печати всех данных.   -  person Suresh Kamrushi    schedule 14.08.2018
comment
@Pengan, как исправить?   -  person D T    schedule 09.04.2021


Ответы (10)


Используйте AutoFitColumns, но вы должны указать ячейки, я предполагаю, что весь рабочий лист:

VB.NET

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

C#

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

Обратите внимание, что вам нужно вызвать этот метод после заполнения таблицы.

person Tim Schmelter    schedule 26.03.2013
comment
Здесь важно то, что вам нужно вызвать этот метод после заполнения рабочего листа, потому что свойство Worksheet.Dimension вернет null, если на листе нет данных. - person Landeeyo; 23.01.2015
comment
@Landeeyo Спасибо, это помогает мне. Важно установить ширину после заполнения содержимого. - person Lanka; 10.04.2015
comment
Метод AutoFitColumns у меня не работал, когда я не указывал параметров, когда я добавляю к нему минимальную и максимальную ширину, он работает отлично. - person Zeeshan Ajmal; 29.04.2015
comment
Это абсолютно правильный ответ - Панган должен отметить это как таковое. - person GDB; 21.11.2015
comment
Если вы рассчитали ячейки, вы должны сначала вызвать Worksheet.Calculate(), чтобы можно было определить значение для этих ячеек. - person MikeH; 07.01.2019

Я использовал этот код с EPPlus версии 3.1.3.0, и он работает:

worksheet.Column(1).AutoFit();

где рабочий лист - это переменная, ссылающаяся на рабочий лист, который я создал в своем коде (а не класс со статическим методом!).

Очевидно, вам необходимо вызвать этот метод после заполнения столбцов.

person Daniele Armanasco    schedule 28.05.2013
comment
получаю ошибку весь день вниз. 'System.Drawing не поддерживается на этой платформе. - person Zen Of Kursat; 24.03.2018

Просто хотел указать, что вы можете уместить ячейки без указания диапазона, просто обязательно вызовите это после того, как вы отформатировали все столбцы и т. Д.:

worksheet.Cells.AutoFitColumns()
person johnny 5    schedule 25.10.2018
comment
Это сработало для меня. Не забудьте вызвать его после добавления данных. Когда я позвонил перед добавлением данных, ничего не произошло. - person mortb; 06.11.2019

Я знаю, что это старый вопрос, но я использую приведенный ниже код, и он, кажется, напрямую касается того, что вы пытались сделать.

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();
}
person TrailTrackers    schedule 30.06.2016

Я знаю, что немного поздно, но сегодня у меня была такая же проблема. Если у вас есть worksheet.DefaultColWidthdefined, это не сработает. Я удалил эту строку и добавил Worksheet.cells.AutoFitColumns();, и теперь она работает.

person Jose    schedule 18.09.2015
comment
sheet.Cells.AutoFitColumns() проще, спасибо за подсказку! В ClosedXml вы делаете sheet.Columns().AdjustToContents() - person nawfal; 26.06.2016

У меня все работает нормально.

Пытаться:

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

Использование worksheet.Column(1).AutoFit(0); AutoFit () не помогло.

person xtds    schedule 23.07.2013

Вам нужно будет рассчитать ширину. В библиотеке нет функции автоматического изменения размера, которая бы работала так, как вы задумали.

Автозаполнение столбца не работает с переносом текста и ячейками с формулами.

Посмотрите на http://epplus.codeplex.com/discussions/218294?ProjectName=epplus для примеров того, как вы можете решить проблему.

person ffffff01    schedule 26.03.2013
comment
epplus.codeplex.com/discussions/218294?ProjectName=epplus Я не могу найти любое рабочее решение этой проблемы. - person Pengan; 28.03.2013

.NET Core как преемник .NET больше не поддерживает функцию автозаполнения ячеек с библиотекой EPPplus.

worksheet.Cells.AutoFitColumns();

or

worksheet.Column(1).AutoFit();

вызывает исключение:

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

Сборка System.Drawing зависит от конкретных библиотек GDI и Windows, которые необходимо заменить другим решением. Решение этой проблемы мне неизвестно.

person Ondrej Rozinek    schedule 15.11.2019

Я использую это и хорошо работает.

Dim objExcel As New ExcelPackage
Dim Sheet As ExcelWorksheet = objExcel.Workbook.Worksheets.Add("SheetName")
Sheet.Cells("B1:BN").AutoFitColumns()
person Jhonny Nina    schedule 05.12.2013