###実現したいこと
Windows Server上でExcelファイルをオープンし、ExcelのPDF化する機能をCOMを使ってPDF化するプログラムを作成しています。
php
1 $excel_path = 'C:\data\test.xlsx'; 2 $pdf_path = str_replace('.xlsx', '.pdf', $excel_path); 3 try { 4 $excel = new COM("Excel.Application"); 5 $wkb = $excel->Workbooks->Open($excel_path); 6 $xlTypePDF = 0; 7 $xlQualityStandard = 0; 8 $wkb->ExportAsFixedFormat($xlTypePDF, $pdf_path, $xlQualityStandard); 9 $wkb->Close(); 10 $excel->Quit(); 11 unset($wkb); 12 unset($excel); 13 } catch (com_exception $e) { 14 if (isset($wkb)) unset($wkb); 15 if (isset($excel)) unset($excel); 16 echo mb_convert_encoding($e->getMessage(), 'UTF-8', 'SJIS')."\n"; 17 }
開発環境であるローカルマシンにて上記コードを含むPHPを実行すると、指定したExcelファイルがPDF化されます。
ですが、サーバ環境へアップすると下記エラーが発生しPDF化しません。
Source: Microsoft Excel Description: ファイル 'C:\data\test.xlsx' にアクセスできません。次のいずれかの理由が考えられます。 ? ファイル名またはパスが存在しません。 ? ファイルが他のプログラムによって使用されています。 ? 保存しようとしているブックと同じ名前のブックが現在開かれています。
サーバ上のみExcelでファイルを開こうとするとエラーになるのですが、何が原因か皆目見当がつきません。
LibreofficeだとPDF化した際に崩れてしまうので、できればExcelでPDF化したいと考えております。
お知恵を貸していただけないでしょうか。
###試したこと
開発環境のApacheおよびPHPが32bit版なのに対し、サーバのApacheおよびPHPが64bitでしたため、開発環境とあわせるようにサーバ側のApache・PHPを32bit版にしてみましたがまったく改善しませんでした。
また、サーバ側のExcelファイルがあるフォルダへ「Everyone」「フルコントロール」をつけてみましたが改善しませんでした。
サーバ側のExcelファイルを開いてみましたが、問題なく開きます。実行時にExcelで該当のファイルを開いていることもありません。
※PHPの実行は、いずれも設置した端末のブラウザから、localhostの該当URLをたたいて実行しています。
###補足情報(言語/FW/ツール等のバージョンなど)
開発環境:
Apache/2.4.23 (Win32) OpenSSL/1.0.2h PHP/5.6.28
Microsoft Excel 2010
Windows 10(64bit)
サーバ環境:
Apache/2.4.25 (Win32) OpenSSL/1.0.2j PHP/5.6.31
Microsoft Excel 2010
Windows Server 2012 R2
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。