تالار گفتمان nCIS.ir

نسخه‌ی کامل: مشکل در خروجی اکسل PHP (حل شد)
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
خروجی اکسل را میگیرم اما با حروف فارسی مشکل داره و کاراکترهای عجیب و غریب نشون میده

این کدی هست که نوشتم :
    $sql = "SELECT * FROM tbl_test";
$result = @mysql_query($sql) or die("Couldn't execute query:<br>" . mysql_error(). "<br>" . mysql_errno());    
$file_ending = "xls";
//header info for browser
$filename = "result";
ob_end_clean();
header("Content-Type: text/csv");    
header("Content-Disposition: attachment;filename=$filename.csv");  
header("Cache-Control: no-cache, no-store, must-revalidate");  
header("Pragma: no-cache"); 
header("Expires: 0");
mysql_query("SET CHARACTER SET utf16"); 
mysql_query("SET NAMES utf16");
$csvoutput = fopen('php://output','w');
$row = mysql_fetch_row($result);
$headers = Array('نام','نام خانوادگی','ایمیل');
fputcsv($csvoutput,$headers);
fputcsv($csvoutput, $row);
while($row = mysql_fetch_assoc($result)) {
    fputcsv($csvoutput, $row);
}
fclose($csvoutput);
exit;

phpexcel هم کلاس خوبی هست اینطور که تحقیق کردم ولی چون از تمام قابلیت های آن استفاده نمیکنم می خواهم همین کد کوچک خودم رو مشکل فارسیش رو حل کنم .

ممنون
اول فایل اکسلتون کارکترهای BOM رو درج کنید تا UTF-8 بشه.
فایل اکسل بعد از ایجاد ، کاراکتر BOM ایجاد کنم ؟
متوجه نشدم

این کد رو هم در فایل php گذاشتم و درست شد :xEFxBBxBF
یک مطلب خوب در این زمینه : http://aftab.cc/tutorial/590
اینها همون کارکترهای BOM هستن.
اول فایل اکسل این هست : <META http-equiv=Content-Type content="text/html; charset=utf-8">
نمی دونم چرا !!

وقتی هم که طول رکورد زیاد باشه همش رو نمایش نمیده ، حتما باید در اکسل سلول رو بزرگ کرد ! می خوام به صورت خودکار این کار رو انجام بده

در CSV می تونم تغییراتی روی فونت و اندازه و ... داشته باشم ؟
اینو حذف کنید. بهتره با کلاس PHPExcel کار کنید اگه میخواین روی ظاهر Sheetها کنترل داشته باشین. مواردی مثل رنگ کردن و تنظیم فونت و... جزو کارهای ساده این کلاس محسوب میشه. توی CSV هیچ امکان کنترلی روی نمایش محتوا ندارین.
از این کد استفاده کردم ، اما مشکل فارسی داره و همه چی رو درهم نشون میده
چند تا کد دیگه هم امتحان کردم ولی جواب نگرفتم
مشکل از کجاست دوستان ؟

<?php
///////اتصال به بانک و ایجاد کوئری و قابلیت نمایش حروف فارسی///////
//نام بانک اطلاعاتی
$db_name = "diabetes";
//نام جدول مورد نظر
$table_name = '8specialized_visit_1';
//ایجاد کانکشن برای وصل شدن به بانک و سپس به جدول
$link = mysql_connect("localhost", "root", "") or die("Could not connect to server!");
$select_db = mysql_select_db($db_name, $link);
//نمایش حروف فارسی در صفحه اکسل///
mysql_query("SET NAMES 'utf8'");
//////////////////////////////////
$query = "SELECT * FROM " . $table_name;
$result = mysql_query($query, $link) or die("Could not complete database query");
$num = mysql_num_rows($result);
$num2=mysql_num_fields($result);
//////////////////////////////////////////////////////////////////////////////////////////
 
//دریافت نام هر فیلد
$name_c0=mysql_field_name($result,0);
$name_c1=mysql_field_name($result,1);
$name_c2=mysql_field_name($result,2);
$name_c3=mysql_field_name($result,3);
$name_c4=mysql_field_name($result,4);
$name_c5=mysql_field_name($result,5);
$name_c6=mysql_field_name($result,6);
$name_c7=mysql_field_name($result,7);
$name_c8=mysql_field_name($result,8);
$name_c9=mysql_field_name($result,9);
$name_c10=mysql_field_name($result,10);
 
 
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
date_default_timezone_set('Europe/London');
  
if (PHP_SAPI == 'cli')
    die('This example should only be run from a Web Browser');
 
/** Include <span class="highlight">PHPExcel</span> */
require_once 'PHPExcel_doc/Classes/PHPExcel.php';
  
// Create new <span class="highlight">PHPExcel</span> object
$objPHPExcel = new <span class="highlight">PHPExcel</span>();
  
// Set document properties
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
                             ->setLastModifiedBy("Maarten Balliauw")
                             ->setTitle("Office 2007 XLSX Test Document")
                             ->setSubject("Office 2007 XLSX Test Document")
                             ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
                             ->setKeywords("office 2007 openxml php")
                             ->setCategory("Test result file");
  
  
// Add some data
////قرار دادن نامهای هر ستون که همان نام فیلدها در بانک ما می باشند/////
$objPHPExcel->setActiveSheetIndex(0)
 
            ->setCellValue('A1', ''.$name_c0.'')
            ->setCellValue('B1', ''.$name_c1.'')
            ->setCellValue('C1', ''.$name_c2.'')
            ->setCellValue('D1', ''.$name_c3.'')
            ->setCellValue('E1', ''.$name_c4.'')
            ->setCellValue('F1', ''.$name_c5.'')
            ->setCellValue('G1', ''.$name_c6.'')
            ->setCellValue('H1', ''.$name_c7.'')
            ->setCellValue('I1', ''.$name_c8.'')
            ->setCellValue('J1', ''.$name_c9.'')
            ->setCellValue('K1', ''.$name_c10.'');
///////////////////////////////////////////////////////////////////////
 
////////این حلقه برای چاپ یا مقدار دهی هر سلول در اکسل می باشد/////////
$i=2;
while(@$rows=mysql_fetch_array($result)){
$objPHPExcel->setActiveSheetIndex(0)
 
            ->setCellValue("A".$i, ''.$rows['id'].'')
            ->setCellValue("B".$i, ''.$rows['id_sick'].'')
            ->setCellValue("C".$i, ''.$rows['date_visit'].'')
            ->setCellValue("D".$i, ''.$rows['HbA1C'].'')
            ->setCellValue("E".$i, ''.$rows['FBS'].'')
            ->setCellValue("F".$i, ''.$rows['Bs2hpp'].'')
            ->setCellValue("G".$i, ''.$rows['blood_sugar_controlled'].'')
            ->setCellValue("H".$i, ''.$rows['change_treatment'].'')
            ->setCellValue("I".$i, ''.$rows['about_change_treatment'].'')
            ->setCellValue("J".$i, ''.$rows['recommendations'].'')
            ->setCellValue("K".$i, ''.$rows['registration_date'].'');
            $i++;
    }
////////////////////////////////////////////////////////////////////////
 
 
  
// Rename worksheet
$objPHPExcel->getActiveSheet()->setTitle('Simple');
  
  
// 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="01simple.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;
?>
مشکل حل شد
یکسری کد اضافه در بالای برنامه بود که مشکل ساز شده بود