• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
اكسپورت خروجي html يك جدول به xls
#1
با سلام
يك سوال از حضورتون داشتم
من ميخواستم يك خروجي از جدول اچ تي ام ال به صورت اكسل بگيرم
با استفاده از لينك زير اونوبه CSV تبديل كردم
http://www.kunalbabre.com/projects/table2CSV.php
و براي تبديل CSV به xls از تابع زير استفاده كردم
کد پی‌اچ‌پی:
function csv2xls($in 'data.csv'$out 'ex.xls'$glue=","$enclosure='"')
{
$fp_in fopen($in"r");
$fp_out fopen($out"w");

/* write Excel BOF */
fputs($fp_outpack("ssssss"0x8090x80x00x100x00x0));

/* Read CSV fields */
for($row 0$fields fgetcsv($fp_in0$glue$enclosure); $row++)
{
foreach(
$fields as $col=>$value)
{
//$value = trim($value);
//$value = utf8_decode($value);


/* string cell */
if(!is_numeric($value))
{
$l strlen($value);
fputs($fp_out,pack("ssssss"0x204$l$row$col0x0$l).$value);
}
/* numeric cell */
else
{
fputs($fp_out,pack("sssss"0x20314$row$col0x0).pack("d",$value));
}
}
}

/* write Excel EOF */
fputs($fp_outpack("ss"0x0A0x00));

fclose($fp_out);
fclose($fp_in
اما مشكلي كه داره اينه كه طول رشته براي هر سلول بايد كمتر از 255 كاراكتر باشه آيا راه حلي براي اين مشكل است؟
فكر كنم تابع pack() رو بايد دستكاري كرد من بلد نيستم.
اگر كسي ميتونه، كمكم كنه؟
  پاسخ
تشکر شده توسط :
#2
(۱۳۹۰ خرداد ۲۹, ۱۱:۴۷ ق.ظ)arlabbafi نوشته: با سلام
يك سوال از حضورتون داشتم
من ميخواستم يك خروجي از جدول اچ تي ام ال به صورت اكسل بگيرم
با استفاده از لينك زير اونوبه CSV تبديل كردم
http://www.kunalbabre.com/projects/table2CSV.php
و براي تبديل CSV به xls از تابع زير استفاده كردم
کد پی‌اچ‌پی:
function csv2xls($in 'data.csv'$out 'ex.xls'$glue=","$enclosure='"')
{
$fp_in fopen($in"r");
$fp_out fopen($out"w");

/* write Excel BOF */
fputs($fp_outpack("ssssss"0x8090x80x00x100x00x0));

/* Read CSV fields */
for($row 0$fields fgetcsv($fp_in0$glue$enclosure); $row++)
{
foreach(
$fields as $col=>$value)
{
//$value = trim($value);
//$value = utf8_decode($value);


/* string cell */
if(!is_numeric($value))
{
$l strlen($value);
fputs($fp_out,pack("ssssss"0x204$l$row$col0x0$l).$value);
}
/* numeric cell */
else
{
fputs($fp_out,pack("sssss"0x20314$row$col0x0).pack("d",$value));
}
}
}

/* write Excel EOF */
fputs($fp_outpack("ss"0x0A0x00));

fclose($fp_out);
fclose($fp_in
اما مشكلي كه داره اينه كه طول رشته براي هر سلول بايد كمتر از 255 كاراكتر باشه آيا راه حلي براي اين مشكل است؟
فكر كنم تابع pack() رو بايد دستكاري كرد من بلد نيستم.
اگر كسي ميتونه، كمكم كنه؟

به نظرم لازم به این کارا نیست ، چرا یک راست به اکسل تبدیل نمی کنی؟
اطلاعاتتون را در یک متغیر بریزید و بعد اون را print کنید،مثلا:
کد پی‌اچ‌پی:
header("Content-Type: application/vnd.ms-excel; charset=utf-8");
header("Content-Disposition: attachment; filename=filename.xls"); 
header("Pragma: no-cache"); 
header("Expires: 0"); 
header("Lacation: excel.htm?id=yes");
        print 
"$data"
  پاسخ
تشکر شده توسط :
#3
(۱۳۹۰ خرداد ۳۰, ۱۰:۱۲ ق.ظ)zeynab نوشته: به نظرم لازم به این کارا نیست ، چرا یک راست به اکسل تبدیل نمی کنی؟
اطلاعاتتون را در یک متغیر بریزید و بعد اون را print کنید،مثلا:
کد پی‌اچ‌پی:
header("Content-Type: application/vnd.ms-excel; charset=utf-8");
header("Content-Disposition: attachment; filename=filename.xls"); 
header("Pragma: no-cache"); 
header("Expires: 0"); 
header("Lacation: excel.htm?id=yes");
        print 
"$data"

ممنون ممكن جدول من فيلتر بشه و سطر هاي باقيمانده اون رو بخوام به اكسل بفرستم
ضمنا از اين كد براي هر جدول استفاده ميكنم (جداول داراي فيلد هاي مختلف) id جدول رو ميدم به تابع خودش سطر هاي visible رو به اكسل ميفرسته
با را حل شما اين كار رو ميشه كرد؟
ميشه يه نمونه مثال پيوست كنيد
  پاسخ
تشکر شده توسط :
#4
(۱۳۹۰ خرداد ۳۰, ۰۴:۱۶ ب.ظ)arlabbafi نوشته:
(۱۳۹۰ خرداد ۳۰, ۱۰:۱۲ ق.ظ)zeynab نوشته: به نظرم لازم به این کارا نیست ، چرا یک راست به اکسل تبدیل نمی کنی؟
اطلاعاتتون را در یک متغیر بریزید و بعد اون را print کنید،مثلا:
کد پی‌اچ‌پی:
header("Content-Type: application/vnd.ms-excel; charset=utf-8");
header("Content-Disposition: attachment; filename=filename.xls"); 
header("Pragma: no-cache"); 
header("Expires: 0"); 
header("Lacation: excel.htm?id=yes");
        print 
"$data"

ممنون ممكن جدول من فيلتر بشه و سطر هاي باقيمانده اون رو بخوام به اكسل بفرستم
ضمنا از اين كد براي هر جدول استفاده ميكنم (جداول داراي فيلد هاي مختلف) id جدول رو ميدم به تابع خودش سطر هاي visible رو به اكسل ميفرسته
با را حل شما اين كار رو ميشه كرد؟
ميشه يه نمونه مثال پيوست كنيد

شاید درست متوجه منظورتان نشده باشم ، فکر کنم مثال زیر به درد بخوده:
کد زیر مثالی است که برای ساخت جدول در اون از حلقه استفاده کرده ، شما می تونید هر فیلتر دیگه ای را قبلش انجام بدید:
کد پی‌اچ‌پی:
<?php

  $data
['id'][0]=1;$data['id'][1]=2;
  
$data['case'][0]='php';$data['case'][1]='mysql';
  
$data['date'][0]='89/12/30';$data['date'][1]='89/11/30';
  
$header="شماره""\t";
$header.="موضوع""\t";    
$header.="تاريخ""\t";    
  
$_xml ="<?xml version='1.0' encoding='UTF-8' standalone='yes'?>\r\n";
  
$_xml.="<dataroot xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>\r\n";

  for(
$i=0;$i<2;$i++)
            {    
                
$_xml .="\t<Table1>\r\n";
                
$_xml.="\t\t<"."شماره".">".$data['id'][$i]."</"."شماره".">\r\n";    
                
$_xml.="\t\t<"."موضوع".">".$data['case'][$i]."</"."موضوع".">\r\n";    
                
$_xml.="\t\t<"."تاريخ".">".$data['date'][$i]."</"."تاريخ".">\r\n";    
                
$_xml.="\t</Table1>\r";
            }        
$_xml.="</dataroot>";
header("Content-Type: application/vnd.ms-excel; charset=utf-8");
header("Content-Disposition: attachment; filename=filename.xls"); 
header("Pragma: no-cache"); 
header("Expires: 0"); 
header("Lacation: excel.htm?id=yes");
print 
"$_xml"
?>
  پاسخ
تشکر شده توسط :
#5
سلام

به نظر شما استفاده از فایل XML بهتر از روش معمولی هست که مثلا توی این تاپیک گفته شده؟ چرا؟

یا این که این فقط یه روشی هست که کار می‌کنه؟ و ممکنه هیچ فرقی هم با بقیه نکنه؟

ممنون
upservers.net Profesional Internet Solutions
هاست + ریسلر لینوکس
خدا رو شکر این سروری که گرفتم Uptime نسبتا قابل قبولی داره.
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان