Автоматична ширина стовпця в EPPlus


139

Як зробити так, щоб стовпці мали автоматичну ширину, коли тексти у стовпцях довгі?

Я використовую цей код

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

Жоден із цих методів не працює

Чи є способи змусити це працювати?

Примітка. У деяких моїх текстах використовується Unicode.


2
Worksheet.cells.AutoFitColumns (); буде працювати, але його слід додати відразу після того, як ви відформатували та надрукували всі дані.
Суреш Камруші

Відповіді:


250

Використовуйте AutoFitColumns, але вам потрібно вказати комірки, я припускаю весь робочий аркуш:

VB.NET

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

C #

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

Зверніть увагу, що вам потрібно зателефонувати за цим методом після заповнення робочого листа.


9
Тут важливо те, що вам потрібно викликати цей метод після заповнення робочого листа, оскільки властивість Worksheet.Dimension поверне нульове значення, якщо в робочому аркуші немає даних.
Ландейо

@Landeeyo Спасибі, це допомагає мені. Важливо, щоб встановити ширину після заповнення вмісту.
Ланка

3
Метод AutoFitColumn не працював для мене, коли я не вказував жодних параметрів, коли я додаю до нього min та max ширину, він працює чудово.
Зеешан Аджмал

4
Це абсолютно правильна відповідь - Панган повинен позначити це як таке.
GDB

Якщо ви обчислили клітинки, потрібно Worksheet.Calculate()спочатку зателефонувати, щоб визначити значення для цих комірок.
Майк

38

Я використав цей код з версією 3.1.3.0 EPPlus і він працює:

worksheet.Column(1).AutoFit();

де робочий аркуш - це змінна посилання на робочий аркуш, який я створив у своєму коді (а не клас зі статичним методом!).

Очевидно, що ви повинні викликати цей метод після заповнення стовпців .


отримувати помилку весь день вниз. "'System.Drawing не підтримується на цій платформі."
Курсат Туркай

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

11

Просто хотілося зазначити, що ви можете підходити до комірок із зазначенням діапазону, просто переконайтеся, що зателефонуйте, після того як ви відформатували всі стовпці тощо:

worksheet.Cells.AutoFitColumns()

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 () не робив хитрощів.


3

Вам потрібно буде розрахувати ширину. У бібліотеці немає функції автоматичного функціонування, яка б працювала так, як ви плануєте.

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

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


epplus.codeplex.com/discussions/218294?ProjectName=epplus Я не можу знайти жодного робочого рішення цієї проблеми.
Пенган

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()
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.