Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > PHP > PHP Forum > สอบถามเรื่องการใช้งาน PHPExcel มีปัญหาในเรื่องของ charset ค่ะ



 

สอบถามเรื่องการใช้งาน PHPExcel มีปัญหาในเรื่องของ charset ค่ะ

 



Topic : 121973



โพสกระทู้ ( 17 )
บทความ ( 0 )



สถานะออฟไลน์




มีปัญหาเรื่องการออกรายงาน Excel ผ่าน Linux Server เป็นภาษาไทยค่ะ ซึ่งฐานข้อมูลยังเป็นการกำหนด Character Set แบบ TIS-620 อยู่ค่ะ เบื้องต้นลองใช้ iconv รวมทั้งกำหนด mysql_query("SET NAMES tis620") แล้วค่ะ
ลองทำตามกระทู้ของคุณ naskw ตามลิ้งค์นี้แล้ว ก็ยังเป็นปัญหาอยู่ คือพอเอาโค้ดขึ้นบน Server ภาษาก็จะอ่านไม่ออกเหมือนเดิม แต่พอเวลาเทสบนเครื่อง Localhost ก็ออกได้ตามปกติค่ะ

*อันนี้จะเป็นโค้ดไฟล์เทสค่ะ

Code (PHP)
<?php
	header("Content-type: text/html; charset=tis-620");
/** Include PHPExcel */
require_once '../PHPexcel/Classes/PHPExcel.php';

// Create new PHPExcel object
$objPHPExcel = new PHPExcel();
//+ FONT SIZE
$objPHPExcel->getDefaultStyle()->getFont()->setSize(11);

$objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('A1', 'Hello')
            ->setCellValue('B1', 'ภาษาไทย')
            ->setCellValue('C1', ''.iconv('TIS-620','UTF-8','ภาษาไทยทดสอบ').'')
            ->setCellValue('E1', 'ทดสอบภาษาไทย');
			$objPHPExcel->setActiveSheetIndex()->setCellValue('A4', 'ทดสอบ'); 
			$objPHPExcel->setActiveSheetIndex()->setCellValue('B4', ''.iconv('TIS-620','UTF-8','ทดสอบ').''); 

// Rename sheet
$objPHPExcel->getActiveSheet()->setTitle('Demo01');

// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);

// Redirect output to a client’s web browser (Excel5)
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="01demo.xls"');
header('Cache-Control: max-age=0');
// If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');

// If you're serving to IE over SSL, then the following may be needed
header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header ('Pragma: public'); // HTTP/1.0

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
exit;
?>

ผลที่กำหนด head เป็น tis-620 ที่รันผ่านเครื่อง localhost ถ้าไม่ใช้ iconv ภาษาไทยจะไม่ออกค่ะ

ผลของ excel

ส่วนอันนี้จะเป็นผลจาก server ค่ะ

ผลserver

รบกวนขอคำแนะนำหน่อยนะคะ ขอบคุณมากค่ะ



Tag : PHP, Excel (Excel.Application)







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2016-03-17 10:10:45 By : maimaiphnthp View : 3931 Reply : 8
 

 

No. 1



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

ปกติมันน่าจะรองรับแค่ UTF-8 นะครับ หรือไม่ลอง iconv() ให้เป็น TIS-620 ดูครับ






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-03-17 11:29:25 By : mr.win
 


 

No. 2



โพสกระทู้ ( 17 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 1 เขียนโดย : mr.win เมื่อวันที่ 2016-03-17 11:29:25
รายละเอียดของการตอบ ::
ลองเซฟเป็น utf-8 แล้ว iconv('TIS-620','UTF-8','ข้อความ')
แล้วนะคะ ก็ยังเป็นอยู่ หรืออาจจะต้องเปลี่ยนเป็น Library อิื่นแทนคะ

ขอบคุณมากนะคะ คุณ mr.win

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-03-17 11:38:02 By : maimaiphnthp
 

 

No. 3



โพสกระทู้ ( 9,587 )
บทความ ( 2 )



สถานะออฟไลน์


บันทัดที่ 2 เปลี่ยนเป็น utf-8
ไฟล์ไทป์ ก็ต้องเป็น utf-8
ข้อมูลที่เป็น constant ไม่ต้องผ่าน iconv
ข้อมูลที่เอามาจาก database เป็น tis-620 ให้ผ่าน iconv
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-03-17 12:54:55 By : Chaidhanan
 


 

No. 4



โพสกระทู้ ( 17 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 3 เขียนโดย : Chaidhanan เมื่อวันที่ 2016-03-17 12:54:55
รายละเอียดของการตอบ ::
ลองแล้วนะคะ แต่ก็ยังไม่ได้อยู่ดีค่ะ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-03-18 08:44:39 By : maimaiphnthp
 


 

No. 5

Guest


หนูควรใช้ utf-8 นะ

แล้วไฟล์ php ก็ต้อง encode ด้วย utf-8 without bom ด้วย

จะได้ไม่มีปัญหา
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-03-18 08:54:41 By : ห้ามตอบเกินวันละ 2 กระทู้
 


 

No. 6



โพสกระทู้ ( 17 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 5 เขียนโดย : ห้ามตอบเกินวันละ 2 กระทู้ เมื่อวันที่ 2016-03-18 08:54:41
รายละเอียดของการตอบ ::
ลองแล้วนะคะพอเอาขึ้น server ก็ยังอ่านไม่ออกอยู่ดีอ่ะค่ะ
Code (PHP)
 <?php
	header("Content-type: text/html; charset=utf-8");
       /** Include PHPExcel */
	require_once '../PHPexcel/Classes/PHPExcel.php';

	// Create new PHPExcel object
	$objPHPExcel = new PHPExcel();
	//+ FONT SIZE
	$objPHPExcel->getDefaultStyle()->getFont()->setSize(11);

	$objPHPExcel->setActiveSheetIndex(0)
				->setCellValue('A1', 'Hello')
				->setCellValue('B1', 'ภาษาไทย')
				->setCellValue('C1','ทดสอบภาษาไทย')
				->setCellValue('D1', 'ทดสอบภาษาไทย');
				$objPHPExcel->setActiveSheetIndex()->setCellValue('A4', 'ทดสอบ'); 
				$objPHPExcel->setActiveSheetIndex()->setCellValue('B4', 'ทดสอบภาษาไทย'); 

	// Rename sheet
	$objPHPExcel->getActiveSheet()->setTitle('Demo01');

	// Set active sheet index to the first sheet, so Excel opens this as the first sheet
	$objPHPExcel->setActiveSheetIndex(0);

	// Redirect output to a client’s web browser (Excel5)
	header('Content-Type: application/vnd.ms-excel');
	header('Content-Disposition: attachment;filename="01demo.xls"');
	header('Cache-Control: max-age=0');
	// If you're serving to IE 9, then the following may be needed
	header('Cache-Control: max-age=1');

	// If you're serving to IE over SSL, then the following may be needed
	header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
	header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
	header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
	header ('Pragma: public'); // HTTP/1.0

	$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
	$objWriter->save('php://output');
	exit;
	?>



หนูลองเข้า Notepad++ แล้ว convert to utf-8 without bom แล้วก็ยังเป็นเหมือนเดิมเลยค่ะ

testconver
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-03-18 09:23:41 By : maimaiphnthp
 


 

No. 7

Guest


Code (PHP)
<?php

namespace App\Libraries;

use Excel;

class MsExcel {
    public static function export($filename, $dataset) {
        Excel::create($filename, function($excel) use($dataset) {
            foreach ($dataset as $datatable) {
                $excel->sheet($datatable['SheetName'], function($sheet) use($datatable) {
                    self::pageSetup($sheet, $datatable['Format']);
                    self::title($sheet, $datatable['Title'],  count($datatable['Header']));
                    self::header($sheet, $datatable['Header']);
                    self::fillData($sheet, $datatable['Data']);
                    self::home($sheet);
                });
            }

            $excel->setActiveSheetIndex(0);
        })->export('xlsx');
    }

    protected static function pageSetup($sheet, $format) {
        $sheet->setOrientation('landscape');
        $sheet->setPageMargin(0.5);
        $sheet->setFontFamily('Microsoft Sans Serif');
        $sheet->setFontSize(10);

        $sheet->setColumnFormat($format);
    }

    protected static function title($sheet, $title, $merge) {
        $column = self::stringFromColumnIndex($merge) . '1';

        $sheet->mergeCells('A1:' . $column);
        $sheet->cell('A1', $title);
        $sheet->cell('A1', function($cell) {
            $cell->setAlignment('center');
            $cell->setFontWeight('bold');
        });
    }

    protected static function header($sheet, $header) {
        $col = 1;    

        foreach ($header as $name) {
            $column = self::stringFromColumnIndex($col) . '3';

            $sheet->cell($column, $name);
            $sheet->cell($column, function($cell) {
                $cell->setBorder('thin', 'thin', 'thin', 'thin');
                $cell->setBackground('#f2f5a9');
                $cell->setAlignment('center');
            });

            $col++;
        }
    }

    protected static function fillData($sheet, $data) {
        $row = 4;

        foreach ($data as $datarow) {
            $col = 1;

            foreach ($datarow as $value) {
                $column = self::stringFromColumnIndex($col) . $row;

                $sheet->setBorder($column, 'thin');
                $sheet->cell($column, $value);

                $col++;
            }

            $row++;
        }
    }

    protected static function home($sheet) {
        $sheet->cell('A1', function($cell) {
            $cell->setBorder('none', 'none', 'none', 'none');
        });
    }

    protected static function stringFromColumnIndex($num) {
        $numeric = ($num - 1) % 26;
        $letter = chr(65 + $numeric);
        $num2 = intval(($num - 1) / 26);

        if ($num2 > 0) {
            return getNameFromNumber($num2) . $letter;
        } 
        else {
            return $letter;
        }
    }
}


Code (PHP)
                $date = new DateTime("$year-$month-01");
                $filename = 'usage-statistic-' . strtolower($date->format('F')) . '-' . $date->format('Y');
                $dbs = Statistic::getLoginLog($year, $month);

                $usages = [];

                foreach($dbs as $db) {
                    $usage = [$db->RowNumber, 
                        $db->Account, 
                        $db->Display,
                        (new DateTime($db->LoginDate))->format('d/m/Y H:i:s'),
                        $db->IpAddress,
                        $db->Platform,
                        $db->Browser  
                    ];

                    array_push($usages, $usage);
                }

                $datatable = ['SheetName' => 'Usage Session',
                    'Format' => [
                        'A' => '#.',
                        'D' => '[$-en-US]d-mmm-yyyy;@'
                    ],
                    'Title' => 'Usage Session ' . $date->format('F Y'),
                    'Header' => ['#', 
                        'Acount', 
                        'Name',
                        'Date',
                        'IP Address',
                        'Platform',
                        'Browser'
                    ],
                    'Data' => $usages
                ];

                MsExcel::export($filename, [$datatable]);

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-03-18 09:38:08 By : ห้ามตอบเกินวันละ 2 กระทู้
 


 

No. 8



โพสกระทู้ ( 5 )
บทความ ( 0 )



สถานะออฟไลน์


Code (PHP)
$str = 'ภาษาไทย';
$str = html_entity_decode($str,ENT_QUOTES,'UTF-8');


...ตอบช้าไปสี่ปีเอง........
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-04-08 09:34:05 By : meawmill
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : สอบถามเรื่องการใช้งาน PHPExcel มีปัญหาในเรื่องของ charset ค่ะ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 04
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่