paisal Posted November 6, 2008 Share Posted November 6, 2008 Hi, I'm new for PHP MySQL and I got problem about export from MySQL to spressheet ods,xls with UTF-8 here is code i use .. when export to ods I have to choose from dialog UTF-8 encoding for readable , badly if export to xls and openwith MS-Excel can't read at all, but openoffice I can choose encoding. Thank you all for advance. if ($_GET['date'] == "today") { $date = today(); }else { $date = trim(mysql_prep(htmlentities($_GET['date']))); } $filename="DailyInformation({$date})"; // header("Content-Type: application/vnd.ms-excel; charset=utf-8"); header("Content-Type: application/vnd.oasis.opendocument.spreadsheet ods; charset=utf-8"); header("Content-Disposition: attachment; filename=".$filename.".ods"); // header("Content-Disposition: attachment; filename=".$filename.".xls"); header("Pragma: no-cache"); header("Expires: 0"); $sep = "\t"; //tabbed character $th = array( "สาขา","","ประเภทสินค้า","ราคา","","ประเภทสินค้า","จำนวน","","ประเภทสินค้า","จำนวน","","สินค้า", "ราคาทุน","ราคาขาย","ราคาคู่แข่ง","ชื่อร้านคู่แข่ง","","ปัญหา","จากเรา","จากที่อื่น","ไม่ระบุ"); foreach ($th as $value) { echo $value . "\t"; } print("\n"); // $date = "2008-10-31"; $query = "SELECT DISTINCT `branch` "; $query .= " FROM serve.proreport"; $query .= " WHERE `date` LIKE '{$date}%'"; $query .= " AND `reptype` = '1'"; $query .= " LIMIT 100"; mysql_query("SET NAMES 'utf8'",$connection); $result = mysql_query($query, $connection); confirm_query($result); while ($row = mysql_fetch_array($result)) { $br[] = $row['branch']; } // avoid foreach error if not exist value from query data. if (!mysql_affected_rows()) { $br=array(); } foreach ($br as $key => $value) { for ($k=1; $k < 5; $k++) { // we have for type of report top,disc,long,fight // $date = "2008-10-31"; $query0 = "SELECT `proname`,`costprice`,`price`,`diffprice`,`quantity`,`shopname` "; $query0 .= " FROM serve.proreport"; $query0 .= " WHERE `date` LIKE '{$date}%'"; $query0 .= " AND `reptype` = '{$k}'"; $query0 .= " AND `branch` = '{$value}'"; $query0 .= " ORDER BY `date` ASC"; mysql_query("SET NAMES 'utf8'",$connection); $result0 = mysql_query($query0, $connection); confirm_query($result0); $i=0; while ( $row0 = mysql_fetch_array($result0)) { switch ($k) { case '1': $j=0; $td[$value][$k][$i][$j] = $row0['proname']; $j++; $td[$value][$k][$i][$j] = $row0['price']; $i++; break; case '2': $j=0; $td[$value][$k][$i][$j] = $row0['proname']; $j++; $td[$value][$k][$i][$j] = $row0['quantity']; $i++; break; case '3': $j=0; $td[$value][$k][$i][$j] = $row0['proname']; $j++; $td[$value][$k][$i][$j] = $row0['quantity']; $i++; break; case '4': $j=0; $td[$value][$k][$i][$j] = $row0['proname']; $j++; $td[$value][$k][$i][$j] = $row0['costprice']; $j++; $td[$value][$k][$i][$j] = $row0['price']; $j++; $td[$value][$k][$i][$j] = $row0['diffprice']; $j++; $td[$value][$k][$i][$j] = $row0['shopname']; $i++; break; default: # code... break; } // $t = array(); $t[] = $i; // problem happen here , now fix it. } } $u[] = max($t); $t=array(); // $date = "2008-10-31"; $query1 = "SELECT `issue`,`issuestart` "; $query1 .= " FROM serve.probissue"; $query1 .= " WHERE `postdate` LIKE '{$date}%'"; $query1 .= " AND `branch` = '{$value}'"; $query1 .= " ORDER BY `postdate` ASC"; mysql_query("SET NAMES 'utf8'",$connection); $result1 = mysql_query($query1, $connection); confirm_query($result1); $a=0;$b=1;$d = 0; while ( $row1 = mysql_fetch_array($result1)) { $td[$value][5][$d][$a] = $row1['issue']; $td[$value][5][$d][$b] = $row1['issuestart']; $d++; } $count = count($u) - 1; // take last position of array $x = $u[$count]; $total_rows = array($x, $d); // take max value between proreport and issue report $branch = branchbyid($value); for ($i=0; $i < max($total_rows); $i++) { switch ($td[$value][5][$i][1]) { case '0': $issue_from = $sep."Other".$sep; break; case '1': $issue_from = "ME".$sep.$sep; break; case '2': $issue_from = $sep.$sep."Not Specity"; break; default: $issue_from = ""; break; } if ($value != $previous_value) { $schema_insert = $branch.$sep.$sep.$td[$value][1][$i][0].$sep.$td[$value][1][$i][1].$sep.$sep.$td[$value][2][$i][0].$sep.$td[$value][2][$i][1].$sep.$sep.$td[$value][3][$i][0].$sep.$td[$value][3][$i][1].$sep.$sep.$td[$value][4][$i][0].$sep.$td[$value][4][$i][1].$sep.$td[$value][4][$i][2].$sep.$td[$value][4][$i][3].$sep.$td[$value][4][$i][4].$sep.$sep.$td[$value][5][$i][0].$sep.$issue_from; }else { $schema_insert = "\"\"".$sep.$sep.$td[$value][1][$i][0].$sep.$td[$value][1][$i][1].$sep.$sep.$td[$value][2][$i][0].$sep.$td[$value][2][$i][1].$sep.$sep.$td[$value][3][$i][0].$sep.$td[$value][3][$i][1].$sep.$sep.$td[$value][4][$i][0].$sep.$td[$value][4][$i][1].$sep.$td[$value][4][$i][2].$sep.$td[$value][4][$i][3].$sep.$td[$value][4][$i][4].$sep.$sep.$td[$value][5][$i][0].$sep.$issue_from; } $previous_value = $value; $schema_insert = str_replace($sep."$", "", $schema_insert); //following fix suggested by Josue (thanks, Josue!) //this corrects output in excel when table fields contain \n or \r //these two characters are now replaced with a space $schema_insert = preg_replace("/\r\n|\n\r|\n|\r/", " ", $schema_insert); $schema_insert .= "\t"; print(trim($schema_insert)); print "\n"; } // empty 1 row for seperate purpose between branches $schema_insert = $sep.$sep.$sep.$sep.$sep.$sep.$sep.$sep.$sep.$sep.$sep.$sep.$sep.$sep.$sep.$sep.$sep.$sep.$sep.$sep.$sep; $schema_insert = str_replace($sep."$", "", $schema_insert); //following fix suggested by Josue (thanks, Josue!) //this corrects output in excel when table fields contain \n or \r //these two characters are now replaced with a space $schema_insert = preg_replace("/\r\n|\n\r|\n|\r/", " ", $schema_insert); $schema_insert .= "\t"; print(trim($schema_insert)); print "\n"; } // end foreach Link to comment https://forums.phpfreaks.com/topic/131581-export-excel-utf-8/ Share on other sites More sharing options...
tivrfoa Posted February 18, 2009 Share Posted February 18, 2009 I tested this: <?php require (dirname (FILE) . "/class-excel-xml.inc.php"); $myarray = array(); for($i = 0; $i < 10; $i++) { $myarray[] = array("name", "email", "other thing"); } $xls = new Excel_XML; $xls->addArray ( $myarray ); $xls->generateXML ( "testfile" ); ?> the class "class-excel-xml.inc.php" http://code.google.com/p/php-excel/downloads/list and it worked fine, but my text editor (notepad ++) don't recognize arabic characters, and changed the characters to this "?". does someone can give some clue about how to work with arabic characters? I visited an arabic site and the codification is Thai (TIS-620) Link to comment https://forums.phpfreaks.com/topic/131581-export-excel-utf-8/#findComment-765303 Share on other sites More sharing options...
tivrfoa Posted February 18, 2009 Share Posted February 18, 2009 I think this thread should be on PHP help ??? Link to comment https://forums.phpfreaks.com/topic/131581-export-excel-utf-8/#findComment-765317 Share on other sites More sharing options...
Mark Baker Posted February 18, 2009 Share Posted February 18, 2009 Excel (Biff5/8 xls) and (2007 xlsx) should both work with straight utf-8, so if you're retrieving utf-8 data from the database, then it should simply be a matter of setting the cell values to the value retrieved from the database. If your database isn't utf-8, you should be able to see what charset it is using and do an iconv to convert that to utf-8. Normally arabic sites would use charset=iso-8859-6 What I can't comment on is whether your document writer actually does use utf-8 for excel files, but the version you've indicated is rather dated Link to comment https://forums.phpfreaks.com/topic/131581-export-excel-utf-8/#findComment-765431 Share on other sites More sharing options...
fenway Posted February 23, 2009 Share Posted February 23, 2009 I think this thread should be on PHP help ??? Agreed... pls confirm this isn't DB-related, and I'll move it. Link to comment https://forums.phpfreaks.com/topic/131581-export-excel-utf-8/#findComment-769032 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.