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

140

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

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

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

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

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

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

Pengan
источник
2
Worksheet.cells.AutoFitColumns (); будет работать, но его следует добавить сразу после форматирования и печати всех данных.
Суреш Камруши

Ответы:

257

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

VB.NET

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

C #

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

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

Тим Шмельтер
источник
9
Здесь важно то, что вам нужно вызвать этот метод после заполнения рабочего листа, потому что свойство Worksheet.Dimension вернет null, если на листе нет данных.
Landeeyo
@Landeeyo Спасибо, мне это помогло. Важно установить ширину после заполнения содержимого.
Ланка
3
Метод AutoFitColumns у меня не работал, когда я не указывал параметров, когда я добавляю к нему минимальную и максимальную ширину, он работает отлично.
Зишан Аджмал
4
Это абсолютно правильный ответ - Панган должен отметить это как таковое.
GDB
Если вы рассчитали ячейки, Worksheet.Calculate()сначала необходимо вызвать, чтобы можно было определить значение для этих ячеек.
MikeH
38

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

worksheet.Column(1).AutoFit();

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

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

Даниэле Арманаско
источник
получаю ошибку весь день. «'System.Drawing не поддерживается на этой платформе».
Alex
15

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

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
источник
12

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

worksheet.Cells.AutoFitColumns()
Джонни 5
источник
1
Это сработало для меня. Не забудьте вызвать его после добавления данных. Когда я позвонил перед добавлением данных, ничего не произошло.
Mortb
10

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

Хосе
источник
5
sheet.Cells.AutoFitColumns()проще, спасибо за подсказку! В ClosedXml вы это делаетеsheet.Columns().AdjustToContents()
nawfal
6

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

Пытаться:

ExcelWorksheet wsSheet1 = ExcelPkg.Workbook.Worksheets.Add("Sheet1");
wsSheet1.Cells[wsSheet1.Dimension.Address].AutoFitColumns();
ExcelPkg.SaveAs();
лей
источник
3

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

xtds
источник
3

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

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

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

ffffff01
источник
epplus.codeplex.com/discussions/218294?ProjectName=epplus Я не могу найти рабочего решения этой проблемы.
Pengan
3

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

worksheet.Cells.AutoFitColumns();

или

worksheet.Column(1).AutoFit();

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

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

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

Ондрей Розинек
источник
1

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

Dim objExcel As New ExcelPackage
Dim Sheet As ExcelWorksheet = objExcel.Workbook.Worksheets.Add("SheetName")
Sheet.Cells("B1:BN").AutoFitColumns()
Джонни Нина
источник