2012-04-01 27 views
7

Tôi muốn đảm bảo rằng không có giá trị nào bị cắt trong sổ làm việc do phpExcel tạo ra. Để thực hiện điều này, tôi gọi tới sốCác vấn đề về kích thước cột ExcelExcel

$oCurrentSheet->getColumnDimension($aCurrentCoords['x'])->setAutoSize(true); 

mỗi khi tôi viết một ô. Điều này dường như không hoạt động: Nhiều cột kết thúc rất nhỏ.

Có ai biết cách đảm bảo mọi cột trong sổ làm việc excel được xuất ra có kích thước theo nội dung của nó không?

Trả lời

12

Đừng làm điều này mỗi lần bạn viết một ô ... đó là chi phí không cần thiết. Làm điều đó chỉ một lần cho mỗi cột.

Được cảnh báo, nó vẫn đắt tiền khi lưu, vì PHPExcel sau đó đi qua từng ô trong cột đó làm việc chiều rộng cần thiết dựa trên nội dung của ô đó, tính đến tính toán và định dạng công thức và sử dụng kích thước tối đa bất kỳ ô nào trong cột đó. Thậm chí sau đó nó không phải là một giải pháp hoàn hảo: hành vi mặc định là ước tính, đếm số ký tự để hiển thị và sử dụng hệ số chung dựa trên phông chữ (Arial, Verdana của Calibri) và một chút đệm. Để tính toán chính xác hơn, bạn có thể thay đổi phương thức được sử dụng để tính toán và sau đó mã sẽ sử dụng GD để tạo hộp giới hạn ttf và căn cứ kích thước ô trên kích thước của hộp đó. Đây là phép tính chính xác hơn, nhưng chậm hơn rất nhiều.

Bạn có thể thay đổi phương pháp tính toán sử dụng:

PHPExcel_Shared_Font::setAutoSizeMethod($method); 

trước khi lưu, trong đó $ phương pháp là một trong những điều sau đây:

PHPExcel_Shared_Font::AUTOSIZE_METHOD_APPROX 
PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT 

này vẫn không phải là một giải pháp hoàn hảo, nhưng đó là tính toán tốt nhất mà PHPExcel có thể làm.

Cách khác là gọi phương thức calculateColumnWidths() của bảng tính trực tiếp trước khi lưu ... và sau đó đi qua từng chiều của cột tăng giá trị lên 5% để thử và đảm bảo toàn bộ cột phù hợp trước khi lưu.

Các vấn đề liên quan