Простой 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);