PHPExcel 是一个强大的 PHP 库,用于读写 Excel 文件。它支持多种格式,如 XLS, XLSX 等,并提供了丰富的功能来处理数据、格式化和生成复杂的 Excel 文档。
PHPExcel 是一个强大的工具,用于在 PHP 中读写 Excel 文件,它支持多种格式,包括 XLSX、XLS、CSV 和 TSV 等,本文将深入探讨 PHPExcel 的使用方法,包括如何安装、基本操作、数据导入导出以及常见问题解答。
一、PHPExcel 安装
在使用 PHPExcel 之前,首先需要安装它,你可以通过 Composer 来安装 PHPExcel:
composer require phpoffice/phpexcel
如果你还没有安装 Composer,可以参考 [Composer 官方文档](https://getcomposer.org/) 进行安装。
二、基本操作
创建一个新的工作簿
<?php require 'vendor/autoload.php'; use PHPExcel; $objPHPExcel = new PHPExcel(); $objPHPExcel->setActiveSheetIndex(0); $objActSheet = $objPHPExcel->getActiveSheet(); $objActSheet->setCellValue('A1', 'Hello'); $objActSheet->setCellValue('A2', 'World'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('hello_world.xls'); ?>
读取现有的 Excel 文件
<?php require 'vendor/autoload.php'; use PHPExcel_IOFactory; $inputFileName = 'path_to_file.xls'; try { $objPHPExcel = PHPExcel_IOFactory::load($inputFileName); } catch (Exception $e) { die('Error loading file: ' . $e->getMessage()); } // Get the active sheet $sheet = $objPHPExcel->getActiveSheet(); echo $sheet->getCell('A1')->getValue(); // 输出第一个单元格的值 ?>
设置单元格样式
<?php require 'vendor/autoload.php'; use PHPExcel; $objPHPExcel = new PHPExcel(); $objPHPExcel->setActiveSheetIndex(0); $objActSheet = $objPHPExcel->getActiveSheet(); // 设置单元格值 $objActSheet->setCellValue('A1', 'Bold Text'); // 设置单元格样式 $objPHPExcel_Style = new PHPExcel_Style(); $objPHPExcel_Style->getFont()->setBold(true); $objActSheet->getStyle('A1')->applyFromArray($objPHPExcel_Style->getFont()); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('styled_text.xls'); ?>
三、数据导入导出
从数据库导入数据到 Excel
<?php require 'vendor/autoload.php'; use PHPExcel; use PHPExcel_IOFactory; use PHPExcel_Style_Border; use PHPExcel_Style_Fill; use PHPExcel_Writer_Excel2007; // 创建新的工作簿 $objPHPExcel = new PHPExcel(); $objSheet = $objPHPExcel->setActiveSheetIndex(0); // 连接数据库并获取数据 $conn = new PDO("mysql:host=localhost;dbname=test", "username", "password"); $stmt = $conn->query("SELECT * FROM users"); $data = $stmt->fetchAll(PDO::FETCH_ASSOC); // 添加标题行 $columns = array_keys($data[0]); $objSheet->fromArray($columns, NULL, 'A1'); // 从A1开始填充标题行 // 添加数据行 $rowNumber = 2; foreach ($data as $row) { $objSheet->fromArray($row, NULL, 'A' . $rowNumber); $rowNumber++; } // 自动调整列宽 $objSheet->getColumnDimension('A')->setAutoSize(true); $objSheet->getColumnDimension('B')->setAutoSize(true); $objSheet->getColumnDimension('C')->setAutoSize(true); // 保存文件 $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->save('users_data.xlsx'); ?>
从 Excel 导入数据到数据库
<?php require 'vendor/autoload.php'; use PHPExcel_IOFactory; use PHPExcel_Reader_Excel2007; use PDO; $inputFileName = 'path_to_file.xlsx'; $conn = new PDO("mysql:host=localhost;dbname=test", "username", "password"); $stmt = $conn->prepare("REPLACE INTO users (id, name, email) VALUES (?, ?, ?)"); try { $objPHPExcel = PHPExcel_IOFactory::load($inputFileName); } catch (Exception $e) { die('Error loading file: ' . $e->getMessage()); } $sheet = $objPHPExcel->getActiveSheet(); foreach ($sheet->getRowIterator() as $row) { $cellIterator = $row->getCellIterator(); $cellIterator->setIterateOnlyExistingCells(false); // 这个很重要,否则会跳过空单元格 foreach ($cellIterator as $cell) { if (!is_null($cell)) { $stmt->bindParam(1, $cell->getRow()); // id $stmt->bindParam(2, $cell->getValue()); // name $stmt->bindParam(3, $cell->getCalculatedValue()); // email } else { $stmt->bindParam(1, null); // id $stmt->bindParam(2, null); // name $stmt->bindParam(3, null); // email } } $stmt->execute(); } ?>
四、相关问答 FAQs
Q1: 如何设置单元格背景颜色?
A1: 你可以使用PHPExcel_Style
类来设置单元格的背景颜色。
<?php require 'vendor/autoload.php'; use PHPExcel; use PHPExcel_Style; use PHPExcel_Writer_Excel2007; $objPHPExcel = new PHPExcel(); $objPHPExcel->setActiveSheetIndex(0); $objActSheet = $objPHPExcel->getActiveSheet(); $objActSheet->setCellValue('A1', 'Red Background'); $objPHPExcel_Style = new Style(); $objPHPExcel_Style->applyFromArray([ 'fill' => [ 'type' => PHPExcel_Style_Fill::FILL_SOLID, 'startcolor' => [255, 0, 0], // 红色 ] ]); $objActSheet->getStyle('A1')->applyFromArray($objPHPExcel_Style->getFill()); $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); $objWriter->save('red_background.xlsx'); ?>
Q2: 如何保护 Excel 文件中的单元格?
A2: 你可以使用PHPExcel_Style
类来设置单元格的保护属性。
<?php require 'vendor/autoload.php'; use PHPExcel; use PHPExcel_Style; use PHPExcel_Writer_Excel2007; $objPHPExcel = new PHPExcel(); $objPHPExcel->setActiveSheetIndex(0); $objActSheet = $objPHPExcel->getActiveSheet(); $objActSheet->setCellValue('A1', 'Protected Cell'); $objPHPExcel_Style = new Style(); $objPHPExcel_Style->applyFromArray([ 'locked' => true, // 锁定单元格,防止编辑 'hidden' => false, // 隐藏公式,但显示结果 ]); $objActSheet->getProtection()->setSheet(true); // 启用工作表保护 $objActSheet->getProtection()->setSort(true); // 允许排序 $objActSheet->getProtection()->setAutoFilter(true); // 允许自动筛选 $objActSheet->getProtection()->setInsertRows(true); // 允许插入行 $objActSheet->getProtection()->setFormatCells(true); // 允许格式化单元格 $objActSheet->getProtection()->setFormatColumns(true); // 允许格式化列 $objActSheet->getProtection()->setLockedCells('A1'); // 保护特定单元格,如 A1 $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); $objWriter->save('protected_cell.xlsx'); ?>
以上就是关于“phpexcel”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!