ผู้เขียนต้นฉบับ: Podcast on the Iceberg เมื่อฉันเห็นบทความนี้ ฉันรู้สึกประหลาดใจมากกับความอดทนของผู้เขียนต้นฉบับ แม้ว่าเราจะใช้บางส่วนในชีวิตประจำวัน แต่ผู้เขียนไม่ได้ระบุไว้ทั้งหมด แต่ฉันใช้ลูกแพร์ ไลบรารี่ ฉันยังใช้ส่วนหัวของแพ็คด้วย และฉันก็ใช้ส่วนหัวที่ใช้ smarty เพื่อแทนที่ xml โดยไม่ต้องพูดถึง csv อิอิ (ฉันจะไม่พูดถึงวิธี COM หรอก มีหลายวิธีที่สามารถอ่านได้ ฉันยังได้เขียนบทความเกี่ยวกับการใช้ wps เพื่อสร้างคำด้วย ฯลฯ )
แต่พออ่านก็ใช้อันเดียวลืมไปว่าคืออะไรจึงต้องกลับไปอ่านโค้ด เพราะเป็นไปตามหลักการยืมเลยจำไม่ได้
ที่อยู่เดิม: http://xinsync.xju.edu.cn/index.php/archives/3858
เนื้อหาต้นฉบับ:
เมื่อเร็วๆ นี้ เนื่องจากความต้องการของโครงการ ฉันจำเป็นต้องพัฒนาโมดูลเพื่อส่งออกข้อมูลบางอย่างในระบบไปยัง Excel แก้ไข จากนั้นนำเข้ากลับไปยังระบบ ฉันใช้โอกาสนี้ค้นคว้าเกี่ยวกับเรื่องนี้ และนี่คือบทสรุปบางส่วน
โดยพื้นฐานแล้ว ไฟล์ที่ส่งออกมีสองประเภท:
1: รูปแบบที่เหมือน Excel จริงๆ แล้วนี่ไม่ใช่ไฟล์ Excel ในแง่ดั้งเดิม เป็นเพราะ Excel มีความเข้ากันได้สูงและสามารถเปิดได้อย่างถูกต้อง หลังจากแก้ไขไฟล์ประเภทนี้แล้วบันทึก โดยปกติระบบจะแจ้งให้คุณทราบว่าต้องการแปลงเป็นไฟล์ Excel หรือไม่
ข้อดี: เรียบง่าย
ข้อเสีย: การสร้างรูปแบบเป็นเรื่องยาก หากใช้สำหรับการนำเข้า คุณจะต้องเขียนโปรแกรมที่เกี่ยวข้องด้วยตนเอง
2: รูปแบบ Excel ซึ่งสอดคล้องกับ Excel ไฟล์ที่สร้างโดยวิธีนี้จะใกล้เคียงกับรูปแบบ Excel จริงมากขึ้น
หากอักขระที่อ่านไม่ออกปรากฏขึ้นเมื่อส่งออกภาษาจีน คุณสามารถลองแปลงสตริงเป็น gb2312 ได้ ตัวอย่างเช่น แปลง $yourStr จาก utf-8 เป็น gb2312:
$yourStr = mb_convert_encoding(”gb2312″, “UTF-8″, $yourStr);
มีหลายวิธีที่แสดงรายละเอียดไว้ด้านล่างนี้
1. ส่งออก PHP ไปยัง Excel
1: คำแนะนำแรกคือ PHPExcel ที่ได้รับความนิยมอย่างมาก เว็บไซต์อย่างเป็นทางการ: http://www.codeplex.com/PHPExcel
สามารถนำเข้าและส่งออกได้ และสามารถส่งออกเป็นรูปแบบ office 2007 ซึ่งเข้ากันได้กับปี 2003 เช่นกัน
แพ็คเกจที่ดาวน์โหลดประกอบด้วยเอกสารและตัวอย่างที่คุณสามารถศึกษาได้ด้วยตัวเอง
นี่คือตัวอย่างการคัดลอกย่อหน้า:
รหัสพีเอชพี
<?php
-
* PHPExcel
-
* ลิขสิทธิ์ (C) 2549 - 2550 PHPExcel
-
* ไลบรารีนี้เป็นซอฟต์แวร์ฟรี คุณสามารถแจกจ่ายซ้ำและ/หรือ
* แก้ไขภายใต้เงื่อนไขของ GNU Lesser General Public
* ใบอนุญาตตามที่เผยแพร่โดย Free Software Foundation
* เวอร์ชัน 2.1 ของใบอนุญาต หรือ (ตามตัวเลือกของคุณ) เวอร์ชันที่ใหม่กว่า
-
* ห้องสมุดนี้เผยแพร่ด้วยความหวังว่าจะเป็นประโยชน์
* แต่ไม่มีการรับประกันใดๆ; โดยไม่มีแม้แต่การรับประกันโดยนัยของ
* ความสามารถในการค้าขายหรือความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ ดู GNU
* ใบอนุญาตสาธารณะทั่วไปสำหรับรายละเอียดเพิ่มเติม
-
* คุณควรได้รับสำเนาของ GNU Lesser General Public
* ใบอนุญาตพร้อมกับไลบรารีนี้ หากไม่ใช่ ให้เขียนถึงซอฟต์แวร์เสรี
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 สหรัฐอเมริกา
-
* @หมวดหมู่ PHPExcel
* @แพ็คเกจ PHPExcel
* @copyright ลิขสิทธิ์ (c) 2549 - 2550 PHPExcel ( http://www.codeplex.com/PHPExcel )
* @license http://www.gnu.org/licenses/lgpl.txt LGPL
* @เวอร์ชั่น 1.5.0, 23-10-2550
-
/** รายงานข้อผิดพลาด */
error_reporting(E_ALL);
/** รวมเส้นทาง **/
set_include_path(get_include_path() . PATH_SEPARATOR . '../คลาส/');
/** PHPExcel */
รวม 'PHPExcel.php';
/** PHPExcel_Writer_Excel2007 */
รวม 'PHPExcel/Writer/Excel2007.php';
// สร้างวัตถุ PHPExcel ใหม่
echo date('H:i:s') ” สร้างวัตถุ PHPExcel ใหม่n”;
$objPHPExcel = PHPExcel ใหม่();
// ตั้งค่าคุณสมบัติ
echo date('H:i:s') ” ตั้งค่าคุณสมบัติn”;
$objPHPExcel->getProperties()->setCreator("มาร์เทน Balliauw");
$objPHPExcel->getProperties()->setLastModifiedBy(”มาร์เทน Balliauw”);
$objPHPExcel->getProperties()->setTitle(”เอกสารทดสอบ Office 2007 XLSX”);
$objPHPExcel->getProperties()->setSubject(”เอกสารทดสอบ Office 2007 XLSX”);
$objPHPExcel->getProperties()->setDescrīption("เอกสารทดสอบสำหรับ Office 2007 XLSX สร้างโดยใช้คลาส PHP");
$objPHPExcel->getProperties()->setKeywords(”office 2007 openxml php”);
$objPHPExcel->getProperties()->setCategory(”ไฟล์ผลการทดสอบ”);
//เพิ่มข้อมูลบางส่วน
echo date('H:i:s') ” เพิ่มข้อมูลบางส่วนn”;
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->setCellValue('A1′, 'สวัสดี');
$objPHPExcel->getActiveSheet()->setCellValue('B2', 'โลก!');
$objPHPExcel->getActiveSheet()->setCellValue('C1′, 'สวัสดี');
$objPHPExcel->getActiveSheet()->setCellValue('D2', 'โลก!');
// เปลี่ยนชื่อแผ่นงาน
echo date('H:i:s') ” เปลี่ยนชื่อชีตn”;
$objPHPExcel->getActiveSheet()->setTitle('ง่าย');
// ตั้งค่าดัชนีแผ่นงานที่ใช้งานอยู่ในแผ่นงานแรก ดังนั้น Excel จะเปิดแผ่นงานนี้เป็นแผ่นงานแรก
$objPHPExcel->setActiveSheetIndex(0);
// บันทึกไฟล์ Excel 2007
echo date('H:i:s') ” เขียนลงในรูปแบบ Excel2007n”;
$objWriter = PHPExcel_Writer_Excel2007 ใหม่($objPHPExcel);
$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
//เอคโค่เสร็จแล้ว
echo date('H:i:s') ” เขียนไฟล์เสร็จแล้วrn”;
2. ใช้ที่อยู่ดาวน์โหลดคลาส Spreadsheet_Excel_Writer ของ pear: http://pear.php.net/package/Spreadsheet_Excel_Writer
คลาสนี้ขึ้นอยู่กับ OLE ที่อยู่ดาวน์โหลด: http://pear.php.net/package/OLE
โปรดทราบว่ารูปแบบของไฟล์ Excel ที่ส่งออกนั้นค่อนข้างเก่า หากคุณบันทึกหลังจากแก้ไข คุณจะได้รับแจ้งว่าจะแปลงเป็นรูปแบบที่ใหม่กว่าหรือไม่
แต่คุณสามารถกำหนดรูปแบบซึ่งมีประสิทธิภาพมาก
รหัสพีเอชพี
<?php
need_once 'สเปรดชีต/Excel/Writer.php';
// การสร้างสมุดงาน
$workbook = Spreadsheet_Excel_Writer ใหม่();
// ส่งส่วนหัว HTTP
$สมุดงาน->ส่ง('test.xls');
// การสร้างแผ่นงาน
$worksheet =& $workbook->addWorksheet('แผ่นงานแรกของฉัน');
//ข้อมูลจริง
$แผ่นงาน->เขียน(0, 0, 'ชื่อ');
$แผ่นงาน->เขียน(0, 1, 'อายุ');
$แผ่นงาน->write(1, 0, 'John Smith');
$แผ่นงาน->เขียน(1, 1, 30);
$แผ่นงาน->write(2, 0, 'โยฮันน์ ชมิดต์');
$แผ่นงาน->เขียน(2, 1, 31);
$worksheet->write(3, 0, 'ฮวน เอร์เรรา');
$แผ่นงาน->เขียน(3, 1, 32);
//มาส่งไฟล์กัน
$สมุดงาน->ปิด();
-
3: ใช้ smarty เพื่อสร้างรูปแบบการรองรับไฟล์ XML หรือ HTML ที่สอดคล้องกับข้อกำหนดของ Excel ซึ่งเป็นโซลูชันการส่งออกที่สมบูรณ์แบบ อย่างไรก็ตาม ไฟล์ที่ส่งออกโดยพื้นฐานแล้วจะเป็นไฟล์ XML หากใช้สำหรับการนำเข้า จะต้องดำเนินการแยกกัน
สำหรับรายละเอียด โปรดดูโพสต์ของ rardge hero: http://bbs.chinaunix.net/viewthread.php?tid=745757
ควรสังเกตว่าหากจำนวนแถวในตารางที่ส่งออกไม่แน่นอน วิธีที่ดีที่สุดคือใส่ "ss:" ในเทมเพลต: ลบสิ่งต่างๆ เช่น ExpandedColumnCount=”5″ ss:ExpandedRowCount=”21″”
4. ใช้ฟังก์ชันแพ็คเพื่อพิมพ์สัญลักษณ์ตัวแบ่งประโยคที่จำลองรูปแบบ Excel ซึ่งใกล้เคียงกับรูปแบบมาตรฐานของ Excel มากขึ้น หลังจากแก้ไขและบันทึกใน Office 2003 แล้ว จะไม่แสดงข้อความแจ้งวิธีนี้
ข้อเสียคือไม่มีรูปแบบ
รหัสพีเอชพี
<?php
// ส่งส่วนหัว
header("Pragma: สาธารณะ");
ส่วนหัว ("หมดอายุ: 0");
header("การควบคุมแคช: ต้องตรวจสอบใหม่, หลังตรวจสอบ = 0, ตรวจสอบล่วงหน้า = 0");
header("ประเภทเนื้อหา: application/force-download");
header("ประเภทเนื้อหา: application/octet-stream");
header("ประเภทเนื้อหา: แอปพลิเคชัน/ดาวน์โหลด");;
header(”การจัดการเนื้อหา: ไฟล์แนบ;ชื่อไฟล์=test.xls “);
header("เนื้อหา-โอน-เข้ารหัส: binary ");
//เซลล์ข้อมูล XLS
xlsBOF();
xlsWriteLabel(1,0,"บรรทัด Excel ของฉัน");
xlsWriteLabel(2,0,"บรรทัด Excel ของฉันที่สอง: ");
xlsWriteLabel(2,1,"สวัสดีทุกคน");
xlsEOF();
ฟังก์ชั่น xlsBOF() {
แพ็คเสียงสะท้อน ("ssssss", 0×809, 0×8, 0×0, 0×10, 0×0, 0×0);
กลับ;
-
ฟังก์ชั่น xlsEOF() {
แพ็คเสียงสะท้อน ("ss", 0×0A, 0×00);
กลับ;
-
ฟังก์ชั่น xlsWriteNumber($Row, $Col, $Value) {
echo pack("sssss", 0×203, 14, $Row, $Col, 0×0);
echo pack("d", $Value);
กลับ;
-
ฟังก์ชั่น xlsWriteLabel($Row, $Col, $Value) {
$L = strlen($มูลค่า);
echo pack("ssssss", 0×204, 8 + $L, $Row, $Col, 0×0, $L);
สะท้อน $Value;
กลับ;
-
-
อย่างไรก็ตาม ผู้เขียนล้มเหลวเมื่อใช้งานบนระบบ Linux 64 บิต และสัญลักษณ์การแบ่งประโยคทั้งหมดกลายเป็นอักขระที่อ่านไม่ออก
5. วิธีใช้แท็บและการขึ้นบรรทัดใหม่
อักขระแท็บ "t" ช่วยให้ผู้ใช้สามารถแยกคอลัมน์ในบรรทัดเดียวกันได้ และอักขระขึ้นบรรทัดใหม่ "tn" สามารถเปิดบรรทัดถัดไปได้
<?php
header("ประเภทเนื้อหา: application/vnd.ms-execl");
header("การจัดการเนื้อหา: ไฟล์แนบ; filename=myExcel.xls");
header("Pragma: ไม่มีแคช");
ส่วนหัว ("หมดอายุ: 0");
/*บรรทัดแรก*/
ก้อง "สวัสดี""t";
สะท้อน "โลก""t";
สะท้อน “tn”;
/*จุดเริ่มต้นของบรรทัดที่สอง*/
echo “นี่คือบรรทัดที่สอง””t”;
สะท้อน “สวัสดี สาวน้อย””t”;
สะท้อน “tn”;
-
6. ใช้คอม
หาก PHP ของคุณสามารถเปิดโมดูล com ได้ คุณสามารถใช้มันเพื่อส่งออกไฟล์ Excel ได้
รหัสพีเอชพี
<?PHP
$filename = “c:/spreadhseet/test.xls”;
$ชีท1 = 1;
$sheet2 = “แผ่นงาน2″;
$excel_app = new COM("Excel.application") หรือ Die ("ไม่ได้เชื่อมต่อ");
พิมพ์ “ชื่อแอปพลิเคชัน: {$excel_app->แอปพลิเคชัน->ค่า}n”;
พิมพ์ “เวอร์ชันที่โหลด: {$excel_app->Application->version}n”;
$Workbook = $excel_app->Workbooks->Open(”$filename”) หรือ Die(”ไม่ได้เปิด $filename $Workbook”);
$แผ่นงาน = $สมุดงาน->แผ่นงาน($sheet1);
$แผ่นงาน->เปิดใช้งาน;
$excel_cell = $แผ่นงาน->ช่วง(”C4″);
$excel_cell->เปิดใช้งาน;
$excel_result = $excel_cell->มูลค่า;
พิมพ์ “$excel_resultn”;
$แผ่นงาน = $สมุดงาน->แผ่นงาน($sheet2);
$แผ่นงาน->เปิดใช้งาน;
$excel_cell = $แผ่นงาน->ช่วง(”C4″);
$excel_cell->เปิดใช้งาน;
$excel_result = $excel_cell->มูลค่า;
พิมพ์ “$excel_resultn”;
#วิธีปิดอินสแตนซ์ทั้งหมดของ Excel:
$สมุดงาน->ปิด;
unset($แผ่นงาน);
unset($สมุดงาน);
$excel_app->สมุดงาน->ปิด();
$excel_app->ออก();
ไม่ได้ตั้งค่า($excel_app);
?>
ตัวอย่างที่ดีกว่า: http://blog.chinaunix.net/u/16928/showart_387171.html
1. การนำเข้า PHP เข้าสู่ Excel
1: ยังคงใช้ PHPExcel เว็บไซต์อย่างเป็นทางการ: http://www.codeplex.com/PHPExcel
2: ใช้ PHP-ExcelReader ที่อยู่ดาวน์โหลด: http://sourceforge.net/projects/phpexcelreader
ตัวอย่าง:
รหัสพีเอชพี
<?php
need_once 'Excel/reader.php';
// ExcelFile($ชื่อไฟล์, $การเข้ารหัส);
$data = Spreadsheet_Excel_Reader ใหม่();
// ตั้งค่าการเข้ารหัสเอาต์พุต
$data->setOutputEncoding('utf8′);
$data->read('jxlrwtest.xls');
error_reporting(E_ALL ^ E_NOTICE);
สำหรับ ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
สำหรับ ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
echo """.$data->sheets[0]['cells'][$i][$j]"",";
-
เสียงสะท้อน “n”;
-
?>
----------
ไซต์นี้ใช้ข้อตกลงลิขสิทธิ์ครีเอทีฟคอมมอนส์ ซึ่งต้องมีการแสดงที่มา ไม่ใช่เชิงพาณิชย์ และความสอดคล้องกัน ไซต์นี้ยินดีรับการพิมพ์ซ้ำที่ไม่ใช่เชิงพาณิชย์ แต่ต้องระบุว่ามาจาก "ชีวิตเรียบง่ายของลุงอ้วน" และต้องคงลิงก์ดั้งเดิมไว้ด้วย ระบุชื่อต้นฉบับและลิงก์