PHPExcel未正确写入文件
我的网站允许用户上传PHPExcel未正确写入文件,php,phpexcel,forms,Php,Phpexcel,Forms,我的网站允许用户上传.xls、.xlsx和.csv文件。如果文件不是.csv,它将转换为一个文件并保存到服务器。问题是我的代码没有保存文件。相反,它只保存一个空白单元格。我的代码有什么问题,如何编辑它以使其完成我寻求的任务 require_once('Classes/PHPExcel/IOFactory.php'); require_once("mcl_Oci.php"); $filename = $_FILES['uploaded']['name']; $ext = pathinfo($fi
.xls
、.xlsx
和.csv
文件。如果文件不是.csv
,它将转换为一个文件并保存到服务器。问题是我的代码没有保存文件。相反,它只保存一个空白单元格。我的代码有什么问题,如何编辑它以使其完成我寻求的任务
require_once('Classes/PHPExcel/IOFactory.php');
require_once("mcl_Oci.php");
$filename = $_FILES['uploaded']['name'];
$ext = pathinfo($filename, PATHINFO_EXTENSION);
if ($_FILES['uploaded']['error'] !== UPLOAD_ERR_OK) {
die("Upload failed with error code #" . $_FILES['uploaded']['error']);
}
if($ext == 'xls') {
$inputFileType = 'Excel5';
$inputFileName = $_FILES['uploaded']['tmp_name'];
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objPHPExcelReader = $objReader->load($inputFileName);
$loadedSheetNames = $objPHPExcelReader->getSheetNames();
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcelReader, 'CSV');
$objWriter->setSheetIndex($sheetIndex);
$objWriter->save('abc.csv'); //THIS IS WHERE IT ERRORS//
$files = fopen('abc.csv', 'r');
while (($line = fgetcsv($files)) !== FALSE) {
$csv_array[] = array_combine(range(1, count($line)), array_values($line));
}
echo 'Your .xls file was uploaded successfully. Have a nice day.';
} elseif($ext == 'csv'){
$inputFileType = 'CSV';
$inputFileName = $_FILES['uploaded']['tmp_name'];
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objPHPExcelReader = $objReader->load($inputFileName);
$loadedSheetNames = $objPHPExcelReader->getSheetNames();
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcelReader, 'CSV');
$objWriter->save('abc.csv');
$files = fopen('abc.csv', 'r');
while (($line = fgetcsv($files)) !== FALSE) {
$csv_array[] = array_combine(range(1, count($line)), array_values($line));
}
echo 'Your .csv file was uploaded successfully. Have a nice day.';
} elseif($ext == 'xlsx') {
$inputFileType = 'Excel2007';
$inputFileName = $_FILES['uploaded']['tmp_name'];
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objPHPExcelReader = $objReader->load($inputFileName);
$loadedSheetNames = $objPHPExcelReader->getSheetNames();
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcelReader, 'CSV');
$objWriter->save(str_replace('.xlsx', '.csv', $inputFileName));
$objWriter->save('abc.csv');
$files = fopen('abc.csv', 'r');
while (($line = fgetcsv($files)) !== FALSE) {
$csv_array[] = array_combine(range(1, count($line)), array_values($line));
}
echo 'Your .xlsx file was uploaded successfully. Have a nice day.';
}
else {
echo "This is not an accepted file type. Please save as either '*.csv' or '*.xls' and re-upload.";
}
更新
我的代码完全适用于.csv
文件。但是,它不适用于.xls
或.xlsx
此
if($ext='xls') {
正在进行分配,使所有文件成为xls
。应该是
if($ext == 'xls') {
^^---note the doubled "=" signs.
在所有if()
测试中,都会出现完全相同的错误
同样,您似乎从来没有检查文件上传是否成功,这是一件非常糟糕的事情。永远不要假设成功。始终假定失败,并将成功视为惊喜:
if ($_FILES['uploaded']['error'] !== UPLOAD_ERR_OK) {
die("Upload failed with error code #" . $_FILES['uploaded']['error']);
}
这是最终允许我上传单张
.xlsx
、.xls
和.csv
文件的代码。上传后,如OP中所述,我将任何.xlsx
或.xls
转换为.csv
,并将其保存到目录中
require_once('Classes/PHPExcel/IOFactory.php');
require_once("mcl_Oci.php");
$filename = $_FILES['uploaded']['name'];
$ext = pathinfo($filename, PATHINFO_EXTENSION);
if ($_FILES['uploaded']['error'] !== UPLOAD_ERR_OK) {
die("Upload failed with error code #" . $_FILES['uploaded']['error']);
}
if($ext == 'xls') {
$inputFileType = 'Excel5';
$inputFileName = $_FILES['uploaded']['tmp_name'];
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objPHPExcelReader = $objReader->load($inputFileName);
$loadedSheetNames = $objPHPExcelReader->getSheetNames();
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcelReader, 'CSV');
$objWriter->save(str_replace('.xls', '.csv', $inputFileName));
$objWriter->save('abc.csv');
$files = fopen('abc.csv', 'r');
while (($line = fgetcsv($files)) !== FALSE) {
$csv_array[] = array_combine(range(1, count($line)), array_values($line));
}
echo 'Your .xls file was uploaded successfully. Have a nice day.';
} elseif($ext == 'csv'){
$inputFileType = 'CSV';
$inputFileName = $_FILES['uploaded']['tmp_name'];
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objPHPExcelReader = $objReader->load($inputFileName);
$loadedSheetNames = $objPHPExcelReader->getSheetNames();
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcelReader, 'CSV');
$objWriter->save('abc.csv');
$files = fopen('abc.csv', 'r');
while (($line = fgetcsv($files)) !== FALSE) {
$csv_array[] = array_combine(range(1, count($line)), array_values($line));
}
echo 'Your .csv file was uploaded successfully. Have a nice day.';
} elseif($ext == 'xlsx') {
$inputFileType = 'Excel2007';
$inputFileName = $_FILES['uploaded']['tmp_name'];
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objPHPExcelReader = $objReader->load($inputFileName);
$loadedSheetNames = $objPHPExcelReader->getSheetNames();
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcelReader, 'CSV');
$objWriter->save(str_replace('.xlsx', '.csv', $inputFileName));
$objWriter->save('abc.csv');
$files = fopen('abc.csv', 'r');
while (($line = fgetcsv($files)) !== FALSE) {
$csv_array[] = array_combine(range(1, count($line)), array_values($line));
}
echo 'Your .xlsx file was uploaded successfully. Have a nice day.';
}
else {
echo "This is not an accepted file type. Please save as either '*.csv' or '*.xls' and re-upload.";
}
然而,问题仍然存在。谢谢你!你看到其他问题了吗?很难说。你似乎在练习“随机缩进”学派的代码格式,所以你的代码很难理解。哈哈,不,我使用的FTP不容易复制/粘贴代码xD。我将使用JSFIDLE清理并重新更新代码哈哈!SorryUpdated,我还添加了错误消息-似乎没有任何作用。您的csv
fopen()
在xls部分中,因此如果您正在处理csv,$files
永远不会被设置,您的fgetcsv将失败并返回布尔值false。不要假设带有.xls
的文件是Excel文件,它很可能是一个csv或html文件,只是被赋予了扩展名.xls。。。。使用PHPExcel\u IOFactory::identify()
找出文件类型的真正含义,并基于此创建读取器,而不是假设上传者“做对了”。好的,在我的网站的这一部分最终发布之前,我肯定会根据这些信息进行更新。但是,鉴于我正在从Microsoft Excel创建.xls
,这是否意味着无论发生什么情况,该文件都是正确的?因此,它不应该是错误的。您在$loadedSheetNames中的循环正在为每个工作表保存到同一个csv文件中(即使集合中的最后一个工作表为空)^^当我删除$loadedSheetNames部分时,它的工作方式是预期的!非常感谢你,马克·贝克。现在只有错误致命错误:对.xls
文件的第128行中的非对象调用成员函数getHighestDataColumn(),很难简单地说“停止运行您需要工作的基本功能”并期望工作正常:有点像从车中取出发动机,因为它会发出噪音,但仍然期待着这辆车能开。。。。如果没有更多的细节,我无法解决这个问题,也许堆栈转储或类似的方法可能会有所帮助。。。。至少,我需要知道您的代码在错误发生时正在做什么