За последние 24 часа нас посетили 17396 программистов и 1872 робота. Сейчас ищут 1757 программистов ...

PHPExcel. Проблема c русскими словами

Тема в разделе "Прочие вопросы по PHP", создана пользователем Guliver, 9 июн 2015.

  1. Guliver

    Guliver Новичок

    С нами с:
    26 июн 2013
    Сообщения:
    72
    Симпатии:
    0
    Привет всем. С помощью библиотеки PHPExcel выгружаю данные из базы в файл Excel. Все бы хорошо, только вот вместо русских слов в ячейку прописывается ("ЛОЖЬ"). C англ. проблем нет. Вот собственно действующий пример:
    http://missatomstroy.ru/phpexcel.php?do=1 Пробовал делать как написано в документации:

    Код (PHP):
    1. $locale = 'ru';
    2. $validLocale = PHPExcel_Settings::setLocale($locale);
    3. if (!$validLocale) {
    4.     echo 'Unable to set locale to '.$locale." - reverting to en_us<br />\n";
    5. }
    6.  
    Не помогло. В чем может быть проблема?

    Вот полностью скрипт

    Код (PHP):
    1. <?php
    2. //Скачать библиотеку - http://phpexcel.codeplex.com/
    3. //Нашел русскую документацию - http://www.cyberforum.ru/php-beginners/thread1074684.html
    4. //Подключаем скачаную библиотеку
    5. /** Error reporting */
    6.  
    7. include("php-excel/Classes/PHPExcel.php");
    8.  
    9. ini_set('display_errors', TRUE);
    10. ini_set('display_startup_errors', TRUE);
    11. date_default_timezone_set('Europe/Moscow');
    12.  
    13. $locale = 'ru';
    14. $validLocale = PHPExcel_Settings::setLocale($locale);
    15. if (!$validLocale) {
    16.      die ("No valid locale".$locale);
    17. }
    18.  
    19. if($_GET['do']==1){
    20.      //Запрос и выборка данных из базы
    21.     //В моем примере я подключаюсь к базе MS SQL
    22.     //В Вашем примере вы указываете свое подключение MySQL\MS SQL\Postgree...
    23.  
    24.     /* проверка соединения */
    25.     if ($mysqli->connect_errno) {
    26.         printf("Соединение не удалось: %s\n", $mysqli->connect_error);
    27.         exit();
    28.     }
    29.  
    30.     $sql = "select `surname`, `name`, `patronymic` from `participants`";
    31.  
    32.     if ($result = $mysqli->query($sql)) {
    33.         
    34.     $l = array();    
    35.  
    36.     /* извлечение ассоциативного массива */
    37.     while ($r = $result->fetch_assoc()) {
    38.        $l[] = $r;
    39.  
    40.     }
    41.  
    42.     //------------------------------------
    43.     //1 Часть: запись в файл
    44.  
    45.     //Создание объекта класса библиотеки
    46.     $objPHPExcel = new PHPExcel();
    47.  
    48.     //Указываем страницу, с которой работаем (листы Excel)
    49.     $objPHPExcel->setActiveSheetIndex(0);
    50.  
    51.     //Получаем страницу, с которой будем работать
    52.     $active_sheet = $objPHPExcel->getActiveSheet();
    53.  
    54.     //Создание новой страницы(пример)
    55.     //$objPHPExcel->createSheet();
    56.  
    57.     //Ориентация и размер страницы
    58.     // $active_sheet->getPageSetup()
    59.         // ->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_PORTRAIT); // портретная ориентация
    60.     $active_sheet->getPageSetup()
    61.         ->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE); // Ориентация страницы
    62.     $active_sheet->getPageSetup()
    63.         ->setPaperSize(PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4); // размер страницы формат А4
    64.         
    65.     //Имя страницы Excel
    66.     $active_sheet->setTitle("Заявки");
    67.         
    68.     //Ширина стобцов (указываем букву столбца и ширину в пикселях)
    69.     $active_sheet->getColumnDimension('A')->setWidth(20);
    70.     $active_sheet->getColumnDimension('B')->setWidth(20);
    71.     $active_sheet->getColumnDimension('C')->setWidth(50);
    72.  
    73.     //Объединение ячеек (указываем диапазон объединения ячеек)
    74.     $active_sheet->mergeCells('A1:C1');    
    75.  
    76.     //Высота строки (также как и ширина столбцов указывается высота строки в пикселях)
    77.     $active_sheet->getRowDimension('1')->setRowHeight(30);
    78.  
    79.     //Вставить данные(примеры)
    80.     //Нумерация строк начинается с 1, координаты A1 - 0,1
    81.     $active_sheet->setCellValueByColumnAndRow(0, 1, 'Сегодня '.date('d-m-Y'));
    82.     $active_sheet->setCellValue('A3', 'Фамилия');
    83.     $active_sheet->setCellValue('B3', 'Имя');
    84.     $active_sheet->setCellValue('C3', 'Отчество');
    85.  
    86.     //Вставка данных из выборки
    87.     $start = 4;
    88.     $i = 0;
    89.     foreach($l as $row_l){
    90.         $next = $start + $i;
    91.         
    92.         $active_sheet->setCellValueByColumnAndRow(0, $next, $row_l['surname']);
    93.         $active_sheet->setCellValueByColumnAndRow(1, $next, $row_l['name']);
    94.         $active_sheet->setCellValueByColumnAndRow(2, $next, $row_l['patronymic']);
    95.         
    96.         $i++;
    97.     };
    98.     //Сохраняем файл с помощью PHPExcel_IOFactory и указываем тип Excel
    99.     $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
    100.     
    101.     //Отправляем заголовки с типом контекста и именем файла
    102.     header('Content-Type:application/vnd.ms-excel');
    103.     header('Content-Disposition:attachment;filename="applications.xlsx"');
    104.  
    105.     ob_end_clean(); 
    106.         
    107.     //Отправляем файл
    108.     $objWriter->save('php://output');
    109.     
    110.     /* удаление выборки */
    111.     $result->free();
    112. }
    113.  
    114.     /* закрытие соединения */
    115.     $mysqli->close();
    116.     
    117.     
    118.  
    119.     
    120.     
    121. };
    122.  
    123.  
    124.  
    125. ?>
    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  3. Guliver

    Guliver Новичок

    С нами с:
    26 июн 2013
    Сообщения:
    72
    Симпатии:
    0
    не помогает

    Добавлено спустя 51 минуту 54 секунды:
    Все решилось следующим образом:

    Код (Text):
    1. $mysqli->set_charset("utf8");
    Всем спасибо.
     
  4. mr.akv

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

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Следующим образом должно не "всё решаться", а "быть законом всея".