ถามเรื่องการ Export รายงาน เป็น Excel ใน Column ที่ข้อมูลเป็น ตัวเลข
คือ ผม Export รายงานให้เป็นในรูปแบบของ Excel
แต่ติดที่ ตรง Column ที่เป็นตัวเลข หากดึงออกมาตามปกติ $worksheet->write("B$xlsRow",$result["PDCode"], $xlsCellDesc); ตัวเลขที่ขึ้นต้นด้วย 0 จะถูกตั้ดทิ้งไป เช่น 00142 จะขึ้นแค่ 142 หรือ 00000 จะขึ้น 0 แต่หากเป็น 52035 หรือ rode-set001 ไม่มีปัญหาอะไร
ที่นี้ ผมลองเพิ่ม \r เข้าไป >> $worksheet->write("B$xlsRow","\r".$result["PDCode"], $xlsCellDesc); Output สามารถออกได้ตามปกติ ไม่ว่าจะเป็น 00142 หรือ 00000 หรือ 52035 หรือ rode-set001 แต่ เมื่อนำมาทำ VLOOKUP จะไม่สามารถทำได้ เนื่องจากมันเหมือนมีช่องว่างอยู่ข้างหน้าตัวเลข
จึงอยากถามว่า มีวิธีการ ทำให้เลข 0 สามารถโชว์ได้ตามปกติ ไม่ถูกตัดใน Excel นอกจากการใส่ "\r" อีกไหมครับ เพราะ ใส่ "\r" และมันเหมือนมีช่องว่างอยู่ข้างหน้า
หรือมีวิธีการ Set Column (Format Cells..) ให้เป็น text หรือ string ไหมครับ
ช่วยผมทีนะครับ ขอบคุณมากๆครับ
ปล. ลองใส่แล้ว ตรงตัวเลขจะมี ' อยู่ข้งหน้าอะครับ เช่น '00145 , '50236, '00000 อยากให้ไม่มี ' นำหน้าอะครับ TT
นี่ Code ครับ
Code (PHP)
<?
require_once "class/class.writeexcel_workbook.inc.php";
require_once "class/class.writeexcel_worksheet.inc.php";
include("connect.php");
$sdate=$_POST["sdate"];//2010-05-05
$nsdate=$_POST["sdate"];
$nsy=substr($nsdate,0,4);
$nsm=substr($nsdate,5,2);
$nsd=substr($nsdate,8,2);
$nsdate=$nsd."/".$nsm."/".$nsy;
$edate=$_POST["edate"];
$nedate=$_POST["edate"];
$ney=substr($nedate,0,4);
$nem=substr($nedate,5,2);
$ned=substr($nedate,8,2);
$nedate=$ned."/".$nem."/".$ney;
$outcode=$_POST["outcode"];
$sqloutname="select * from outlet where outcode='$outcode'";
$queryoutname=mysql_query($sqloutname);
$rows=mysql_fetch_array($queryoutname);
$token = md5(uniqid(rand(), true));
$fname= "Report.xls";
$workbook =& new writeexcel_workbook($fname);
$worksheet =& $workbook->addworksheet("รายงานการขาย");
$worksheet->set_margin_right(0.50);
$worksheet->set_margin_bottom(1.10);
## Set Format ##
$xlscelldesc_header =& $workbook->addformat();
$xlscelldesc_header->set_font('Angsana New');
$xlscelldesc_header->set_size(14);
$xlscelldesc_header->set_color('blue');
$xlscelldesc_header->set_bold(1);
$xlscelldesc_header->set_text_v_align(1);
$xlscelldesc_header->set_merge(1);
$xlsCellDesc =& $workbook->addformat();
$xlsCellDesc->set_font('Angsana New');
$xlsCellDesc->set_size(12);
$xlsCellDesc->set_color('black');
//$xlsCellDesc->set_bor(1);
$xlsCellDesc->set_align('left');
$xlsCellDesc->set_text_v_align(1);
## End of Set Format ##
## Set Column Width & Height กำหนดความกว้างของ Cell
$worksheet->set_column('A:A', 6.5);
$worksheet->set_column('B:B', 7.6 );
$worksheet->set_column('C:C', 5);
$worksheet->set_column('D:D', 5);
$worksheet->set_column('E:E', 12);
$worksheet->set_column('F:F', 12);
$worksheet->set_column('G:G', 12);
$worksheet->set_column('H:H', 12);
$worksheet->set_column('I:I', 15);
$worksheet->set_column('J:J', 8.5);
$worksheet->set_column('K:K', 9);
$worksheet->set_column('L:L', 10);
$worksheet->set_column('M:M', 12);
$worksheet->set_column('N:N', 13);
$worksheet->set_column('O:O', 13);
$celldesc_h = 16.50;
## Writing Data เพิ่มข้อมูลลงใน Cell
# กำหนดความสูงของ Cell
$worksheet->set_row(1, $celldesc_h);
$worksheet->set_row(2, $celldesc_h);
$worksheet->set_row(3, $celldesc_h);
$worksheet->set_row(4, $celldesc_h);
$worksheet->set_row(5, $celldesc_h);
$worksheet->write(G3, " รายงานการขายประจำวันที่ : ".$nsdate. " ถึงวันที่ ".$nedate." ห้าง ".$rows["OutName"], $xlscelldesc_header);
$worksheet->write_blank(F6,$xlscelldesc_header);
$worksheet->write(A5,"วันที่", $xlscelldesc_header);
$worksheet->write(B5,"รหัสสินค้า", $xlscelldesc_header);
$worksheet->write(C5,"ชื่อสินค้า", $xlscelldesc_header);
$worksheet->write(D5,"จำนวน", $xlscelldesc_header);
$worksheet->write(E5,"ราคาขายปลีกต่อชิ้น", $xlscelldesc_header);
$worksheet->write(F5,"ส่วนลดต่อชิ้น (บาท)", $xlscelldesc_header);
$worksheet->write(G5,"ราคาเก็บเงินต่อชิ้น", $xlscelldesc_header);
$worksheet->write(H5,"จำนวนเงินรวมที่เก็บได้", $xlscelldesc_header);
$worksheet->write(I5,"ส่วนลดการค้า", $xlscelldesc_header);
$worksheet->write(J5,"ส่วนลด (%)", $xlscelldesc_header);
$worksheet->write(K5,"ส่วนลดคูปอง (%)", $xlscelldesc_header);
$worksheet->write(L5,"ส่วนลดคูปอง ( บาท )", $xlscelldesc_header);
$worksheet->write(M5,"หมายเหตุ", $xlscelldesc_header);
$worksheet->write(N5,"รหัสจุดขาย", $xlscelldesc_header);
$worksheet->write(O5,"ชื่อจุดขาย", $xlscelldesc_header);
$worksheet->write(P5,"วันที่บันทึก", $xlscelldesc_header);
$worksheet->write(Q5,"PC", $xlscelldesc_header);
//$worksheet->write_blank(E6,$xlscelldesc_header);
//$worksheet->write(F6,"$price ", $xlscelldesc_header);
$xlsRow = 6;
# ตรงนี้คือดึงข้อมูลจาก mysql มาใส่ใน Cell
if($outcode=="0000000"){
$sql="select *
from saler s
inner join outlet o on (s.outcode=o.outcode)
inner join user u on (s.user_name=u.user_name)
inner join product p on (p.pdcode = s.pdcode)
inner join discount d ON (d.discode = s.discode)
where onsale between '$sdate' and '$edate'
order by s.onsale,s.discode,s.pdcode asc ";
}else{
$sql="select *
from saler s
inner join outlet o on (s.outcode=o.outcode)
inner join user u on (s.user_name=u.user_name)
inner join product p on (p.pdcode = s.pdcode)
inner join discount d ON (d.discode = s.discode)
where onsale between '$sdate' and '$edate'
and o.outcode='$outcode'
order by s.onsale,s.discode,s.pdcode asc ";
}
$query=mysql_query($sql);
$num=mysql_num_rows($query);
if($num==0){
echo "<script language='javascript'>alert('ไม่พบข้อมูล');</script>";
print "<meta http-equiv=refresh content=0;URL=admin_1.php>";
exit();
}else{
while($result= mysql_fetch_array($query)){
$ndate=$result["Onsale"];//2010-03-01
$y=substr($ndate,0,4);
$m=substr($ndate,5,2);
$d=substr($ndate,8,2);
$onsale=$d."/".$m."/".$y;
$ondate=$result["Onrecord"];
$oy=substr($ondate,0,4);
$om=substr($ondate,5,2);
$od=substr($ondate,8,2);
$onrecord=$od."/".$om."/".$oy;
$namena=$result["UName"];
$testna=$result["Outcode"];
if($testna==00000000){
$testna=$namena;
}else{
$testna="";
}
++$i;
$test=$result["PDCode"];
$test=$test;
$worksheet->set_row($xlsRow, 19.80);
$worksheet->write("A$xlsRow",$onsale, $xlsCellDesc);
$worksheet->write("B$xlsRow",$result["PDCode"], $xlsCellDesc); // ติดที่ตัวนี้ ถ้าไม่ใส่ \r ตัวข้างหน้าจะไม่มีช่องว่าง แต่เลข 0 ข้างหน้า จะถูกตัดทิ้งไป
$worksheet->write("C$xlsRow", $result["PDName"], $xlsCellDesc);
$worksheet->write("D$xlsRow", $result["Quantity"], $xlsCellDesc);
$worksheet->write("E$xlsRow", $result["Price"], $xlsCellDesc);
$worksheet->write("F$xlsRow", $result["Dis_baht"], $xlsCellDesc);
$worksheet->write("G$xlsRow", $result["PricePerPiece"], $xlsCellDesc);
$worksheet->write("H$xlsRow", $result["Amount"], $xlsCellDesc);
$worksheet->write("I$xlsRow", $result["DisName"], $xlsCellDesc);
$worksheet->write("J$xlsRow", $result["Dispercent"], $xlsCellDesc);
$worksheet->write("K$xlsRow", $result["couponspercent"], $xlsCellDesc);
$worksheet->write("L$xlsRow", $result["couponsbaht"], $xlsCellDesc);
$worksheet->write("M$xlsRow", $result["Note"], $xlsCellDesc);
$worksheet->write("N$xlsRow","\r".$result["OutCode"], $xlsCellDesc);
$worksheet->write("O$xlsRow", $result["OutName"], $xlsCellDesc);
$worksheet->write("P$xlsRow", $onrecord, $xlsCellDesc);
$worksheet->write("Q$xlsRow", $testna, $xlsCellDesc);
$xlsRow++;
}
}
# เสร็จแล้วก็ส่งไฟล์ไปยัง Browser ครับแค่นี้ก็เสร็จแล้ว
$workbook->close();
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition: attachment; filename=".basename("DreamtoyReport.xls").";");
header("Content-Transfer-Encoding: binary\r\n");
header("Content-Length: ".filesize($fname));
readfile($fname);
unlink($fname);
exit();
?>
Tag : PHP, MySQL
Date :
2010-09-24 08:31:57
By :
muaeenth99
View :
4952
Reply :
7
ถามอะไรหน่อยครับ ของคุณนี่แสดงเป็นภาษไทยได้หรือเปล่าครับ ผมคิดว่าใช้คลาสเหมือนกันแต่ของผมมัน แสงดออกมเป็นภาษาต่างดาวครับ
Date :
2010-09-24 09:22:47
By :
- -
ตอนนี้ผมเปลี่ยนมาใช้ ของตัววนี้นะครับ รู้สึกว่าวิธีใช้จะคล้ายๆกัน
http://phpexcel.codeplex.com/
ดูใน doc ของตัวนี้ หน้า23 หน้าจะเป็นการ setformat แบบที่คุณต้องการนะครับ
Date :
2010-09-24 09:52:20
By :
- -
ของผมแสดงเป็นภาษาไทยได้นะครับ class ตัวนี้
แต่ ผมไม่มีตัว setformatt เลยอะครับ
ใครพอจะมีวิธีอื่นบ้างไหมอะครับ
ขอบคุณมากๆครับ
Date :
2010-09-24 14:44:28
By :
muaeenth99
ไป download ตัวนี้อะครับ $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setWrapText(true); ใช้ได้แน่นอน ลองดูเเล้ว ลักษณะการใช้งานก็คล้ายๆกัน (ผมว่าอันนี้ง่ายกว่าหน่อยๆอยู่ด้วยนะ)
Date :
2010-09-24 15:27:16
By :
- -
ตัวเดิมผม ยังไงก็ไม่สามารถทำให้มันขึ้นเลข 0 ขางหน้าได้เลยใช่ไหมครับ TT ขอบคุณครับ
Date :
2010-09-27 13:41:45
By :
muaeenth99
ถ้าใช้ PHPExcel
$objPHPExcel->getActiveSheet()->getCell('A1')->setValue(19);
$objPHPExcel->getActiveSheet()->getStyle('A1')->getNumberFormat()->setFormatCode('0000'); // will show as 0019 in Excel
บรทัดที่ 2 คือ กำหนดการแสดงค่าให้มันบอกกมาเป็น 0000 อย่าง A1 กำหนดให้มีค่า = 19
เวลามันแสดงค่าออกมาก็เป็น 0019 นะครับ ที่คุณต้องการใช่แบบนี้หรือเปล่า
Date :
2010-09-27 15:16:20
By :
- -
ไม่ใช่แบบนั้นครับ ที่ผมต้องการคือ ผมมี เลข 00145, 50568, 00098 อยู่แล้วอะครับ
แต่พอลง Excel มันกลับกลายเป็น 145,50568,98 ผมเลยเพิ่ม "\r" เข้าไป แล้วผลลัพท์ที่ได้ก็เป็น 00145,50568,00098 แต่ปัญหาติดที่
เพราะใช้ \r ข้างหน้าตัวเลขพวกนี้ เลยมีช่องว่างที่มองไม่เห็นเกิดขึ้น เวลาผมใส่ A นำหน้า ด้วยสูตร Excel เพื่อให้มันกลายเป็น A00145,A50568,A00098 เพื่อเอาไปเทียบกับตัว Code อีกที ไม่สามารถเทียบได้เนื่องจากมีช่องว่างข้างหน้าตัวเลข ต่อให้ผมมา setformat ทีหลังให้ column นั้นเป็น text แต่มันก็สายไปแล้วอะครับ มันมีช่องว่างอยู่แล้วเพราะ \r
ต้องใช่คำสั่ง Right ไปเพื่อเอาตัวเลข ไปทำสูตรแทนอะครับ TT
พอจะมีวิธีไหนอีกไหมอะครับ ขอบคุณมากๆครับ
Date :
2010-09-29 13:14:22
By :
muaeenth99
Load balance : Server 00