PHP-読み取り専用スプレッドシートのファイルタイプ?
-
06-07-2019 - |
質問
表をスプレッドシートとして出力するシンプルなWebベースのPHPアプリケーションを使用しています
header("Content-Disposition: attachment; filename=" . $filename . ".xls");
header("Content-Type: application/vnd.ms-excel");
//inserts tab delimited text
しかし、ダウンロードしたスプレッドシートは読み取り専用ファイルとして開くので、ローカルに保存し、(WindowsのExcelで)タイプをXLS(HTMLから)に変更する必要があります。単純な保存を行うのにファイルタイプを修正する必要がないように、ファイルタイプの属性を正しく設定する方法はありますか?
セキュリティの性質上、ダウンロードされたファイルは読み取り専用ですか、それとも通常ではありませんか?
また、スプレッドシートをExcelまたはOpenOffice(Linux)で開くときに作成される自動境界線も気に入らない。私は境界線の書式設定を望まないでしょう。ファイル内に追加のフォーマットを指定しない方法はありますか、それともそれらのアプリケーションに組み込まれていますか?
解決
お使いのExcelのバージョンがわからないので、2007以降のバージョンを使用していると思われます。
拡張機能の変更の問題は、おそらく" 拡張強化&quot ;;私の知る限り、唯一の解決策は、実際のExcelファイルを生成することです(たとえば、 PHPExcel を使用してクラスのセット)、およびHTMLファイルではありません。
ダウンロードされたファイルは、いわゆる" 保護されたビュー":
インターネットおよびその他の潜在的に安全でない場所からのファイル ウイルス、ワーム、または他の種類のマルウェアが含まれている可能性があります。 お使いのコンピューター。コンピューターを保護するために、これらのファイル 安全でない可能性のある場所は、保護されたビューで開かれます。を使用して 保護されたビューでは、ファイルを読み取り、その内容を検査できます 発生する可能性のあるリスクを減らします。
最後に、境界線とフォーマットに関する単語:古いExcel 2000バージョンでは、HTMLコードのヘッダーセクションにいくつかのXMLタグを追加するだけで出力をフォーマットできました。 " Microsoft Office HTMLおよびXMLリファレンス"詳細と例については、しかし、それはかなり時代遅れであることに留意してください。そのため、この手法がより新しいExcelバージョンでまだ機能するとは思いません。
生成される出力をさらに制御したい場合は、スプレッドシートファイルの作成に単純なHTMLを使用しないでください。
この投稿では、Excelファイルを作成するためのPHPExcelの代替手段も見つけることができます。
他のヒント
AFAIK、少なくともWindowsでは、ユーザーがリンクをたどったときにブラウザに表示されるプロンプトで何をするかによって異なります。
ユーザーがファイルの保存を選択した場合、読み取り専用にはなりません。ユーザーがファイルを開くことを選択した場合、ファイルは一時ディレクトリに保存され、ブラウザは閉じられたときに削除する場合があります。このメカニズムがどのように機能するかはわかりませんが、ファイルを読み取り専用にする何らかの場所にロックが関係していると想定しています。
ローカルに保存する場合は、属性 content-description
を設定できます:
header('Content-Description: File Transfer');
header('Content-Type: application/vnd.ms-excel');
header("Content-Disposition: attachment; filename=" . $filename . ".xls");
編集
xlsやcsvなどのタブ区切りテキストと属性 content-disposition
を印刷する場合、
Excelアプリケーション(またはgnumericやopenofficeなどの他のプログラム)は、xlsやcsvのように認識します。