我正在开发一个处理 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>
您正在尝试加载一个xlsx
文件(OfficeOpenXML 格式)使用Excel5
(BIFF 格式)阅读器。
$inputFileType = 'Excel5';
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
您应该为您尝试加载的文件类型使用正确的阅读器,否则您会收到错误。
您已经使用过
$inputFileType = PHPExcel_IOFactory::identify($file);
识别文件类型和要使用的正确阅读器,那么为什么您要忽略这一点并自己手动(错误地)设置它呢?
此外
另一个问题可能是当您尝试保存文件时文件已经打开。
您正在加载$file
(062014.xlsx
)使用 PHPExcel 加载器,没问题。
由于某种未知的原因,您然后执行
$fileObj = fopen("$file", "rt" );
虽然你什么也没做$fileObj
根本没有,但这样做会让它打开
当您尝试使用保存时$objWriter->save($file);
,文件仍然保持打开状态,因此保存将失败(与文件名无关,只是文件处于打开状态)。
解决方案很简单,删除该行即可
$fileObj = fopen("$file", "rt" );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)