2009-06-19 34 views
8

Tôi đang sử dụng một trang web dựa trên ứng dụng PHP đơn giản mà kết quả đầu ra một bảng như một bảng tínhPHP - Chỉ đọc loại tệp bảng tính?

header("Content-Disposition: attachment; filename=" . $filename . ".xls"); 
header("Content-Type: application/vnd.ms-excel"); 

//inserts tab delimited text 

Nhưng tôi tìm bảng tính tải về mở ra như một tập tin chỉ đọc và phải được lưu cục bộ và (trong Excel trên Windows) loại đã thay đổi thành XLS (từ HTML). Có cách nào để thiết lập các thuộc tính của filetype một cách chính xác để thực hiện một lưu đơn giản không yêu cầu sửa các filetype?

Tệp có được tải xuống chỉ đọc theo bản chất của bảo mật hoặc điều này không bình thường không?

Ngoài ra, tôi không thích các đường viền tự động được tạo khi mở bảng tính trong Excel hoặc OpenOffice (trên Linux). Tôi không muốn định dạng đường viền. Có cách nào trong tệp để chỉ định không có định dạng được thêm vào hoặc được xây dựng trong các ứng dụng đó không?

Trả lời

8

Tôi không biết bạn đang nói phiên bản Excel nào, vì vậy tôi cho rằng bạn đang sử dụng phiên bản 2007 hoặc phiên bản mới hơn.

Sự cố thay đổi tiện ích có thể phụ thuộc vào tính năng Office được gọi là "Extension Hardening"; theo như tôi biết, giải pháp duy nhất là tạo một tệp Excel thực (ví dụ bằng cách sử dụng tập hợp các lớp học PHPExcel) và không phải là tệp HTML.

Các tập tin tải về là chỉ đọc vì lý do an ninh, kể từ khi họ đang được mở trong cái gọi là "Protected View":

tập tin từ Internet và từ các địa điểm có khả năng không an toàn khác có thể chứa virus, sâu, hoặc các loại phần mềm độc hại khác có thể gây hại cho máy tính của bạn. Để giúp bảo vệ máy tính của bạn, các tệp từ các vị trí có thể không an toàn này được mở trong Chế độ xem được bảo vệ. Bằng cách sử dụng Chế độ xem được bảo vệ, bạn có thể đọc tệp và kiểm tra nội dung của tệp trong khi giảm thiểu rủi ro có thể xảy ra.

Cuối cùng, một từ về đường viền và định dạng: với phiên bản Excel 2000 cũ, bạn có thể định dạng đầu ra bằng cách thêm một số thẻ XML vào phần tiêu đề của mã HTML; xem "Microsoft Office HTML and XML Reference" để biết thêm chi tiết và ví dụ, nhưng hãy nhớ rằng nó khá lạc hậu, vì vậy tôi không nghĩ rằng kỹ thuật này vẫn hoạt động với các phiên bản Excel mới hơn.

Nếu bạn muốn kiểm soát nhiều hơn lượng ouput được tạo, bạn không nên sử dụng HTML đơn giản để tạo tệp bảng tính.

Trên this post bạn cũng có thể tìm thấy một số lựa chọn thay thế cho PHPExcel để ghi tệp Excel.

6

AFAIK, ít nhất là trên Windows, nó phụ thuộc vào những gì người dùng thực hiện với lời nhắc được trình duyệt hiển thị khi họ theo liên kết.

Nếu người dùng chọn lưu tệp, tệp sẽ không chỉ đọc. Nếu người dùng chọn mở nó, tệp sẽ được lưu vào một thư mục tạm thời và trình duyệt có thể xóa nó khi nó bị đóng. Tôi không chắc làm thế nào cơ chế này hoạt động, nhưng tôi giả định có một khóa liên quan đến một số nơi mà làm cho tập tin chỉ đọc.

0

Nếu bạn muốn tiết kiệm tại địa phương, bạn có thể thiết lập các thuộc tính content-description:

header('Content-Description: File Transfer'); 
header('Content-Type: application/vnd.ms-excel'); 
header("Content-Disposition: attachment; filename=" . $filename . ".xls");  

EDIT

Nếu bạn in văn bản phân định tab và thuộc tính content-disposition như xls hoặc csv, ứng dụng Excel (hoặc chương trình khác, như gnumeric hoặc openoffice) nhận ra nó như xls hoặc csv.