Tôi đang cố gắng đọc tệp excel 17MB (2003) với PHPExcel1.7.3c, nhưng nó đã bị hỏng trong khi tải tệp, sau khi vượt quá giới hạn 120 giây mà tôi có. Có thư viện nào khác có thể làm điều đó hiệu quả hơn không? Tôi không cần thiết kế, tôi chỉ cần nó để hỗ trợ UTF8. Cảm ơn sự giúp đỡ của bạnĐọc tệp excel lớn với PHP
Trả lời
Việc định cỡ không phải là một thước đo tốt khi sử dụng PHPExcel, điều quan trọng hơn là phải có một số ý tưởng về số lượng ô (rowsxcolumns) trong mỗi trang tính.
Nếu bạn không có nhu cầu về phong cách, được bạn gọi:
$objReader->setReadDataOnly(true);
trước khi tải các tập tin?
Nếu bạn không cần phải truy cập vào tất cả các bảng tính, hoặc các tế bào nhất định trong một worksheet, nhìn vào sử dụng
$objReader->setLoadSheetsOnly(array(1,2))
hoặc
$objReader->setLoadSheetsOnly(1)
hoặc xác định một readFilter
Are bạn sử dụng bộ nhớ đệm di động? Nếu vậy, phương pháp gì? Điều đó làm chậm thời gian tải.
17MB là tệp cực lớn.
Thời gian tệp 1MB mất bao lâu để phân tích, do đó bạn có thể tìm hiểu xem tệp 17MB sẽ mất bao lâu. Sau đó, một tùy chọn có thể chỉ là tăng giới hạn 120 giây của bạn.
Hoặc, bạn có thể xuất sang CSV, cách này hiệu quả hơn và nhập qua fgetcsv của PHP.
Tôi nghe nói rằng Excel Explorer tốt hơn khi đọc các tệp lớn.
Có thể bạn có thể chuyển đổi/xuất thành csv và sử dụng fgetcsv() tích hợp sẵn. Phụ thuộc vào loại chức năng bạn cần.
Nếu điều duy nhất bạn cần từ đọc của bạn file Excel là dữ liệu, đây là cách của tôi để đọc các file Excel rất lớn:
tôi cài đặt gnumeric trên máy chủ của tôi, tức là với debian/ubuntu: apt-get install gnumeric
Sau đó, php gọi để đọc file excel của tôi và lưu nó vào một mảng dữ liệu dimensionnal hai đều vô cùng đơn giản (kích thước là hàng và cols):
system("ssconvert \"$excel_file_name\" \"temp.csv\"");
$array = array_map("str_getcsv", file("temp.csv"));
Sau đó, tôi có thể làm những gì tôi muốn với tôi mảng. Điều này mất ít hơn 10 giây cho một tập tin xls lớn 10MB, đồng thời tôi sẽ cần phải tải các tập tin trên phần mềm bảng tính yêu thích của tôi! Đối với các tệp rất lớn, bạn nên sử dụng hàm fopen() và file_getcsv() và làm những gì bạn phải làm mà không lưu trữ dữ liệu trong một mảng lớn để tránh lưu toàn bộ tệp csv trong bộ nhớ bằng hàm() . Điều này sẽ chậm hơn, nhưng sẽ không ăn tất cả bộ nhớ của máy chủ của bạn!
Tôi hiện đang sử dụng bảng tính-reader (https://github.com/nuovo/spreadsheet-reader) là khá nhanh trong việc đọc XLSX
, ODS
và CSV
, và có những vấn đề chỉ đề cập trong việc đọc các định dạng XLS
.
Với mức phí 500 đô la để sử dụng cho mục đích thương mại, tôi hy vọng sẽ tốt hơn –
Giá và chất lượng không có mối tương quan. Bạn chỉ cần một giấy phép cá nhân $ 99 nếu bạn muốn sử dụng nó cho ứng dụng web của riêng bạn. – Sjoerd