Простой php скрипт, который для конвертации эксель файла (xls) в JSON. Использует phpoffice/phpspreadsheet
Php скрипт для конвертации XLSX в JSON и обратно
22.03.2022
Еще есть набор примеров: Работа с XLSX через библиотеку phpoffice/phpspreadsheet
Методы класса:
xl2json - конвертация Эксель файла в JSON
$sInFile - имя эксель файла, может быть как XSLX так и XLS.
$sOutFile - имя выходного JSON файла.
$sEmpty - на что заменять пустые поля.
$bTrim - удалять пробелы и другие системные символы в начале и конце значения из ячейки.
json2xl - обратная конвертация JSON в XLS
$sInFile - имя JSON файла, может быть как XSLX так и XLS.
$sOutFile - имя выходного Эксель файла.
$bAddOldColNum - выводить ли первым столбцом старые номера строк (из исходного файла).
01_converter.php (Download)
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'On');
require_once('../vendor/autoload.php');
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
class soConverter {
public function xl2json($sInFile, $sOutFile, $sEmpty = '', $bTrim = false)
{
$oSpreadsheet = IOFactory::load($sInFile);
$oCells = $oSpreadsheet->getActiveSheet()->getCellCollection();
$aTMP = [];
for ($iRow = 1; $iRow <= $oCells->getHighestRow(); $iRow++) {
$oTMP = new stdClass();
$oTMP->_row_num = $iRow;
for ($iCol = 'A'; $iCol <= $oCells->getHighestColumn(); $iCol++)
{
$oCell = $oCells->get($iCol.$iRow);
$val = $oCell?$oCell->getValue():'';
if ($bTrim && $val) {
// "\u{00a0}" ==  
$val = trim(str_replace("\u{00a0}", '', $val));
}
if (!$val) {
$val = $sEmpty;
}
$oTMP->$iCol = $val;
}
$aTMP[] = $oTMP;
}
file_put_contents($sOutFile, json_encode($aTMP));
}
public function json2xl($sInFile, $sOutFile, $bAddOldColNum = false)
{
$aRows = json_decode(file_get_contents($sInFile));
$oSpreadsheet = new Spreadsheet();
$oSpreadsheet->setActiveSheetIndex(0);
$iRow = 1;
foreach($aRows as $oRow)
{
$sCol = 'A';
foreach($oRow as $sName => $sVal)
{
// echo $sCol .': '. $sVal . "\n";
if ( (!$bAddOldColNum) && ($sName == '_row_num') ) {
continue;
}
$oSpreadsheet->getActiveSheet()->setCellValue($sCol.$iRow, $sVal);
$sCol++;
}
$iRow++;
}
$oWriter = IOFactory::createWriter($oSpreadsheet, 'Xlsx');
$oWriter->save($sOutFile);
}
}
$oConverter = new soConverter();
// $sInFile = 'FORMAT_OLD.xls';
$sInFile1 = 'FORMAT_NEW.xlsx';
$sOutFile1 = 'out_01.json';
//$oConverter->xl2json($sInFile1, $sOutFile1, '---', true);
$sInFile2 = $sOutFile1;
$sOutFile2 = 'result.xlsx';
//$oConverter->json2xl($sInFile2, $sOutFile2, true);