Ryan_W4588
Ryan_W4588

Reputation: 668

PHPExcel not writing file correctly

My website allows users to upload .xls, .xlsx, and .csv files. If the file is not .csv, it is converted over to one and saves to the server. The problem is that the code I have isn't saving the file. Instead, it is only saving one cell that is blank. What is wrong with my code, and how can I edit it to have it accomplish the task I seek?

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.";
    }       

UPDATE

I have my code working completely for .csv files. However, it does not work for .xls or .xlsx.

Upvotes: 0

Views: 1424

Answers (2)

Ryan_W4588
Ryan_W4588

Reputation: 668

Here is the code that finally allowed me to upload single-sheet .xlsx, .xls, and .csv files. After uploading, as stated in OP, I convert any .xlsx or .xls into .csv and save it into the directory.

    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.";
    }   

Upvotes: 0

Marc B
Marc B

Reputation: 360662

This

if($ext='xls') {

is doing an assigment, making ALL files be xls. It should be

if($ext == 'xls') {
        ^^---note the doubled "=" signs.

You have this exact same error in all of your if() tests.

As well, you don't seem to ever bother checking if the file uploads were successful, which is a very bad thing to do. Never assume success. Always assume failure, and treat success as a pleasant surprise:

if ($_FILES['uploaded']['error'] !== UPLOAD_ERR_OK) {
   die("Upload failed with error code #" . $_FILES['uploaded']['error']);
}

Upvotes: 1

Related Questions