|
|
|
มีปัญหากับการใช้งาน PHPExcel กับฐานข้อมมูล Oracel 10g |
|
|
|
|
|
|
|
สอบถามท่านที่เคยใช้งาน PHPExcel จากที่วุ่นอยู่หลายวันและมีปัญหาเรื่องภาษาไทย ครับเจ้า PHPExcel กับฐานข้อมมูล Oracel 10g
ซึ่งก่อนสอบถามผมได้ค้นหาการแก้ปัญาในเวปและหลายๆ เวปแล้วยังไม่สามารถแก้ไขปัญหาได้
ได้ลองทำการแก้ไขปัญหาดังนี้
- กำหนดเอกสาร php ให้ตรงกับ DB
putenv("NLS_LANG=THAI_THAILAND.TH8TISASCII");
- ใช้ iconv จาก utf-8 เป็น tis-620
- เซ็คฟอนต์ setName('Arial'); ทั้ง Angsana new รวมทั้งฟอนต์ชนิดอื่นๆ ลองมาหมดแล้ว
- กำหนด เฮดเดอร์ให้ header('Content-Type: application/vnd.ms-excel;charset=utf-8'); แล้วยังไม่ได้
- แก้ไฟล์ PHPExcel ที่โฟเดอร์ Shared/font.php บรรทัดที่ 545 เป็น
case 'AngsanaUPC':return self::CHARSET_ANSI_THAI;
- แก้ไฟล์ไลบาลี่ PHPExcel ที่โฟเดอร์ Shared/String.php บรรทัดที่ 306 เป็น
-if (!@iconv_substr('A', 0, 1, 'UTF-8')) {
// จากของเดิม if (!@iconv('UTF-8', 'UTF-16LE', 'x')) {
สรุปคือยังไม่สามารถใช้งานภาษาไทย ซึ่งไม่ทราบสาเหตุเกิดจากอะไร
Oracel 10g เซ็ต NLS_CHARACTERSET เป็น TH8TISASCII
มาดูโด้ดกันเลย
Code (PHP)
$objReader = PHPExcel_IOFactory::createReader('Excel5');
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load('asset_report-2.xls');
$objPHPExcel->getDefaultStyle()->getFont()->setName('Arial');
$objPHPExcel->getDefaultStyle()->getFont()->setSize(11);
# Properties xlsx document
$objPHPExcel->getProperties()->setCreator("tummavong")
->setLastModifiedBy("IT")
->setTitle("report")
->setSubject("report")
->setDescription("Report asset control system")
->setKeywords("xlsl")
->setCategory("Report");
$objPHPExcel->getActiveSheet()->setTitle('Asset');
$objPHPExcel->getActiveSheet()->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE);
$Sheet = $objPHPExcel->getActiveSheet();
$j = (int)2 ;
for($i = 0; $i<=$count; $i++){
$Sheet->setCellValue('A'.$j,$result['ASS_NO'][$i]);
$Sheet->getStyle('A'.$j)->getNumberFormat()->setFormatCode('000000');
$Sheet->getStyle('A'.$j)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$Sheet->setCellValue('B'.$j,$result['PO_NO'][$i]);
$Sheet->getStyle('B'.$j)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$Sheet->setCellValue('C'.$j,$result['DATE_REQ'][$i]);
$Sheet->getStyle('C'.$j)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$Sheet->setCellValue('D'.$j,$result['MODEL'][$i]);
$Sheet->setCellValue('E'.$j,$result['SERVICE_TAG'][$i]);
$Sheet->getStyle('E'.$j)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$Sheet->setCellValue('F'.$j,$result['PRICE'][$i]);
$Sheet->getStyle('F'.$j)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
$Sheet->getStyle('F'.$j)->getNumberFormat()->setFormatCode('#,##0.00');
$Sheet->setCellValue('G'.$j,iconv("TIS-620","UTF-8",$result['USR_REQ'][$i]));
$Sheet->setCellValue('H'.$j,iconv("UTF-8","TIS-620",$result['USR_REQ'][$i]));
$Sheet->setCellValue('I'.$j,$result['USR_REQ'][$i]);
$Sheet->setCellValue('J'.$j,"ภาษาไทย");
$j++;
}
header('Content-Type: application/vnd.ms-excel;charset=tis-620');
header('Content-Disposition: attachment;filename="asset_10report.xls"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
exit;
$result คือตัวแปลที่ query จาก DB
ผลคือไม่แสดงภาษาไทย
Tag : PHP
|
|
|
|
|
|
Date :
2011-10-11 13:37:44 |
By :
tummavong |
View :
1347 |
Reply :
7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (PHP)
header('Content-Type: application/vnd.ms-excel;charset=utf-8');
คุณน่าจะใช้ TIS ถึงจะถูกน่ะครับ
|
|
|
|
|
Date :
2011-10-11 14:54:45 |
By :
webmaster |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
จะ utf ก็ utf ให้หมด จะ tis ก้ tis ให้หมด อย่าสลับไปสลับมา ผมดูจากโค๊ดนะ
ดูไฟล์ที่ gen excel ด้วย ดูเหมือนจะเป็น ansi อยู่นะผมดูจาก Output
|
|
|
|
|
Date :
2011-10-11 15:23:28 |
By :
ikikkok |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมอยากให้เทสดูก่อนว่าเกิดจากข้อมูลที่อ่านมาจาก db หรือว่าเป็นตั้งแต่ file encoding
โดยเขียนโค๊ดประมาณนี้แล้วยัดข้อความภาษาไทยเข้าไปในเซลล์ แล้วรันดูครับว่าออกมายังไง โดยยังไม่ต้อง set header อะไรเลยนะครับ
|
|
|
|
|
Date :
2011-10-11 16:28:16 |
By :
ikikkok |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมว่า encoding ของ db ฒันต่างจาก local ของคุณ ต้องลองครับแบบนี้ ผมก็บอกไม่ถูกเหมือนกัน ที่ผมแก้อย่างมากก็ใช้ iconv แปลงข้อมูลที่เป็นภาษาไทย แค่นั้น รอผู้มีประสบการณ์ท่านอื่นละกัน
|
|
|
|
|
Date :
2011-10-11 17:19:43 |
By :
ikikkok |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 05
|