Lebar kolom otomatis di EPPlus

139

Bagaimana membuat kolom menjadi lebar otomatis ketika teks dalam kolom panjang?

Saya menggunakan kode ini

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

Tidak satu pun dari metode ini yang berfungsi

Apakah ada cara untuk membuatnya bekerja?

Catatan: Beberapa teks saya menggunakan Unicode.

Pengan
sumber
2
Worksheet.cells.AutoFitColumns (); akan berfungsi, tetapi harus ditambahkan tepat setelah Anda memformat dan mencetak semua data.
Suresh Kamrushi

Jawaban:

250

Gunakan AutoFitColumns, tetapi Anda harus menentukan sel, saya menganggap seluruh lembar kerja:

VB.NET

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

C #

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

Harap perhatikan bahwa Anda perlu memanggil metode ini setelah mengisi lembar kerja.

Tim Schmelter
sumber
9
Yang penting di sini adalah Anda perlu memanggil metode ini setelah mengisi lembar kerja karena properti Lembar Kerja. Dimensi akan mengembalikan nol jika tidak ada data di lembar kerja.
Landeeyo
@Landeeyo Terima kasih itu membantu saya. Penting untuk mengatur lebar setelah mengisi konten.
Lanka
3
Metode AutoFitColumns tidak berfungsi untuk saya ketika saya tidak memberikan parameter, ketika saya menambahkan min dan lebar maks untuk itu, ia bekerja dengan sempurna.
Zeeshan Ajmal
4
Ini benar-benar jawaban yang benar - Pangan harus menandainya seperti itu.
GDB
Jika Anda telah menghitung sel, Anda harus menelepon Worksheet.Calculate()dulu agar nilai sel-sel itu dapat ditentukan.
MikeH
38

Saya telah menggunakan kode ini dengan versi 3.1.3.0 dari EPPlus dan berfungsi:

worksheet.Column(1).AutoFit();

di mana lembar kerja adalah variabel yang merujuk lembar kerja yang telah saya buat dalam kode saya (bukan kelas dengan metode statis!).

Jelas Anda harus memanggil metode ini setelah Anda mengisi kolom .

Daniele Armanasco
sumber
mendapatkan kesalahan sepanjang hari. "Sistem. Gambar tidak didukung pada platform ini."
Kursat Turkay
15

Saya tahu ini adalah pertanyaan lama, tetapi saya menggunakan kode di bawah ini dan sepertinya langsung membahas apa yang telah Anda coba lakukan.

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
sumber
11

Hanya ingin menunjukkan bahwa Anda dapat memasukkan sel tanpa menentukan rentang, pastikan untuk memanggil ini setelah Anda memformat semua kolom dll:

worksheet.Cells.AutoFitColumns()
johnny 5
sumber
1
Ini berhasil untuk saya. Jangan lupa untuk memanggilnya setelah Anda menambahkan data. Ketika saya menyebutnya sebelum data ditambahkan, tidak ada yang terjadi.
mortb
10

Saya tahu sedikit terlambat tapi saya punya masalah yang sama hari ini. Jika Anda memiliki worksheet.DefaultColWidthdefinisi, itu tidak akan berfungsi. Saya telah menghapus baris itu dan menambahkannya Worksheet.cells.AutoFitColumns();dan berfungsi sekarang.

Jose
sumber
5
sheet.Cells.AutoFitColumns()lebih sederhana, terima kasih atas tipnya! Di ClosedXml, Anda melakukannyasheet.Columns().AdjustToContents()
nawfal
6

Ini bekerja dengan baik untuk saya.

Mencoba:

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

Harus menggunakan worksheet.Column(1).AutoFit(0);AutoFit () tidak melakukan trik.

xtds
sumber
3

Anda harus menghitung lebarnya. Tidak ada fungsi autosizing di perpustakaan yang akan berfungsi sesuai keinginan Anda.

Kolom autofit tidak akan berfungsi dengan teks yang dibungkus dan sel dengan rumus.

Lihatlah http://epplus.codeplex.com/discussions/218294?ProjectName=epplus untuk contoh bagaimana Anda bisa menyelesaikan masalah.

ffffff01
sumber
epplus.codeplex.com/discussions/218294?ProjectName=epplus Saya tidak dapat menemukan solusi yang berfungsi untuk masalah ini.
Pengan
3

.NET Core sebagai penerus .NET tidak mendukung lagi fungsi sel autofit dengan pustaka EPPplus.

worksheet.Cells.AutoFitColumns();

atau

worksheet.Column(1).AutoFit();

menyebabkan pengecualian:

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

Rakitan System.Drawing tergantung pada pustaka khusus GDI dan Windows yang harus diganti oleh solusi lain. Solusi untuk masalah ini bagi saya tidak diketahui.

Ondrej Rozinek
sumber
1

Saya menggunakan ini dan bekerja dengan baik.

Dim objExcel As New ExcelPackage
Dim Sheet As ExcelWorksheet = objExcel.Workbook.Worksheets.Add("SheetName")
Sheet.Cells("B1:BN").AutoFitColumns()
Jhonny Nina
sumber