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

116

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

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

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

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

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

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

  • 1
    Worksheet.cells.AutoFitColumns (); будет работать, но его следует добавить сразу после того, как вы отформатировали и распечатали все данные.
Теги:
epplus

10 ответов

192

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

VB.NET

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

С#

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

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

  • 4
    это не работает.
  • 0
    Это работает ... ToString даже не нужен
Показать ещё 5 комментариев
35

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

worksheet.Column(1).AutoFit();

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

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

  • 0
    получать ошибки весь день вниз. «System.Drawing не поддерживается на этой платформе.»
  • 0
    это работает для меня. Спасибо приятель :)
12

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

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

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

  • 4
    sheet.Cells.AutoFitColumns() проще, спасибо за совет! В ClosedXml вы делаете sheet.Columns().AdjustToContents()
5

Это работает просто отлично для меня.

Пытаться:

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

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

worksheet.Cells.AutoFitColumns()
3

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

Autofitcolumn не будет работать с обернутым текстом и ячейками с формулами.

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

2

При использовании worksheet.Column(1).AutoFit(0); AutoFit() не выполнял трюк.

1

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

Dim objExcel As New ExcelPackage
Dim Sheet As ExcelWorksheet = objExcel.Workbook.Worksheets.Add("SheetName")
Sheet.Cells("B1:BN").AutoFitColumns()
  • 0
    Можете ли вы оставить более подробное объяснение вашего кода?
0

Будьте осторожны, вы должны сделать это перед сохранением, иначе это не сработает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню