本文介绍了如何使用 php 从 URL 直接读取在线 excel 文件,无需先下载到本地。通过使用 cURL 库,我们可以模拟浏览器请求,获取 Excel 文件内容,并使用 PHPSpreadsheet 库解析和处理数据。文章提供了详细的代码示例和注意事项,帮助开发者轻松实现该功能。
使用 cURL 下载 Excel 文件
首先,我们需要使用 PHP 的 cURL 库来下载 Excel 文件。cURL 是一个强大的工具,可以用来发送 http 请求,获取服务器的响应。以下是一个使用 cURL 下载 Excel 文件的示例代码:
<?php function dfCurl($url) { $ch = curl_init($url); $dir = '../'; $fileName = basename($url); $saveFilePath = $dir . $fileName; $fp = fopen($saveFilePath, 'wb'); $headers = [ 'authority: www.idx.co.id', 'method: GET', 'scheme: https', 'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', 'cache-control: no-cache', 'pragma: no-cache', 'user-agent: Mozilla/5.0 (linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Mobile Safari/537.36', 'Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ]; curl_setopt($ch, CURLOPT_FILE, $fp); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_exec($ch); curl_close($ch); fclose($fp); } // 示例 URL $url = 'https://www.idx.co.id/Portals/0/StaticData/ListedCompanies/Corporate_Actions/New_Info_JSX/Jenis_Informasi/01_Laporan_Keuangan/02_Soft_Copy_Laporan_Keuangan//Laporan%20Keuangan%20Tahun%202021/TW1/AALI/FinancialStatement-2021-I-AALI.xlsx'; dfCurl($url); ?>
代码解释:
- dfCurl($url) 函数: 该函数接收一个 URL 作为参数,用于下载文件。
- curl_init($url): 初始化一个 cURL 会话,并指定要请求的 URL。
- $dir = ‘../’; 和 $fileName = basename($url);: 定义保存文件的目录和文件名。basename($url) 函数用于从 URL 中提取文件名。
- $saveFilePath = $dir . $fileName;: 构建完整的文件保存路径。
- $fp = fopen($saveFilePath, ‘wb’);: 打开一个文件用于写入二进制数据 (wb 模式)。
- $headers 数组: 包含 HTTP 请求头信息。 重要的是设置 Content-Type 为 application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,告诉服务器我们期望接收 Excel 文件。
- curl_setopt($ch, CURLOPT_FILE, $fp);: 设置 cURL 选项,将 cURL 的输出直接写入到文件句柄 $fp 中。
- curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);: 设置自定义的 HTTP 请求头。
- curl_exec($ch);: 执行 cURL 会话,发送请求并接收响应。
- curl_close($ch);: 关闭 cURL 会话。
- fclose($fp);: 关闭文件句柄。
注意事项:
立即学习“PHP免费学习笔记(深入)”;
- 确保 PHP 已经安装并启用了 cURL 扩展。
- 根据实际情况修改 $dir 变量,指定文件保存的目录。
- 根据目标网站的要求,可能需要调整 HTTP 请求头。
使用 PHPSpreadsheet 读取 Excel 文件
下载 Excel 文件后,我们可以使用 PHPSpreadsheet 库来读取和处理文件中的数据。PHPSpreadsheet 是一个强大的 PHP 库,可以用来创建、读取和修改各种电子表格文件,包括 Excel 文件。
安装 PHPSpreadsheet:
可以使用 composer 来安装 PHPSpreadsheet:
composer require phpoffice/phpspreadsheet
读取 Excel 文件的示例代码:
<?php require 'vendor/autoload.php'; // 引入 Composer 自动加载器 use PhpOfficePhpSpreadsheetIOFactory; // 文件路径 $filePath = '../FinancialStatement-2021-I-AALI.xlsx'; // 替换为实际的文件路径 try { // 使用 IOFactory 加载电子表格 $spreadsheet = IOFactory::load($filePath); // 获取活动的工作表 $worksheet = $spreadsheet->getActiveSheet(); // 获取最高行和列索引 $highestRow = $worksheet->getHighestRow(); $highestColumn = $worksheet->getHighestColumn(); // 循环遍历每一行 for ($row = 1; $row <= $highestRow; ++$row) { // 循环遍历每一列 for ($col = 'A'; $col <= $highestColumn; ++$col) { // 获取单元格的值 $cellValue = $worksheet->getCell($col . $row)->getValue(); // 输出单元格的值 echo $cellValue . "t"; } echo "n"; } } catch (PhpOfficePhpSpreadsheetReaderException $e) { die('Error loading file: ' . $e->getMessage()); } ?>
代码解释:
- require ‘vendor/autoload.php’;: 引入 Composer 的自动加载器,以便加载 PHPSpreadsheet 类。
- use PhpOfficePhpSpreadsheetIOFactory;: 导入 IOFactory 类,用于加载电子表格文件。
- $filePath = ‘../FinancialStatement-2021-I-AALI.xlsx’;: 指定要读取的 Excel 文件的路径。请替换为实际的文件路径。
- IOFactory::load($filePath): 使用 IOFactory::load() 方法加载电子表格文件。
- $spreadsheet->getActiveSheet(): 获取活动的工作表。
- $worksheet->getHighestRow() 和 $worksheet->getHighestColumn(): 获取工作表中的最高行和最高列索引。
- 循环遍历: 使用嵌套的循环遍历每一行和每一列,并使用 $worksheet->getCell($col . $row)->getValue() 获取单元格的值。
- 错误处理: 使用 try…catch 块来捕获加载文件时可能发生的异常。
注意事项:
立即学习“PHP免费学习笔记(深入)”;
- 确保已经安装了 PHPSpreadsheet 库。
- 根据实际情况修改 $filePath 变量,指定要读取的 Excel 文件的路径。
- 可以根据需要修改代码,以处理不同的数据类型和格式。
总结
本文介绍了如何使用 PHP 从 URL 直接读取在线 Excel 文件,无需先下载到本地。通过使用 cURL 库下载 Excel 文件,并使用 PHPSpreadsheet 库解析和处理数据,可以轻松实现该功能。在实际应用中,需要根据目标网站的要求调整 HTTP 请求头,并根据需要修改代码以处理不同的数据类型和格式。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END