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.