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,038

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


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

 
Topic : 121973



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



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



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

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

Code (PHP)
01.<?php
02.    header("Content-type: text/html; charset=tis-620");
03./** Include PHPExcel */
04.require_once '../PHPexcel/Classes/PHPExcel.php';
05. 
06.// Create new PHPExcel object
07.$objPHPExcel = new PHPExcel();
08.//+ FONT SIZE
09.$objPHPExcel->getDefaultStyle()->getFont()->setSize(11);
10. 
11.$objPHPExcel->setActiveSheetIndex(0)
12.            ->setCellValue('A1', 'Hello')
13.            ->setCellValue('B1', 'ภาษาไทย')
14.            ->setCellValue('C1', ''.iconv('TIS-620','UTF-8','ภาษาไทยทดสอบ').'')
15.            ->setCellValue('E1', 'ทดสอบภาษาไทย');
16.            $objPHPExcel->setActiveSheetIndex()->setCellValue('A4', 'ทดสอบ');
17.            $objPHPExcel->setActiveSheetIndex()->setCellValue('B4', ''.iconv('TIS-620','UTF-8','ทดสอบ').'');
18. 
19.// Rename sheet
20.$objPHPExcel->getActiveSheet()->setTitle('Demo01');
21. 
22.// Set active sheet index to the first sheet, so Excel opens this as the first sheet
23.$objPHPExcel->setActiveSheetIndex(0);
24. 
25.// Redirect output to a client’s web browser (Excel5)
26.header('Content-Type: application/vnd.ms-excel');
27.header('Content-Disposition: attachment;filename="01demo.xls"');
28.header('Cache-Control: max-age=0');
29.// If you're serving to IE 9, then the following may be needed
30.header('Cache-Control: max-age=1');
31. 
32.// If you're serving to IE over SSL, then the following may be needed
33.header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
34.header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
35.header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
36.header ('Pragma: public'); // HTTP/1.0
37. 
38.$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
39.$objWriter->save('php://output');
40.exit;
41.?>

ผลที่กำหนด 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 : 4016 Reply : 8
 

 

No. 1



โพสกระทู้ ( 74,059 )
บทความ ( 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,590 )
บทความ ( 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)
01.<?php
02.   header("Content-type: text/html; charset=utf-8");
03.      /** Include PHPExcel */
04.   require_once '../PHPexcel/Classes/PHPExcel.php';
05. 
06.   // Create new PHPExcel object
07.   $objPHPExcel = new PHPExcel();
08.   //+ FONT SIZE
09.   $objPHPExcel->getDefaultStyle()->getFont()->setSize(11);
10. 
11.   $objPHPExcel->setActiveSheetIndex(0)
12.               ->setCellValue('A1', 'Hello')
13.               ->setCellValue('B1', 'ภาษาไทย')
14.               ->setCellValue('C1','ทดสอบภาษาไทย')
15.               ->setCellValue('D1', 'ทดสอบภาษาไทย');
16.               $objPHPExcel->setActiveSheetIndex()->setCellValue('A4', 'ทดสอบ');
17.               $objPHPExcel->setActiveSheetIndex()->setCellValue('B4', 'ทดสอบภาษาไทย');
18. 
19.   // Rename sheet
20.   $objPHPExcel->getActiveSheet()->setTitle('Demo01');
21. 
22.   // Set active sheet index to the first sheet, so Excel opens this as the first sheet
23.   $objPHPExcel->setActiveSheetIndex(0);
24. 
25.   // Redirect output to a client’s web browser (Excel5)
26.   header('Content-Type: application/vnd.ms-excel');
27.   header('Content-Disposition: attachment;filename="01demo.xls"');
28.   header('Cache-Control: max-age=0');
29.   // If you're serving to IE 9, then the following may be needed
30.   header('Cache-Control: max-age=1');
31. 
32.   // If you're serving to IE over SSL, then the following may be needed
33.   header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
34.   header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
35.   header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
36.   header ('Pragma: public'); // HTTP/1.0
37. 
38.   $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
39.   $objWriter->save('php://output');
40.   exit;
41.   ?>



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

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

 

No. 7

Guest


Code (PHP)
01.<?php
02. 
03.namespace App\Libraries;
04. 
05.use Excel;
06. 
07.class MsExcel {
08.    public static function export($filename, $dataset) {
09.        Excel::create($filename, function($excel) use($dataset) {
10.            foreach ($dataset as $datatable) {
11.                $excel->sheet($datatable['SheetName'], function($sheet) use($datatable) {
12.                    self::pageSetup($sheet, $datatable['Format']);
13.                    self::title($sheet, $datatable['Title'],  count($datatable['Header']));
14.                    self::header($sheet, $datatable['Header']);
15.                    self::fillData($sheet, $datatable['Data']);
16.                    self::home($sheet);
17.                });
18.            }
19. 
20.            $excel->setActiveSheetIndex(0);
21.        })->export('xlsx');
22.    }
23. 
24.    protected static function pageSetup($sheet, $format) {
25.        $sheet->setOrientation('landscape');
26.        $sheet->setPageMargin(0.5);
27.        $sheet->setFontFamily('Microsoft Sans Serif');
28.        $sheet->setFontSize(10);
29. 
30.        $sheet->setColumnFormat($format);
31.    }
32. 
33.    protected static function title($sheet, $title, $merge) {
34.        $column = self::stringFromColumnIndex($merge) . '1';
35. 
36.        $sheet->mergeCells('A1:' . $column);
37.        $sheet->cell('A1', $title);
38.        $sheet->cell('A1', function($cell) {
39.            $cell->setAlignment('center');
40.            $cell->setFontWeight('bold');
41.        });
42.    }
43. 
44.    protected static function header($sheet, $header) {
45.        $col = 1;   
46. 
47.        foreach ($header as $name) {
48.            $column = self::stringFromColumnIndex($col) . '3';
49. 
50.            $sheet->cell($column, $name);
51.            $sheet->cell($column, function($cell) {
52.                $cell->setBorder('thin', 'thin', 'thin', 'thin');
53.                $cell->setBackground('#f2f5a9');
54.                $cell->setAlignment('center');
55.            });
56. 
57.            $col++;
58.        }
59.    }
60. 
61.    protected static function fillData($sheet, $data) {
62.        $row = 4;
63. 
64.        foreach ($data as $datarow) {
65.            $col = 1;
66. 
67.            foreach ($datarow as $value) {
68.                $column = self::stringFromColumnIndex($col) . $row;
69. 
70.                $sheet->setBorder($column, 'thin');
71.                $sheet->cell($column, $value);
72. 
73.                $col++;
74.            }
75. 
76.            $row++;
77.        }
78.    }
79. 
80.    protected static function home($sheet) {
81.        $sheet->cell('A1', function($cell) {
82.            $cell->setBorder('none', 'none', 'none', 'none');
83.        });
84.    }
85. 
86.    protected static function stringFromColumnIndex($num) {
87.        $numeric = ($num - 1) % 26;
88.        $letter = chr(65 + $numeric);
89.        $num2 = intval(($num - 1) / 26);
90. 
91.        if ($num2 > 0) {
92.            return getNameFromNumber($num2) . $letter;
93.        }
94.        else {
95.            return $letter;
96.        }
97.    }
98.}


Code (PHP)
01.$date = new DateTime("$year-$month-01");
02.$filename = 'usage-statistic-' . strtolower($date->format('F')) . '-' . $date->format('Y');
03.$dbs = Statistic::getLoginLog($year, $month);
04. 
05.$usages = [];
06. 
07.foreach($dbs as $db) {
08.    $usage = [$db->RowNumber,
09.        $db->Account,
10.        $db->Display,
11.        (new DateTime($db->LoginDate))->format('d/m/Y H:i:s'),
12.        $db->IpAddress,
13.        $db->Platform,
14.        $db->Browser 
15.    ];
16. 
17.    array_push($usages, $usage);
18.}
19. 
20.$datatable = ['SheetName' => 'Usage Session',
21.    'Format' => [
22.        'A' => '#.',
23.        'D' => '[$-en-US]d-mmm-yyyy;@'
24.    ],
25.    'Title' => 'Usage Session ' . $date->format('F Y'),
26.    'Header' => ['#',
27.        'Acount',
28.        'Name',
29.        'Date',
30.        'IP Address',
31.        'Platform',
32.        'Browser'
33.    ],
34.    'Data' => $usages
35.];
36. 
37.MsExcel::export($filename, [$datatable]);

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

 

No. 8



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



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


Code (PHP)
1.$str = 'ภาษาไทย';
2.$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 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)





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