За последние 24 часа нас посетили 21586 программистов и 1018 роботов. Сейчас ищут 697 программистов ...

Определение типов данных ячеек PHP EXCEL

Тема в разделе "Сделайте за меня", создана пользователем taretastrong, 15 июн 2021.

  1. taretastrong

    taretastrong Новичок

    С нами с:
    15 июн 2021
    Сообщения:
    1
    Симпатии:
    0
    Есть конвертер, берёт хтмл страницу, вырезает оттуда таблицы и пихает их в эксель файл. Он сейчас умеет определять формулы сумм и разметку страницы. Осталось только типы ячеек (процентный, дата и т.д.). Вот с этим проблема, не могу сделать. Подскажите как лучше реализовать? Желательно листингом

    /*========================== РАЗДЕЛ КОДА ==============================*/
    //Задать активный лист (ExcelPage)
    $ExcelFile->setActiveSheetIndex($NumberList);
    $ExcelPage = $ExcelFile->getActiveSheet();

    //Бесполезные настройки но пусть будет
    $ExcelPage->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_PORTRAIT);
    $ExcelPage->getPageSetup()->SetPaperSize(PHPExcel_Worksheet_PageSetup::pAPERSIZE_A4);
    $ExcelPage->setTitle("Таблица ");

    //Настройки шрифта
    $ExcelFile->getDefaultStyle()->getFont()->setName('Times new roman');
    $ExcelFile->getDefaultStyle()->getFont()->setSize(8);

    // Заполнить лист EXCEL данными

    //Получить содержимое первой HTML-таблицы
    $tableContent = TagContent($htmlCode, "table");

    //Отрезать от входного для программы HTML-кода, уже сохранённую в EXCEL-файл таблицу
    $htmlCode = delFirstTable($htmlCode);

    $numberNowString = 1; //Номер текущей, рассматриваемой строки таблицы

    //Разбор HTML-таблицы на строки
    while (stripos($tableContent, $openTag."tr")!== false) {
    //Получить содержимое текущей, исследуемой строки таблицы
    $ContentNowString = TagContent($tableContent,"tr");

    //Отрезать от содержимого таблицы первую строку
    $tableContent = substr($tableContent, strpos($tableContent, "/tr".$closeTag)+3, strlen($tableContent)-strpos($tableContent, "/tr".$closeTag)+3);

    // Сброс номера изменяемой ячейки строки на ноль
    $numberCellOfString = 0;

    //---Для формул. Количество ячеек в строке
    $CellCount=CountCells($ContentNowString);

    //---Для формул. Переменная суммы значений строки таблицы
    $sum=0;

    //---Для формул. Счётчик номеров обрабатываемых ячеек строки
    $WhileCounter_forCells=0;

    //Разбор текущей строки таблицы на ячейки
    while (stripos($ContentNowString, $openTag."td")!== false) {
    //Позиция ячейки в строке
    $WhileCounter_forCells++;

    //Получить значение ячейки таблицы
    $contentCell = Cell_Content($ContentNowString);


    //---Для формул. Если это не последняя ячейка строки
    if($WhileCounter_forCells < $CellCount){
    //---Для формул. Подсчитываем сумму значений ячеек строки
    $sum=$sum+$contentCell;
    }else{
    //---Для формул. Если текущая ячейка последняя в строке, то сравниваем её с суммой значений ячеек строки
    if($sum==$contentCell)
    {
    //---Для формул. Заменяем значение ячейки на формулу суммы строки
    $contentCell='=SUM(A'.$numberNowString.':'.Conv($WhileCounter_forCells -2).$numberNowString.')';
    }
    }



    //Получить значение свойства Colspan (объединение ячеек по горизонтали)
    $N_Colspan = Cell_Properties($ContentNowString,'colspan');

    //Отрезать от содержимого строки считанную ячейку
    $ContentNowString = substr($ContentNowString, strpos($ContentNowString, "/td".$closeTag)+3, strlen($ContentNowString)-strpos($ContentNowString, "/td".$closeTag)+3);

    //Пишем значение в ячейку
    $ExcelPage->setCellValue(Conv($numberCellOfString).$numberNowString, $contentCell);

    //Если текущая ячейка объединяется с другими по горизонтали
    if($N_Colspan>0){
    //Объединяем ячейки EXCEL-таблицы
    $ExcelPage->mergeCells(Conv($numberCellOfString).$numberNowString.':'.Conv($numberCellOfString+$N_Colspan-1).$numberNowString);
    $numberCellOfString = $numberCellOfString+$N_Colspan-1;
    }

    //Сдвигаем номер рассматриваемой ячейки (нужно для индекса столбца в Excel при записи)
    $numberCellOfString ++;
    } //Конец разбора строки на ячейки

    //Сдвигаем номер рассматриваемой строки (нужно для индекса строк в Excel при записи)
    $numberNowString ++;
    } //Конец разбора таблицы на строки

    $NumberList ++;
    $IsTableOnThisPage = stripos($htmlCode, $openTag."table");

    }
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    1. оформляйте код в теге для кода
    2. прочтите документацию по phpExcel
     
    MouseZver и don.bidon нравится это.
  3. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    858
    Симпатии:
    132
    @ADSoft, ни добавить, ни прибавить!
     
    MouseZver нравится это.