ความกว้างคอลัมน์อัตโนมัติใน 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 (); จะทำงานได้ แต่ควรเพิ่มหลังจากที่คุณจัดรูปแบบและพิมพ์ข้อมูลทั้งหมดแล้ว
Suresh Kamrushi

คำตอบ:


250

ใช้AutoFitColumnsแต่คุณต้องระบุเซลล์ฉันถือว่าแผ่นงานทั้งหมด:

VB.NET

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

ค#

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

โปรดทราบว่าคุณต้องเรียกวิธีนี้หลังจากกรอกแผ่นงาน


9
สิ่งสำคัญอยู่ที่นี่ซึ่งคุณต้องเรียกใช้วิธีนี้หลังจากกรอกแผ่นงานเนื่องจากแผ่นงานคุณสมบัติขนาดจะคืนค่าว่างหากไม่มีข้อมูลในแผ่นงาน
Landeeyo

@ Landeeyo ขอบคุณที่ช่วยฉัน เป็นสิ่งสำคัญที่การตั้งค่าความกว้างหลังจากกรอกเนื้อหา
ลังกา

3
วิธี AutoFitColumns ไม่ทำงานสำหรับฉันเมื่อฉันไม่ได้ระบุพารามิเตอร์เมื่อฉันเพิ่ม min และ max width ให้ใหญ่สุดมันทำงานได้อย่างสมบูรณ์
Zeeshan Ajmal

4
คำตอบที่ถูกต้องอย่างนี้ Pangan ควรทำเครื่องหมายว่าเป็นเช่นนั้น
GDB

หากคุณมีเซลล์ที่คำนวณได้คุณต้องโทรWorksheet.Calculate()ก่อนเพื่อที่จะสามารถกำหนดค่าสำหรับเซลล์เหล่านั้นได้
MikeH

38

ฉันใช้รหัสนี้กับเวอร์ชัน 3.1.3.0 ของ EPPlus และทำงานได้:

worksheet.Column(1).AutoFit();

โดยที่เวิร์กชีทเป็นตัวแปรที่อ้างอิงถึงเวิร์กชีทที่ฉันสร้างขึ้นในรหัสของฉัน (ไม่ใช่คลาสที่มีเมธอดสแตติก!)

เห็นได้ชัดว่าคุณจะต้องเรียกวิธีการนี้หลังจากที่คุณได้กรอกคอลัมน์


ได้รับข้อผิดพลาดตลอดทั้งวัน "'ระบบไม่รองรับการวาดภาพบนแพลตฟอร์มนี้"
Kursat Turkay

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

คุณจะต้องคำนวณความกว้าง ไม่มีฟังก์ชันการปรับขนาดอัตโนมัติในไลบรารีที่จะทำงานตามที่คุณต้องการ

คอลัมน์อัตโนมัติจะไม่ทำงานกับข้อความที่ถูกห่อและเซลล์ที่มีสูตร

ดูhttp://epplus.codeplex.com/discussions/218294?ProjectName=epplusสำหรับตัวอย่างของวิธีที่คุณสามารถแก้ปัญหาได้


epplus.codeplex.com/discussions/218294?ProjectName=epplusฉันไม่พบวิธีแก้ไขปัญหาการทำงานสำหรับปัญหานี้
Pengan

3

.NET Core ในฐานะผู้สืบทอดของ. NET ไม่สนับสนุนฟังก์ชัน autofit cells ที่มีไลบรารี 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()
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.