1

Currently I have a Class for export to excel, it works perfect for English, however, in other encode , e.g. Chinese character it is wrong encoded

https://github.com/bcit-ci/CodeIgniter/wiki/Export-to-Excel-2013

<?php
if (!defined('BASEPATH'))
    exit('No direct script access allowed');

/*
 * Excel library for Code Igniter applications
 * Based on: Derek Allard, Dark Horse Consulting, www.darkhorse.to, April 2006
 * Tweaked by: Moving.Paper June 2013
 */

class Export {

    function to_excel($array, $filename) {
        header('Content-type: application/vnd.ms-excel');
        header('Content-Disposition: attachment; filename=' . $filename . '.xls');

        //Filter all keys, they'll be table headers
        $h = array();
        foreach ($array->result_array() as $row) {
            foreach ($row as $key => $val) {
                if (!in_array($key, $h)) {
                    $h[] = $key;
                }
            }
        }
        //echo the entire table headers
        echo '<table><tr>';
        foreach ($h as $key) {
            $key = ucwords($key);
            echo '<th>' . $key . '</th>';
        }
        echo '</tr>';

        foreach ($array->result_array() as $row) {
            echo '<tr>';
            foreach ($row as $val)
                $this->writeRow($val);
        }
        echo '</tr>';
        echo '</table>';
    }

    function writeRow($val) {
        echo '<td>' . utf8_decode($val) . '</td>';
    }

}

Attempted add the

header("Content-type: text/html; charset=utf-8");

at the starting of the function but no luck

Thanks a lot for helping.

2 Answers 2

2

Instead of a custom class, used PHPExcel and works perfectly

$this->load->library('PHPExcel');
        $this->load->library('PHPExcel/IOFactory');

        $objPHPExcel = new PHPExcel();
        $objPHPExcel->getProperties()->setTitle("Trial Report");

        // Assign cell values
        $objPHPExcel->setActiveSheetIndex(0);

        //Filter all keys, they'll be table headers
        $h = array();
        foreach ($result as $row) {
            foreach ($row as $key => $val) {
                if (!in_array($key, $h)) {
                    $h[] = $key;
                }
            }
        }

        //Writing the first header row
        foreach ($h as $key => $val) {
            $val = ucwords($val);
            $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($key, 1, $val); //first row is 1
        }

        $pos = 0;
        foreach ($result as $r_key => $row) {
            foreach ($row as $col) {
                $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($pos, ($r_key + 2), $col); //skip the first row
                $pos++;
            }
            $pos = 0;
        }

        $objWriter = IOFactory::createWriter($objPHPExcel, 'Excel5');

        header('Content-type: application/vnd.ms-excel');
        header('Content-Disposition: attachment; filename="export.xls"');
        $objWriter->save('php://output');
Sign up to request clarification or add additional context in comments.

Comments

1

For Chinese Traditional (Big5)

header("Content-type: text/html; charset=big5");

few more :

Chinese Simplified (EUC)
    ##charset=EUC-CN 
Chinese Simplified (GB2312)
    ##charset=gb2312 
Chinese Simplified (HZ)
    ##charset=hz-gb-2312 
Chinese Simplified (Mac)
    ##charset=x-mac-chinesesimp 
Chinese Traditional (Big5)
    ##charset=big5 
Chinese Traditional (CNS)
    ##charset=x-Chinese-CNS 
Chinese Traditional (Eten)
    ##charset=x-Chinese-Eten 
Chinese Traditional (Mac)
    ##charset=x-mac-chinesetrad 
    ##charset=950 

here is some fixing details and how to tut ...

8 Comments

Thanks for helping. Added but no luck, still showing "??" for Chinese character
bro, try all chinese charset i added , u might me having some other chinses lang out of these
read from the link i addded , it has got huge tutorial over charset usage
link :chinesetop100.com header : <META http-equiv=Content-Type content="text/html; charset=gb2312"> it's hit and trail , there are 7/8 charset try all for it.no utf8 will not
yes there is a way to check , phpmyadmin allow to export in various formats , export for excel and see whats the result
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.