Reputation: 668
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
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
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