PHP บันทึกตารางใน Excel

ติดต่อ

โกลอฟนา (ข้อมูลที่ดึงมาจากฐานข้อมูล mysql) เพื่อให้บรรลุผลสำเร็จฉันเป็นนักอนุรักษ์ Zend Framework

ฉันต้องทำการเปลี่ยนแปลงข้อมูลของฉันก่อนที่จะส่งออกไปยัง Excel

ในความเป็นจริง การสร้างบัญชีเงินสดมูลค่าหลายพันบาทมีประสิทธิภาพน้อยกว่า

หลังจากอ่านเอกสารมากมายฉันก็เมามาย

ฉันไม่เข้าใจจริงๆ ว่าพวกเขาจะพิมพ์ฉันอย่างไร

ฉันต้องการลูกแพร์จริงๆหรือ?

คุณจำเป็นต้องร่ายมนตร์ห้องสมุดชั้นเรียนของคุณหรือไม่? ไม่มีไควิธีง่ายๆ

หาเงิน? เบื้องหลังฉันจะแนะนำให้คุณรู้จักกับไลบรารี PHPExcel ของ PHPExcel

มันเป็นเรื่องจริง รองรับรูปแบบที่แตกต่างกัน คุณสามารถทำงานกับการจัดรูปแบบภาพและรูปแบบที่เรียบง่ายด้วย vikoristan

คุณสามารถหาข้อมูลเพิ่มเติมเกี่ยวกับราคาบนหน้าเว็บของคุณ: http://phpexcel.codeplex.com/ (ตอนนี้ PHPExcel ถูกย้ายไปที่ https://github.com/PHPOffice/PHPExcel)

ก้น Vikoristan:

$objPHPExcel = PHPExcel ใหม่();

/** คุณสามารถตั้งค่าคุณสมบัติได้หลายอย่าง */ $objPHPExcel->getProperties()->setCreator("My company") ->setLastModifiedBy("John Doe") ->setTitle("Annual report") ->setSubject("Sales ") ->setDescription("รายงานยอดขายประจำปีโดย John Doe") ->setCategory("การเงิน");

/** เลือกหนึ่งแผ่น */ $activeSheet = $objPHPExcel->setActiveSheetIndex(0);

/** เพียงแค่ตั้งค่าของเซลล์ */ $activeSheet->setCellValue("A1", "plural");

"เนื้อหาเซลล์แรกของฉัน" "เนื้อหาเซลล์ที่สองของฉัน" "เนื้อหาเซลล์ที่สามของฉัน" "บรรทัดที่สอง เนื้อหาเซลล์แรก" "ฯลฯ" "ฯลฯ

แถวสกินแสดงถึงแถวของ Excel คุณวางไว้ระหว่าง ด้วยอุ้งเท้าพับและแยกออกเป็นอาการโคม่า

โปรดใช้ความระมัดระวังหากคุณมีข้อมูลที่อาจทำให้ CSV ของคุณเสียหาย และสร้างแถวใหม่ที่ไม่จำเป็น

ด้วย Google เพียงเล็กน้อย คุณจะรู้สิ่งนี้: http://www.the-art-of-web.com/php/dataexport/

การเตรียมข้อมูล

$data = array(array("firstname" => "Mary", "lastname" => "Johnson", "age" => 25), array("firstname" => "Amanda", "lastname" => " Miller", "อายุ" => 18), array("firstname" => "James", "lastname" => "Brown", "age" => 31), array("firstname" => "Patricia", "lastname" => "Williams", "age" => 7), array("firstname" => "Michael", "lastname" => "Davis", "age" => 43), array("firstname" => "ซาราห์", "นามสกุล" => "มิลเลอร์", "อายุ" => 24), array("firstname" => "Patrick", "lastname" => "Miller", "age" => 27) );

ขั้นตอนแรกคือการแสดงข้อมูลในรูปแบบที่มีตัวแบ่งแท็บ (CSV สามารถจัดรูปแบบหรือซับซ้อนกว่าเล็กน้อยได้) สำหรับผู้ที่เราเป็น vikoryst รหัสที่น่ารังเกียจคือ:เราตั้งค่าประเภทแทนข้อความ/ธรรมดา เพื่อให้สามารถดูผลลัพธ์ได้ง่ายขึ้นในเบราว์เซอร์

ไม่เช่นนั้นก็เศษชิ้นส่วน

รูปแบบ HTML

พื้นหลังจะแสดงเป็นข้อความหนึ่งแถว แถวแรกที่แสดงจะเป็นส่วนหัวของฟิลด์ (บางครั้งชื่อของฟิลด์อาจถูกแสดง)ค่าจะถูกแชร์โดยแท็บ \t และแถวที่ขยายแถว \n

ผลลัพธ์อาจมีลักษณะดังนี้:

คนแรกที่เหลือ ริเวอร์ มารี จอห์นสัน 25 อแมนดา มิลเลอร์ 18 เจมส์ บราวน์ 31 แพทริเซีย วิลเลียมส์ 7 ไมเคิล เดวิส 43 ซาราห์ มิลเลอร์ 24 แพทริค มิลเลอร์ 27

.
รหัสนี้มีจุดอ่อนที่อาจไม่ชัดเจนในทันที
หากไม่มีวิธีอื่นในการถ่ายโอนข้อมูลแบบตารางจาก PHP ไปยัง Excel ฉันจะอธิบายวิธีที่ดูเหมือนจะง่ายและใช้งานได้น้อยที่สุด สิ่งสำคัญที่ควรทราบเป็นพิเศษคือฉันไม่ได้พูดถึงการสร้างไฟล์ xls แต่อธิบายวิธีลบข้อมูลเมื่อความช่วยเหลือจากเอ็กเซล

เพื่อให้ผู้ใช้มีข้อมูลไม่เพียงพอที่จะทำเครื่องหมายรายละเอียดในโปรแกรม
ก่อนอื่น สิ่งที่ต้องทำคือการโพสต์ข้อความบนเพจของเราไปยังสคริปต์ที่สร้างส่วนหัวต่อไปนี้:
header("Pragma: สาธารณะ");
ส่วนหัว ("หมดอายุ: 0");
header("การควบคุมแคช: ต้องตรวจสอบใหม่, หลังตรวจสอบ = 0, ตรวจสอบล่วงหน้า = 0");
header("การควบคุมแคช: ส่วนตัว", false);
header("ประเภทเนื้อหา: application/x-msexcel");
header("การจัดการเนื้อหา: attachment; filename=\"" . iconv("UTF-8", "CP1251", $object->getFileName()) . "\";");
ส่วนหัว ("การเข้ารหัสเนื้อหาการถ่ายโอน: ไบนารี");

header("ความยาวเนื้อหา: " . $object->getFileSize());
$object – วัตถุทรงกลมในสุญญากาศ ซึ่งผู้อ่านนำไปใช้ตามความเหมาะสมที่สุด
วัตถุประสงค์ของ getFileName() และ getFileSize() นั้นชัดเจนจากชื่อ ที่นี่คุณสามารถเห็นความแตกต่างที่ไม่ชัดเจนอย่างหนึ่ง (สำหรับผู้ที่เดาได้) - getFileName() สามารถใช้เพื่อส่งคืนชื่อไฟล์ได้ แต่ถ้าคุณต้องการให้เบราว์เซอร์เปิดเนื้อหาใน Excel นามสกุลไฟล์อาจเป็น xls .ฉันยังไม่ได้ค้นพบสิ่งใหม่ ทุกอย่างถูกประดิษฐ์ขึ้นต่อหน้าฉัน รวมถึงสิ่งที่จะอธิบายด้านล่าง

ดังที่ระบุไว้ในความคิดเห็นก่อนบันทึกย่อ Excel ทำงานได้ดีกว่ามากกับ XML
แต่ข้อได้เปรียบที่ยิ่งใหญ่ที่สุดอาจไม่ใช่ความเร็ว แต่เป็นความสามารถที่กว้างขวาง

ฉันจะไม่หลงทางในเน็ต แต่ฉันจะชี้ก้นง่ายๆ และส่งไปให้

คำอธิบายรายงาน แท็กทั้งหมดดังนั้นหลังจากสร้างส่วนหัวแล้ว เราจำเป็นต้องจัดเตรียมหน่วยงานที่เกี่ยวข้องฉันวางแผนที่จะสร้างตารางด้วยวิธีการต่อไปนี้: เสียงสะท้อน $object->getContent(); และฉันสร้างตารางโดยใช้ Smarty:ดังนั้นหลังจากสร้างส่วนหัวแล้ว เราจำเป็นต้องจัดเตรียมหน่วยงานที่เกี่ยวข้องดังนั้นหลังจากสร้างส่วนหัวแล้ว เราจำเป็นต้องจัดเตรียมหน่วยงานที่เกี่ยวข้อง

( foreach จาก=$data.header item=caption)
($คำบรรยายชื่อคอลัมน์)

ตัวอย่างเช่น ฉันจะทำให้ตารางเรียบง่ายที่สุดเท่าที่จะเป็นไปได้ คุณสามารถจัดการแอตทริบิวต์จำนวนมากได้
เป็นเรื่องน่ายินดีเป็นอย่างยิ่งที่ทราบว่าการติดตั้งใช้งานไม่จำเป็นต้องใช้ไลบรารีของบุคคลที่สาม

ตามคำอธิบาย วิธีการหมุนหินนั้นใช้ได้กับโปรเจ็กต์เดียวและเป็นสิ่งที่ผู้ใช้คาดหวัง โดยไม่ได้ตระหนักเลยว่าข้อมูลที่แสดงนั้นไม่ใช่เอกสาร MS Office

สามารถอ่านรายงานเกี่ยวกับโครงสร้าง XML ที่สามารถวิเคราะห์ได้ใน MS Excel คนรวยมีงานทำ PHP ที่เกี่ยวข้องกับ MySQL เนื่องจากจำเป็นต้องส่งออกข้อมูลจากฐานข้อมูลในรูปแบบ xls เพื่อให้ผู้ที่ต้องการข้อมูลสามารถขอรับได้จากโปรแกรมเอ็กเซล

หรือเพียงแค่ koristuvachs คงจะประหลาดใจกับการส่งส่วยนี้

ฉันมีความต้องการเช่นนี้เมื่อเร็วๆ นี้ และวันนี้ฉันจะค้นหาว่าจะทำให้เป็นจริงได้อย่างไร

ฉันจะบอกคุณทันทีว่าวิธีนี้ให้อภัยได้ แต่เป็นเรื่องปกติที่จะเข้าไปมีส่วนร่วม

สำหรับผู้เริ่มต้น ฉันจะชี้ให้เห็นไฟล์ xls ส่วนท้าย ในโปรแกรม Excel การแสดงภาพจะมีลักษณะดังนี้:

ไม่เช่นนั้น รูปภาพและสไตล์ที่ดูเหมือนมาตรฐานก็ไม่มีอะไรให้เข้าใจนอกจากส่วนหัวของบทความและข้อมูลเอง

ก่อนที่ฉันจะมาถึงตัวเลือกการแสดงภาพนี้ ฉันพยายามแสดงภาพรูปแบบ csv แต่มันดูงุ่มง่ามเล็กน้อย จากนั้นฉันก็พยายามวาดตารางและบันทึกด้วยส่วนขยาย xls ซึ่งกลายเป็นวิธีที่ผิดเช่นกัน จะอธิบายมัน ทำให้ฉันควบคุมได้เต็มที่

และฉันจะแบ่งปันกับคุณตอนนี้ ในการเริ่มต้น ฉันจะให้โค้ดทั้งหมดที่ฉันแสดงความคิดเห็นไว้มากที่สุดเท่าที่จะเป็นไปได้ คุณสามารถดูและบันทึกด้วยส่วนขยาย php ขั้นสูงแล้วลองใช้ดู เพียงอย่าลืมลงทะเบียนการตั้งค่าการเชื่อมต่อไปที่ ฐานข้อมูล):

ส่งออกข้อมูลจาก MySQL ไปยัง Excel ใน PHP

และเพียงเพื่อให้คุณเข้าใจว่าฉันกำลังทำลายข้อมูล ฉันจะสร้างตารางง่ายๆ ในฐานข้อมูล ( ฉันชื่อทดสอบ ตารางทดสอบ:
1 รหัส ชื่อ
2 ชื่อ อีวานอฟ
2 อีวาน เปตรอฟ
xlsData = pack("ssssss", 0x809, 0x08, 0x00,0x10, 0x0, 0x0);

) // อะไรคือฟังก์ชันตัวเลข RecNumber($row, $col, $value)( $this->xlsData .= pack("sssss", 0x0203, 14, $row, $col, 0x00); $this-> xlsData . = pack("d", $value); return; //ฟังก์ชันข้อความ RecText($row, $col, $value)( $len = strlen($value); $this->xlsData .= pack (" s*", 0x0204, 8 + $len, $row, $col, 0x00, $len); $this->xlsData .= $value; return; ) // หมายเลขที่จะแทรกฟังก์ชัน InsertNumber($value)( ถ้า ($ นี้->countCol == $this->totalCol) ( $this->countCol = 0; $this->countRow++; ) $this->RecNumber($this->countRow, $this->countCol, $ $this->countCol++; return; ) // แทรกฟังก์ชันข้อความ InsertText($value)( if ($this->countCol == $this->totalCol) ( $this->countCol = 0; $this- >countRow++; ) $this->RecText($this->countRow, $this->countCol, $value);$this->countCol++; return; // ย้ายไปยังฟังก์ชันแถวใหม่ GoNewLine())( $this ->countCol = 0 $this->countRow++; return; ) //สิ้นสุดฟังก์ชันข้อมูล EndData() ( $this->xlsData .= pack("ss", 0x0A, 0x00); return; ) // บันทึกฟังก์ชันไฟล์ SaveFile ($fileName)( $this->fileName = $fileName; $นี่->SendFile(); ) // ไฟล์ที่กำลังส่ง ฟังก์ชั่น SendFile())( $this->EndData(); header (" Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT"); Pragma: no -cache"); ส่วนหัว ("ประเภทเนื้อหา: application/x-msexcel"); ส่วนหัว ("การจัดการเนื้อหา: ไฟล์แนบ; ; ) ) ) if(isset($_GET["id"])) ( // ตัวกรองที่กำหนด $id = mysql_real_escape_string(stripslashes(htmlspecialchars($_GET["id"],ENT_QUOTES)))); $filename = "File_id_".$id; // ตั้งชื่อไฟล์ $excel = new ExportToExcel() ; // สร้างอินสแตนซ์ของคลาส $sql="SELECT * FROM test.test โดยที่ id = $id";//set to base $rez= mysql_query($sql); ; ->InsertText("ชื่อ"); $excel->InsertText("ชื่อ"); $excel->GoNewLine(); row=mysql_fetch_assoc($rez))( $excel->InsertNumber($r ow["id " ]); $excel->InsertText($row["firstname"]); $excel->InsertText($row["name"]); $excel->GoNewLine(); ); -แนวคิดทั้งหมดอยู่ที่ฟังก์ชัน หีบห่อ()ซึ่งแพ็คข้อมูลลงในแถวไบนารี และในทางกลับกัน เราก็เติมข้อมูลที่เรารวบรวมจากฐานข้อมูลในแถวนี้อย่างสม่ำเสมอ MySql.

สำหรับฟังก์ชั่นฉุกเฉินเพิ่มเติม

mysql_query()

และคุณสามารถเลือกสองแถวที่มีรหัสเท่ากับ 2

และตอนนี้ ใครก็ตามที่คุณอนุญาตให้แสดงข้อมูลเป็นภาพ คุณก็สามารถส่งออกข้อมูลเหล่านั้นไปยังของคุณได้อย่างง่ายดาย คอมพิวเตอร์ท้องถิ่นผ่าน เว็บอินเตอร์เฟส- วิธีนี้มีประโยชน์ทั้งสำหรับผู้ร่วมให้ข้อมูลในองค์กร ที่กำลังพัฒนาโปรแกรมสำหรับองค์กรของตน และสำหรับผู้ร่วมให้ข้อมูลในเว็บไซต์ของคุณบนอินเทอร์เน็ต