Reading spreadsheet using PHPExcel
php, phpexcel
Solution
When a file is uploaded to your webserver, The file will be saved in the temporary folder of your system with a random name.
What you were trying to do was giving the actual `name` of the file you uploaded, But since the file was created with a random name in the tmp folder. You will need to use `tmp_name` instead, Which actually point the that random named file.
Also note, in `name` You only have the name of the file that was uploaded and not the path, But with `tmp_name` you have the actual path to the file.
See the following example of a file upload you would get.
array(
[UploadFieldName]=>array(
[name] => MyFile.jpg
[type] => image/jpeg
[tmp_name] => /tmp/php/php6hst32
[error] => UPLOAD_ERR_OK
[size] => 98174
)
)
change your code to this instead
//Check valid spreadsheet has been uploaded
if(isset($_FILES['spreadsheet'])){
if($_FILES['spreadsheet']['tmp_name']){
if(!$_FILES['spreadsheet']['error'])
{
$inputFile = $_FILES['spreadsheet']['tmp_name'];
$extension = strtoupper(pathinfo($inputFile, PATHINFO_EXTENSION));
if($extension == 'XLSX' || $extension == 'ODS'){
//Read spreadsheeet workbook
try {
$inputFileType = PHPExcel_IOFactory::identify($inputFile);
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objPHPExcel = $objReader->load($inputFile);
} catch(Exception $e) {
die($e->getMessage());
}
//Get worksheet dimensions
$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow();
$highestColumn = $sheet->getHighestColumn();
//Loop through each row of the worksheet in turn
for ($row = 1; $row <= $highestRow; $row++){
// Read a row of data into an array
$rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE);
//Insert into database
}
}
else{
echo "Please upload an XLSX or ODS file";
}
}
else{
echo $_FILES['spreadsheet']['error'];
}
}
}
?>
Problem
I'm trying to upload a spreadsheet and read it into a MySQL database using PHPExcel. For .xlsx files it works fine but whenever I try to upload a .ods file it throws the error: PHP Fatal error: Call to a member function getNamespaces() on a non-object in PHPExcel_1.7.9/Classes/PHPExcel/Reader/OOCalc.php on line 341 What's going wrong? HTML Form: ``` <form method="post" enctype="multipart/form-data"> Upload File: <input type="file" name="spreadsheet"/> <input type="submit" name="submit" value="Submit" /> </form> ``` PHP (In same file): ``` //Check valid spreadsheet has been uploaded if(isset($_FILES['spreadsheet'])){ if($_FILES['spreadsheet']['name']){ if(!$_FILES['spreadsheet']['error']) { $inputFile = $_FILES['spreadsheet']['name']; $extension = strtoupper(pathinfo($inputFile, PATHINFO_EXTENSION)); if($extension == 'XLSX' || $extension == 'ODS'){ //Read spreadsheeet workbook try { $inputFile = $_FILES['spreadsheet']['tmp_name']; $inputFileType = PHPExcel_IOFactory::identify($inputFile); $objReader = PHPExcel_IOFactory::createReader($inputFileType); $objPHPExcel = $objReader->load($inputFile); } catch(Exception $e) { die($e->getMessage()); } //Get worksheet dimensions $sheet = $objPHPExcel->getSheet(0); $highestRow = $sheet->getHighestRow(); $highestColumn = $sheet->getHighestColumn(); //Loop through each row of the worksheet in turn for ($row = 1; $row <= $highestRow; $row++){ // Read a row of data into an array $rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE); //Insert into database } } else{ echo "Please upload an XLSX or ODS file"; } } else{ echo $_FILES['spreadsheet']['error']; } } } ?> ```