PHP - тип файла электронной таблицы только для чтения? - PullRequest
8 голосов
/ 19 июня 2009

Я использую простое веб-приложение PHP, которое выводит таблицу в виде электронной таблицы

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

//inserts tab delimited text

Но я обнаружил, что загруженная электронная таблица открывается как файл только для чтения и должна быть сохранена локально, а тип (в Excel в Windows) изменен на XLS (из HTML). Есть ли способ правильно установить атрибут filetype, чтобы простое сохранение не требовало исправления типа файла?

Файл загружен только для чтения по соображениям безопасности или это не нормально?

Также мне не нравятся автоматические границы, созданные при открытии электронной таблицы в Excel или OpenOffice (в Linux). Я бы предпочел не иметь форматирования границ. Есть ли способ указать в файле не добавленное форматирование или это встроено в эти приложения?

Ответы [ 3 ]

8 голосов
/ 20 июля 2012

Я не знаю, о какой версии Excel вы говорите, поэтому я предполагаю, что вы используете версию 2007 или более новую.

Проблема изменения расширения, вероятно, зависит от функции Office под названием " Extension Hardening "; Насколько я знаю, единственным решением является создание реального файла Excel (например, с использованием набора классов PHPExcel ), а не файла HTML.

Загруженные файлы доступны только для чтения по соображениям безопасности, поскольку они открываются в так называемом « защищенном представлении »:

Файлы из Интернета и других потенциально опасных мест может содержать вирусы, черви или другие вредоносные программы, которые могут нанести вред твой компьютер. Чтобы защитить ваш компьютер, файлы из этих потенциально защищенные места открываются в режиме защищенного просмотра. Используя Защищенный просмотр, вы можете прочитать файл и проверить его содержимое во время снижение рисков, которые могут возникнуть.

Наконец, несколько слов о границах и форматировании: в старой версии Excel 2000 вы могли форматировать вывод, просто добавив несколько тегов XML в раздел заголовка HTML-кода; см. « Microsoft Office HTML и XML Reference » для получения дополнительной информации и примеров, но имейте в виду, что он довольно устарел, поэтому я не думаю, что этот метод все еще работает с более свежими версиями Excel.

Если вы хотите иметь больший контроль над сгенерированным выходным сигналом, вам не следует использовать простой HTML для создания файла электронной таблицы.

В этой записи вы также можете найти некоторые альтернативы PHPExcel для записи файлов Excel.

6 голосов
/ 19 июня 2009

AFAIK, по крайней мере в Windows, это зависит от того, что пользователь делает с подсказкой, отображаемой браузером при переходе по ссылке.

Если пользователь решит сохранить файл, он не будет доступен только для чтения. Если пользователь решит открыть его, файл будет сохранен во временный каталог, и браузер может удалить его, когда он будет закрыт. Я не уверен, как работает этот механизм, но я предполагаю, что в каком-то месте присутствует блокировка, которая делает файл доступным только для чтения.

0 голосов
/ 23 июля 2012

Если вы хотите сохранить локально, вы можете установить атрибут content-description:

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

EDIT

Если вы печатаете текст и атрибут с разделителями табуляции content-disposition, такие как xls или csv, Приложение Excel (или другая программа, например gnumeric или openoffice) распознает его как xls или csv.

...