Php скрипт для конвертации XLSX в JSON и обратно

22.03.2022

Простой php скрипт, который для конвертации эксель файла (xls) в JSON. Использует phpoffice/phpspreadsheet

Еще есть набор примеров: Работа с 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}" == &#160;
                    $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);

Категории: PHP, Script / Tool
Яндекс.Метрика