Độ rộng cột tự động trong EPPlus


139

Làm cách nào để tạo cột thành chiều rộng tự động khi văn bản trong cột dài?

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 có phương pháp nào trong số này đang hoạt động

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.


2
Worksheet.cells.AutoFitColumns (); sẽ hoạt động, nhưng nó sẽ được thêm ngay sau khi bạn định dạng và in tất cả dữ liệu.
Suresh Kamrushi

Câu trả lời:


250

Sử dụng AutoFitColumns, nhưng bạn phải chỉ định các ô, tôi giả sử toàn bộ trang tính:

VB.NET

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

C #

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

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


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

@Landeeyo Cảm ơn nó giúp tôi. Điều quan trọng là thiết lập chiều rộng sau khi điền nội dung.
Lanka

3
Phương thức AutoFitColumns không hoạt động với tôi khi tôi không cung cấp tham số nào, khi tôi thêm tối thiểu và chiều rộng tối đa cho nó, nó hoạt động hoàn hảo.
Zeeshan Ajmal

4
Đây hoàn toàn là câu trả lời đúng - Pangan nên đánh dấu nó như vậy.
GDB

Nếu bạn đã tính các ô, bạn phải gọi Worksheet.Calculate()trước để có thể xác định giá trị cho các ô đó.
MikeH

38

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

worksheet.Column(1).AutoFit();

trong đó một bảng tính là biến tham chiếu bảng tính mà tôi đã tạo trong mã của mình (không phải là một lớp có phương thức tĩnh!).

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


nhận lỗi cả ngày. "'System.Drawing không được hỗ trợ trên nền tảng này."
Kursat Turkay

15

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

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

Chỉ muốn chỉ ra rằng bạn có thể phù hợp với các ô mà không chỉ định phạm vi, chỉ cần đảm bảo gọi nó sau khi bạn đã định dạng tất cả các cột, v.v.

worksheet.Cells.AutoFitColumns()

1
Điều này làm việc cho tôi. Hãy nhớ gọi nó sau khi bạn đã thêm dữ liệu. Khi tôi gọi nó trước khi dữ liệu được thêm vào, không có gì xảy ra.
mortb

10

Tôi biết là hơi muộn một chút nhưng hôm nay tôi cũng gặp vấn đề tương tự. Nếu bạn đã worksheet.DefaultColWidthxác định, 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ờ.


5
sheet.Cells.AutoFitColumns()đơn giản hơn, cảm ơn vì tiền boa! Trong CloseXml, bạn làmsheet.Columns().AdjustToContents()
nawfal

6

Nó hoạt động tốt với tôi.

Thử:

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

3

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


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.

Autofitcolumn sẽ không hoạt động với văn bản được bao bọc và các ô có công thức.

Hãy xem 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 đề.


epplus.codeplex.com/discussions/218294?ProjectName=epplus Tôi không thể tìm thấy bất kỳ giải pháp làm việc nào cho vấn đề này.
Bành Tổ

3

.NET Core với tư cách là người kế thừa của .NET không còn hỗ trợ chức năng tự động các ô với thư viện EPPplus.

worksheet.Cells.AutoFitColumns();

hoặc là

worksheet.Column(1).AutoFit();

gây ra ngoại lệ:

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

Tập hợp System.Drawing phụ thuộc vào các thư viện cụ thể của GDI và Windows phải được thay thế bằng một giải pháp khác. Giải pháp cho vấn đề này là cho tôi không biết.


1

Tôi sử dụng nó và đang làm việc tốt.

Dim objExcel As New ExcelPackage
Dim Sheet As ExcelWorksheet = objExcel.Workbook.Worksheets.Add("SheetName")
Sheet.Cells("B1:BN").AutoFitColumns()
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.