EPPlus'ta otomatik sütun genişliği


139

Sütunlardaki metinler uzun olduğunda sütunların otomatik genişlik olması nasıl sağlanır?

Bu kodu kullanıyorum

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

Bu yöntemlerin hiçbiri çalışmıyor

Çalıştırmak için herhangi bir yol var mı?

Not: Bazı metinlerim Unicode kullanıyor.


2
Worksheet.cells.AutoFitColumns (); çalışır, ancak tüm verileri biçimlendirip yazdırdıktan hemen sonra eklenmelidir.
— Suresh Kamrushi

Yanıtlar:


250

Kullanın AutoFitColumns, ancak hücreleri belirtmeniz gerekiyor, tüm çalışma sayfasını varsayıyorum:

VB.NET

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

C #

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

Çalışma sayfasını doldurduktan sonra bu yöntemi çağırmanız gerektiğini lütfen unutmayın.


9
Burada, çalışma sayfasını doldurduktan sonra bu yöntemi çağırmanız gerekir, çünkü çalışma sayfasında veri yoksa Worksheet.Dimension özelliği null değerini döndürür.
— Landeeyo

@ Landeeyo Teşekkürler bana yardımcı olur. İçeriği doldurduktan sonra genişliği ayarlamanız önemlidir.
— Lanka

3
AutoFitColumns yöntemi hiçbir parametre sağlamadığımda benim için çalışmadı, buna min ve max genişlik eklediğimde, mükemmel çalışıyor.
— Zeeshan Ajmal

4
Bu kesinlikle doğru cevap - Pangan bunu böyle işaretlemeli.
— GDB

Hesaplanmış hücreleriniz varsa Worksheet.Calculate(), bu hücrelerin değerinin belirlenebilmesi için önce aramalısınız .
— MikeH

38

EPPlus 3.1.3.0 sürümü ile bu kodu kullandım ve çalışıyor:

worksheet.Column(1).AutoFit();

burada bir çalışma sayfası, kodumda oluşturduğum çalışma sayfasına başvuran değişkendir (statik yöntemli bir sınıf değil!).

Açıkçası , sütunları doldurduktan sonra bu yöntemi çağırmanız gerekir .


gün boyunca hata alıyorum. "'System.Drawing bu platformda desteklenmiyor."
— Kursat Turkay

15

Bu eski bir soru olduğunu biliyorum, ama aşağıdaki kodu kullanın ve doğrudan ne yapmaya çalıştım adres gibi görünüyor.

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

Aralığı belirtmeksizin hücrelere sığabileceğinizi belirtmek istedim, tüm sütunları vb. Biçimlendirdikten sonra bunu aradığınızdan emin olun:

worksheet.Cells.AutoFitColumns()

1
Bu benim için çalıştı. Verileri ekledikten sonra aramayı unutmayın. Veri eklenmeden önce aradığımda hiçbir şey olmadı.
— 1919'da ipotek

10

Biraz geç olduğunu biliyorum ama bugün de aynı sorunu yaşadım. Eğer worksheet.DefaultColWidthtanımlıysanız, işe yaramaz. Bu satırı kaldırdım ve ekledim Worksheet.cells.AutoFitColumns();ve şimdi çalışıyor.


5
sheet.Cells.AutoFitColumns()daha basit, bahşiş için teşekkürler! ClosedXml'de şunları yaparsınızsheet.Columns().AdjustToContents()
— nawfal

6

Benim için iyi çalışıyor.

Deneyin:

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

3

worksheet.Column(1).AutoFit(0);AutoFit () kullanmak zorunda hile yapmıyordu.



3

.NET'in halefi olarak .NET Core, EPPplus kütüphanesi ile otomatik hücrelerin işlevini artık desteklemiyor.

worksheet.Cells.AutoFitColumns();

veya

worksheet.Column(1).AutoFit();

istisnaya neden olur:

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

System.Drawing derlemesi, başka bir çözümle değiştirilmesi gereken GDI ve Windows'a özgü kitaplıklara bağlıdır. Bu sorunun çözümü bana bilinmiyor.


1

Bunu kullanıyorum ve iyi çalışıyor.

Dim objExcel As New ExcelPackage
Dim Sheet As ExcelWorksheet = objExcel.Workbook.Worksheets.Add("SheetName")
Sheet.Cells("B1:BN").AutoFitColumns()
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.