Đừ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.
Nguồn
2012-04-01 15:46:57