экспорт вывода php как excel - PullRequest
       9

экспорт вывода php как excel

2 голосов
/ 12 августа 2010
include_once 'mysqlconn.php';
include_once "functions.php";
$filename = $_GET['par'].".xls";
header("Content-type: application/x-msexcel"); 
header('Content-Disposition: attachment; filename="'.basename($filename).'"'); 
if ($_GET['i'] == "par1") {
  func1();
} else if ($_GET['i'] == "par2") {
  echo "şşşıııİİİ";
  func2();  
} else if ($_GET['i'] == "par3") {  
  echo "şşşıııİİİ";
  func3();  
} 

это мой файл export2excel.php, а func1,2,3 находятся в файле functions.php и выдают вывод в виде таблицы. Все они работают хорошо, за исключением странного кодирования символов. Я использую кодировку utf-8 для всех своих файлов. Во-вторых, если приведенное выше выражение дает исправный кодированный вывод, а остальные 2 кодируют мой вывод странными символами, такими как «BÃÃTÃ ‡ E ‡ ° ‡ ‡ °». это "BÜT BE İÇİ" на турецком языке.

короче. те же файлы, та же кодировка, та же база данных, но разные результаты.

есть идеи?

Ответы [ 3 ]

19 голосов
/ 12 августа 2010

Excel использует UTF-16LE + BOM в качестве кодировки Unicode по умолчанию.
Таким образом, вам необходимо преобразовать вывод в UTF-16LE и добавить UTF-16LE-BOM "\xFF\xFE".

Некоторая дополнительная информация:

Вместо этого я бы использовал одну из существующих библиотек

Редактировать:
Некоторый код, который может помочь, еслиВы действительно не хотите использовать существующую библиотеку

<?php
$output = <<<EOT
<table>
    <tr>
        <td>Foo</td>
        <td>IñtërnâtiônàlizætiøöäÄn</td>
    </tr>
    <tr>
        <td>Bar</td>
        <td>Перевод русского текста в транслит</td>
    </tr>
</table>
EOT;

// Convert to UTF-16LE
$output = mb_convert_encoding($output, 'UTF-16LE', 'UTF-8'); 

// Prepend BOM
$output = "\xFF\xFE" . $output;

header('Pragma: public');
header("Content-type: application/x-msexcel"); 
header('Content-Disposition: attachment;  filename="utf8_bom.xls"');

echo $output;
1 голос
/ 06 марта 2013

если кто-то пытается использовать excel_writer в moodle и у него возникают проблемы с кодировкой при выводе - скажем, если вы разрабатываете отчет, в котором URL-адрес содержит данные в поле, - то в этом случае я просто решил эту проблему, которую я обернул данные в кавычках, чтобы они как минимум открылись в Excel, вот мой пример:

// Moodles using the PEAR excel_writer export

$table->setup();

$ex=new table_excel_export_format($table);

$ex->start_document( {string} );
$ex->start_table( {string} );

// heading on the spreadsheet
$title = array('Report Title'=>'Report 1');
$ex->add_data($title);
// end heading

$ex->output_headers( array_keys($table->columns) );

**foreach($data as $row){

        $string="'".trim($row->resname,"'")."'";
        $row->resname=$string;
        $ex->add_data( $table->get_row_from_keyed($row) );
}**

$ex->finish_table();
$ex->finish_document();
0 голосов
/ 12 августа 2010

Excel использует UTF-16LE в качестве кодировки по умолчанию.Поэтому вам следует либо самостоятельно конвертировать UTF-8 в UTF-16LE, либо использовать одну из проверенных и проверенных библиотек Excel PHP вместо попытки изобретать велосипед.Я бы рекомендовал использовать PHPExcel ...

...