web-dev-qa-db-ja.com

'ファイル名062014.xlsxはOLEファイルとして認識されません'

私はExcelを扱う複雑なプログラムに取り組んでいるので、PHPExcelを使用してブラウザーからExcelファイルを検索および編集しています。私の問題はプログラムの編集部分にあるので、既存のExcelページを編集するための基本的なプログラムを作成しました。 PHPExcelはExcelで作成されたファイルをExcelファイルとして認識していないようです。これは、Excelで作成したExcelページを使用して自分のサーバーで実行されます。ファイル名は062014.xlsxです。 HTML側では、テキストボックスにC3、D3、およびE3という名前を付けたので、それらの名前はExcelセル(php $ cell変数の由来)に簡単に対応します。私がやりたいのは、htmlテキストボックスのテキストを取得し、Excelの対応するセルをhtmlテキストボックスのデータで書き換えることです。投稿されたのはhtmlとphpからの私のコード全体です。誰かが私のプログラムがどこでうまくいかないのか教えてくれたら、私はそれを大いに感謝します。

<html>
<head>


<form method="POST" action="lilrevisetest.php" id="excelform">

<input type="text" value="foo" name="C3" />
    <input type="text" value="foo" name="D3" />
    <input type="text" value="foo" name="E3" />
<button type="submit">Submit</button>
</form>


</body>
</html>




<body>
 <html>


<?php

include 'PHPExcel/IOFactory.php';
 $n=1;
 $x="C";
 $y=1;


 $file = "062014.xlsx";


  $inputFileType = PHPExcel_IOFactory::identify($file);
 $inputFileType = 'Excel5';
 $objReader = PHPExcel_IOFactory::createReader($inputFileType);
 $objReader->setReadDataOnly(false);

  $objPHPExcel = $objReader->load($file);

  $objWorksheet = $objPHPExcel->getActiveSheet();
  $fileObj = fopen("$file", "rt" );


   $y = 3; 
   $x= "C";

   for($n=1; $n<4; $n++){
    $cell = $x . $y; 

    echo $cell; 
    if (isset($_POST[$cell])){
    $string = ($_POST[$cell]);
       $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, $inputFileType);

      $objWorksheet ->setCellValue("$cell","$string");
      $objWriter->save($file);
 }
 echo "<td> <input type ='text' value= '$string' name = '$cell'/></td>";
     $x= ++$x;
}

?>

      </html>
   </body>
8
Demosthenes

_Excel5_(BIFF形式)リーダーを使用してxlsxファイル(OfficeOpenXML形式)を読み込もうとしています。

_$inputFileType = 'Excel5';
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
_

ロードしようとしているファイルタイプに適したリーダーを使用する必要があります。そうしないと、エラーが発生します。

あなたはすでに使用しました

_$inputFileType = PHPExcel_IOFactory::identify($file);
_

ファイルタイプと使用する正しいリーダーを特定するために、なぜこれを無視して手動で(そして誤って)自分で設定するのですか?


さらに

もう1つの問題は、ファイルを保存しようとしたときにファイルがすでに開いているという事実である可能性があります。

PHPExcelローダーを使用して_$file_(_062014.xlsx_)をロードしています。問題ありません。

なんらかの理由で、実行します

_$fileObj = fopen("$file", "rt" );
_

_$fileObj_は何もしませんが、これを行うと開いたままになります

$objWriter->save($file);を使用して保存しようとすると、ファイルは開いたままになるため、保存は失敗します(ファイル名とは関係なく、ファイルが開いているという事実だけです)。

解決策は、行を削除するのと同じくらい簡単です

_$fileObj = fopen("$file", "rt" );
_
22
Mark Baker