我正在处理一个处理Excel的复杂程序,因此我使用
PHPExcel从浏览器中搜索和编辑Excel文件.我的问题出现在程序的编辑部分,所以我编写了一个基本程序来编辑现有的Excel页面.似乎PHPExcel无法将Excel中创建的文件识别为Excel文件.这是在我自己的服务器上使用Excel创建的Excel页面完成的.文件名是062014.xlsx.在HTML方面,我将文本框命名为C3,D3和E3,因此它们的名称很容易与Excel单元格(PHP $cell变量来自)相对应.我想要做的是获取html文本框中的文本,并使用html文本框中的数据重写Excel中的相应单元格.发布是我的整个代码从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>
您正在尝试使用Excel5(BIFF格式)Reader加载xlsx文件(OfficeOpenXML格式).
$inputFileType = 'Excel5'; $objReader = PHPExcel_IOFactory::createReader($inputFileType);
您应该为正在尝试加载的文件类型使用正确的Reader,否则您将收到错误.
你已经习惯了
$inputFileType = PHPExcel_IOFactory::identify($file);
要识别文件类型和正确使用的Reader,那么为什么要忽略这一点并自己手动(并且错误地)设置它?
另外
你正在使用PHPExcel加载器加载$file(062014.xlsx),没问题.
出于某种未知原因,您可以执行
$fileObj = fopen("$file","rt" );
尽管你根本不对$fileObj做任何事情,但这样做会让它保持开放状态
当您尝试使用$objWriter-> save($file);进行保存时,文件仍保持打开状态,因此保存将失败(与文件名无关,只是文件打开的事实).
$fileObj = fopen("$file","rt" );