
本文介绍了如何使用 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 PhpOffice/PhpSpreadsheet/IOFactory;
// 文件路径
$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 (/PhpOffice/PhpSpreadsheet/Reader/Exception $e) {
die('Error loading file: ' . $e->getMessage());
}
?>
登录后复制
代码解释:
- require ‘vendor/autoload.php’;: 引入 Composer 的自动加载器,以便加载 PHPSpreadsheet 类。
- use PhpOffice/PhpSpreadsheet/IOFactory;: 导入 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 请求头,并根据需要修改代码以处理不同的数据类型和格式。
以上就是使用 PHP 无需下载直接读取在线 Excel 文件的详细内容,更多请关注php中文网其它相关文章!