2013-03-26 39 views
85

Làm cách nào để làm cho cột có chiều rộng tự động khi văn bản trong các cột dài?Chiều rộng cột tự động trong EPPlus

tôi sử dụng mã này

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

Không ai trong số những phương pháp đang làm việc

Có cách nào để làm cho nó hoạt động?

Lưu ý: Một số văn bản của tôi sử dụng Unicode.

Trả lời

162

Sử dụng AutoFitColumns, nhưng bạn phải xác định các tế bào, tôi giả định toàn bộ bảng tính:

VB.NET

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

C#

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

Xin lưu ý bạn cần phải gọi phương pháp này sau khi điền vào bảng tính.

+1

không hoạt động. – Pengan

+0

Điều này làm việc ... ToString thậm chí không cần thiết – Beejee

+6

Điều quan trọng ở đây là bạn cần phải gọi phương thức này sau khi điền bảng tính vì tài sản Worksheet.Dimension sẽ trả về null nếu không có dữ liệu trong trang tính. – Landeeyo

3

Bạn sẽ cần tính chiều rộng. Không có chức năng tự động hóa trong thư viện sẽ hoạt động như bạn dự định.

Tự động thu thập sẽ không hoạt động với văn bản được bao bọc và ô có công thức.

Nhìn vào http://epplus.codeplex.com/discussions/218294?ProjectName=epplus để biết ví dụ về cách bạn có thể giải quyết vấn đề.

+0

http://epplus.codeplex.com/discussions/218294?ProjectName=epplus Tôi không thể tìm thấy giải pháp làm việc nào cho vấn đề này. – Pengan

31

Tôi đã sử dụng đoạn mã này với phiên bản 3.1.3.0 của EPPlus và nó đang làm việc:

worksheet.Column(1).AutoFit(); 

nơi bảng là biến tham chiếu đến bảng Tôi đã tạo ra trong mã của tôi (không phải là một lớp học với một tĩnh phương pháp!).

Rõ ràng bạn phải gọi phương thức này sau khi bạn đã điền các cột.

+4

Tuyên bố cuối cùng cần được nhấn mạnh: ** gọi phương thức này sau khi bạn đã điền các cột ** –

2

Phải sử dụng worksheet.Column(1).AutoFit(0); AutoFit() đã không thực hiện thủ thuật.

1

Tôi sử dụng tính năng này và hoạt động tốt.

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

Bạn có thể để lại lời giải thích kỹ lưỡng hơn về mã của bạn không? – Shawn

7

Tôi biết có hơi muộn nhưng hôm nay tôi cũng gặp vấn đề tương tự. Nếu bạn đã xác định worksheet.DefaultColWidth, nó sẽ không hoạt động. Tôi đã xóa dòng đó và thêm Worksheet.cells.AutoFitColumns(); và nó hoạt động ngay bây giờ.

+3

'sheet.Cells.AutoFitColumns()' là đơn giản hơn, cảm ơn cho mẹo! Trong ClosedXml, bạn làm 'sheet.Columns(). AdjustToContents()' – nawfal

6

Tôi biết đây là câu hỏi cũ, nhưng tôi sử dụng mã bên dưới và dường như giải quyết trực tiếp những gì bạn đã cố gắng thực hiện.

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(); 
} 
Các vấn đề liên quan