[PHP] PHPExcel 讀取/寫入Excel
PHPExcel 官方團隊已經停止維護了,現在官方團隊開發維護的是它的升級版 PHPExcel 擴充套件包,叫做 PhpSpreadsheet,功能更加強大。☞ PhpSpreadsheet升級版 PHPExcel laravel 框架下使用 PhpSpreadsheet:
1)切換到你想安裝 PhpSpreadsheet 的 laravel 專案目錄下
cd /Library/WebServer/Documents/laravel專案2)執行指令
composer require phpoffice/phpspreadsheet3)安裝成功的PhpSpreadsheet,會存放在
verdor\phpoffice\phpspreadsheet4)教學文件
☞ laravel 框架下 新手如何使用安裝 PhpSpreadsheet
☞ phpspreadsheet初次使用指引
☞ Laravel 的 PhpSpreadsheet 包入門
01/使用 PhpSpreadsheet 匯出 excel
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
class ExcelController extends Controller
{
public function index()
{
// 新增文件
$spreadsheet = new Spreadsheet();
$spreadsheet->createSheet();
$objActSheet= $spreadsheet->setActiveSheetIndex(0);
// 文件內容
$objActSheet->setCellValue('A1', '標題一')
->setCellValue('B1', '標題二');
// 輸出文件
header('Content-Type: application/vnd.ms-excel; charset=UTF-8');
header('Content-Disposition: attachment;filename="' . 'test' . '.xlsx"');
header('Cache-Control: max-age=0');
$writer = new Xlsx($spreadsheet);
$writer->save('php://output');
// 刪除清空
$spreadsheet->disconnectWorksheets();
unset($spreadsheet);
exit;
}
}
官網
☞ https://phpexcel.codeplex.com/☞ phpexcel範例包
☞ HTTP Content Streaming
| 用途 | 語法 |
|---|---|
| 宣告 | $objPHPExcel = new PHPExcel(); |
| 建立新的工作表 | $objPHPExcel->createSheet() |
| 寫入資料(取陣列) | $objPHPExcel->getActiveSheet()->fromArray(陣列, null, 'A1'); |
| 輸出Excel 2007 | header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename=檔名'); header('Cache-Control: max-age=0'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->save('php://output'); exit; [另法] 儲存 Excel 檔,存成 .xlsx 格式 $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); $objWriter->save(str_replace('.php', '.xlsx', __FILE__)); |
| 其他設定 | |
| 設定預設顯示的工作表 | $objPHPExcel->setActiveSheetIndex(0) |
| 設定標題 | $objPHPExcel->getActiveSheet()->setTitle(); |
| 調整儲存格欄寬:指定高度 | $objPHPExcel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(20); |
| 調整儲存格欄寬:指定寬度 | $objPHPExcel->getActiveSheet()->getColumnDimension($col)->setWidth(8); |
| 調整儲存格欄寬:自動高度 | $objPHPExcel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(-1); |
| 文字對齊方式(水平) | $objPHPExcel->getActiveSheet()->getStyle($col)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); |
| 文字對齊方式(垂直) | $objPHPExcel->getActiveSheet()->getStyle($col)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); |
| 在單格裡面換行 | $objPHPExcel->getActiveSheet()->getStyle($col)->getAlignment()->setWrapText(true); |
| 用途 | 語法 |
|---|---|
| 設定要被讀取的檔案 | $objPHPExcel = PHPExcel_IOFactory::load(檔名); |
| 寫入陣列(取資料) | $objPHPExcel->getActiveSheet()->toArray(null,true,true,true); |
01/建立 Excel2007 多個工作表
<?php
// [1]init
require_once 'PHPExcel.php';
$objPHPExcel = new PHPExcel();
for ($j = 0; $j <= 2; $j++) {
// [2]create
if ($j > 0)
$objPHPExcel->createSheet();
$objPHPExcel->setActiveSheetIndex($j);
// [3]format
$objPHPExcel->getActiveSheet()->setTitle();
$objPHPExcel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(25);
for($col = 'A'; $col !== 'D'; $col++) {
// 指定寬度
$objPHPExcel->getActiveSheet()->getColumnDimension($col)->setWidth(15);
// 水平置中
$objPHPExcel->getActiveSheet()->getStyle($col)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
// 垂直置中
$objPHPExcel->getActiveSheet()->getStyle($col)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
}
// [4]data
$arr_data = array();
$arr_data[0][0] = '欄位一';
$arr_data[0][1] = '欄位二';
$arr_data[0][2] = '欄位三';
$arr_data[1][0] = '資料一';
$arr_data[1][1] = '資料二';
$arr_data[1][2] = '資料三';
$arr_data[2][0] = '資料一';
$arr_data[2][1] = '資料二';
$arr_data[2][2] = '資料三';
$objPHPExcel->getActiveSheet()->fromArray($arr_data, null, 'A1');
}
// [5]open from the first sheet
$objPHPExcel->setActiveSheetIndex(0);
// [6]output
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="download.xlsx"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
exit;
?>
02/讀取 Excel2007 一個工作表( 方法一 )
<?php
header("Content-Type:text/html; charset=utf-8");
// 引入函式庫
require_once 'PHPExcel.php';
// 設定要被讀取的檔案,不使用中文檔名
$file = 'import.xlsx';
try {
$objPHPExcel = PHPExcel_IOFactory::load($file);
} catch(Exception $e) {
die('Error loading file "'.pathinfo($file,PATHINFO_BASENAME).'": '.$e->getMessage());
}
$arr_data = $objPHPExcel->getActiveSheet()->toArray(null, true, true, true);
// echo "<pre>";
// print_r($arr_data);
// echo "</pre>";
////////////////////////////////////////
// 開始列印
// 欄與列的index
$colindex = 0;
$rowindex = 0;
$rownull = true;
// 資料對應的欄位標題
$arr_title = array();
$arr_content = array();
foreach( $arr_data as $key => $col ){
// 讀取標題
if($rowindex == 0){
foreach ($col as $colkey => $colvalue){
array_push($arr_title, $colvalue);
}
}
// 讀取內容
if( $rowindex >= 1 ) {
foreach ( $col as $colkey => $colvalue ){
if( $colindex >= 0 ){
if( $colvalue != "" )
$rownull = false;
$arr_content[$rowindex][$colindex] = $colvalue;
}
$colindex++;
}
if($rownull && $rowindex > 0)
break;
$rownull = true;
$colindex = 0;
}
$rowindex++;
} //next $arr_data
echo "<h2>列印標題</h2>";
echo "<pre>";
print_r($arr_title);
echo "</pre>";
echo "<hr/>";
echo "<h2>列印內容</h2>";
echo "<pre>";
print_r($arr_content);
echo "</pre>";
?>
03/讀取 Excel2007 一個工作表( 方法二 )
<?php
header("Content-Type:text/html; charset=utf-8");
// 引入函式庫
require_once 'PHPExcel.php';
// 設定要被讀取的檔案,不使用中文檔名
$inputFileName = 'import.xlsx';
// Read your Excel workbook
try {
$inputFileType = PHPExcel_IOFactory::identify($inputFileName);
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objPHPExcel = $objReader->load($inputFileName);
} catch(Exception $e) {
die('Error loading file "'.pathinfo($inputFileName,PATHINFO_BASENAME).'": '.$e->getMessage());
}
// Get worksheet dimensions
$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow();
$highestColumn = $sheet->getHighestColumn();
// Loop through each row of the worksheet in turn
$rowData = array();
for ($row = 1; $row <= $highestRow; $row++){
// Read a row of data into an array
$rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row,
NULL,
TRUE,
FALSE);
// Insert row data array into your database of choice here
if ($row == 1)
echo "<h2>列印標題</h2>";
if ($row == 2)
echo "<hr/><h2>列印內容</h2>";
echo "<pre>";
print_r($rowData);
echo "</pre>";
}
?>
LARAVEL EXCEL Source
☞ Laravel Excel實現Excel/CSV檔案匯入匯出的功能詳解(合併單元格,設定單元格樣式)☞ Laravel Excel
☞ Laravel 外掛 PhpSpreadSheet 使用總結
☞ 如何在LARAVEL實作EXCEL匯入匯出功能
☞ Laravel之Excel匯入、匯出
☞ PhpSpreadsheet 使用教學 101 – 基本的安裝與使用
☞ 【Laravel】使用phpoffice/phpspreadsheet匯出資料
Source
☞ PHPExcel API☞ 憑空生出Excel檔
☞ Yii的框架使用PHPExcel擴展從數據庫導出Excel中
☞ [PHP]phpExcel常用功能備忘
☞ phpexcel 寫入到excel文檔
☞ Setting autosize column phpExcel
☞ PHP 輸出 Excel ,使用PHPExcel
☞ PHPExcel
☞ PHPExcel
☞ Using PHPExcel to make automatic generated excel files
☞ Create a simple 2007 XLSX Excel file [PHP]
☞ PHP export to xlsx? (**我使用這個方法輸出)
☞ phpExcel example
☞ PHPExcel – 讀取Excel資料 ( 範例從 MEGA 下載 )
☞ how to use phpexcel to read data and insert into database?
☞ PHPExcel outputting zeros as blank cells

沒有留言: