Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHPExcel未正确写入文件_Php_Phpexcel_Forms - Fatal编程技术网

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(),很难简单地说“停止运行您需要工作的基本功能”并期望工作正常:有点像从车中取出发动机,因为它会发出噪音,但仍然期待着这辆车能开。。。。如果没有更多的细节,我无法解决这个问题,也许堆栈转储或类似的方法可能会有所帮助。。。。至少,我需要知道您的代码在错误发生时正在做什么