За последние 24 часа нас посетили 22197 программистов и 996 роботов. Сейчас ищет 661 программист ...

(проблема с кодировкой) из Access в Excel силой PHPExcel

Тема в разделе "PHP и базы данных", создана пользователем kretsman, 22 сен 2020.

  1. kretsman

    kretsman Новичок

    С нами с:
    7 сен 2018
    Сообщения:
    80
    Симпатии:
    0
    Пытаюсь вытащить из базы Аксеса запросом данные и воткнуть их в эксель, все русские символы превращаются в "ЛОЖЬ". С латиницей и цифрами всё норм.
    код:
    PHP:
    1. require_once 'classes/PHPExcel.php'; // Подключаем библиотеку PHPExcel
    2.        $phpexcel = new PHPExcel(); // Создаём объект PHPExcel
    3.   PHPExcel_Settings::setLocale('ru');
    4.   /* Каждый раз делаем активной 1-ю страницу и получаем её, потом записываем в неё данные */
    5.   $page = $phpexcel->setActiveSheetIndex(0); // Делаем активной первую страницу и получаем её
    6.   $page->setCellValue("A1",'Сводный акт');
    7.   $page->mergeCells("A1:G1");
    8.   $page->setCellValue("A2","инвентаризации наземного оборудования УЭЦН собственности ТПП ПНГ");
    9.   $page->mergeCells("A2:G2");
    10.   $page->mergeCells("A3:G3");
    11.   $page->setCellValue("A3","по состоянию на 01.03.20 по УПО");
    12.   $page->setCellValue("A5","№ п/п");
    13.   $page->setCellValue("B5","Тип эл.оборудования");
    14.   $page->setCellValue("C5","Всего");
    15.   $page->setCellValue("D5","Новое");
    16.   $page->setCellValue("E5","Готовое после ремонта");
    17.   $page->setCellValue("F5","Рем.фонд");
    18.   $page->setCellValue("G5","Всего отдефектовано");
    19.   $page->setCellValue("A6","Станции управления");
    20.   $page->mergeCells("A6:G6");
    21.   $page->setTitle("01.03.2020"); // Заголовок делаем "01.03.2020"
    итог:
    upload_2020-9-22_10-44-6.png

    Читал статьи, понял что проблема с кодировкой, но так и не понял как это исправить...
    Подскажите, если кто понимает что к чему.
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    Ваш php файл должен быть в кодировке utf-8 без BOOM
     
  3. kretsman

    kretsman Новичок

    С нами с:
    7 сен 2018
    Сообщения:
    80
    Симпатии:
    0
    Получилось, но теперь на самой страничке вот такая кракозябрина, что с этим делать?
    После перекодировки в ютф-8 без бом:
    upload_2020-9-22_14-38-34.png

    До перекодировки были таблички и тд и тп)))
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    1. все ваши файлы в проекте желательно должны быть в одной кодировке
    2. У страницы <meta charset=utf-8> ?
     
  5. kretsman

    kretsman Новичок

    С нами с:
    7 сен 2018
    Сообщения:
    80
    Симпатии:
    0
    я честно говоря совершенно не силен в этом вопросе, да было ютф-8, убрал это


    а теперь еще и после серии преобразований кодировки текст просто преквратился в белиберду... что делать то теперь...
     
  6. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    Восстановить из бекапп, он же есть?
    Преобразовывать надо не сериями, а с умом...
    Я не говорил что надо мета убирать, он нужен...
     
  7. kretsman

    kretsman Новичок

    С нами с:
    7 сен 2018
    Сообщения:
    80
    Симпатии:
    0
    да, бэкап конечно есть, всё восстановил, вот теперь не понимаю как добиться искомого результата.

    как сделать с умом чтобы и результат получить и код и не загадить? Прошу прощения за свою недалекость
     
  8. kretsman

    kretsman Новичок

    С нами с:
    7 сен 2018
    Сообщения:
    80
    Симпатии:
    0
    Итак, разобрался в проблеме и нашел решение. Опишу для тех кто ищет решение проблемы подобного плана.

    Если ваша база в Access то вы должны понимать что данные из запросов и вообще при чтении вы будете получать в кодировке Windows-1251, если база старая и наполнена (а у меня именно так), то поменять её кодировку вы не сможете чтобы не потерять данные и не накосячить со структурой.

    В то самое время PHPExcel пихает данные в файлик при записи в той кодировке в которой сделан ваш сайт, а сам файлик жаждет utf-8. От того ваши кириллические символы превратятся в кракозябры.

    Так как наполненная БД частенько бывает важнее чем обрабатывающие её инструменты, сайт надо будет делать с кодировкой базы, а значит нам надо перекодировать записи перед внесением их в экселевский файлик.

    Пример с введенным ручками текстом:
    PHP:
    1. $page->setCellValue("A1", mb_convert_encoding("Сводный акт","UTF-8" , "Windows-1251"));
    Пример с полученными из базы данными через запрос:
    PHP:
    1. $page->setCellValue("B".$hod, mb_convert_encoding(GetSQLfield($row, 'Тип оборудования'),"UTF-8" , "Windows-1251"));