使用 PHP 无需下载直接读取在线 Excel 文件

使用 PHP 无需下载直接读取在线 Excel 文件

本文介绍了如何使用 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);  ?>

代码解释:

  1. dfCurl($url) 函数: 该函数接收一个 URL 作为参数,用于下载文件。
  2. curl_init($url): 初始化一个 cURL 会话,并指定要请求的 URL。
  3. $dir = ‘../’; 和 $fileName = basename($url);: 定义保存文件的目录和文件名。basename($url) 函数用于从 URL 中提取文件名。
  4. $saveFilePath = $dir . $fileName;: 构建完整的文件保存路径。
  5. $fp = fopen($saveFilePath, ‘wb’);: 打开一个文件用于写入二进制数据 (wb 模式)。
  6. $headers 数组: 包含 HTTP 请求头信息。 重要的是设置 Content-Type 为 application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,告诉服务器我们期望接收 Excel 文件。
  7. curl_setopt($ch, CURLOPT_FILE, $fp);: 设置 cURL 选项,将 cURL 的输出直接写入到文件句柄 $fp 中。
  8. curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);: 设置自定义的 HTTP 请求头。
  9. curl_exec($ch);: 执行 cURL 会话,发送请求并接收响应。
  10. curl_close($ch);: 关闭 cURL 会话。
  11. 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()); }  ?>

代码解释:

  1. require ‘vendor/autoload.php’;: 引入 Composer 的自动加载器,以便加载 PHPSpreadsheet 类。
  2. use PhpOfficePhpSpreadsheetIOFactory;: 导入 IOFactory 类,用于加载电子表格文件。
  3. $filePath = ‘../FinancialStatement-2021-I-AALI.xlsx’;: 指定要读取的 Excel 文件的路径。请替换为实际的文件路径。
  4. IOFactory::load($filePath): 使用 IOFactory::load() 方法加载电子表格文件。
  5. $spreadsheet->getActiveSheet(): 获取活动的工作表。
  6. $worksheet->getHighestRow() 和 $worksheet->getHighestColumn(): 获取工作表中的最高行和最高列索引。
  7. 循环遍历: 使用嵌套的循环遍历每一行和每一列,并使用 $worksheet->getCell($col . $row)->getValue() 获取单元格的值。
  8. 错误处理: 使用 try…catch 块来捕获加载文件时可能发生的异常。

注意事项:

立即学习PHP免费学习笔记(深入)”;

  • 确保已经安装了 PHPSpreadsheet 库。
  • 根据实际情况修改 $filePath 变量,指定要读取的 Excel 文件的路径。
  • 可以根据需要修改代码,以处理不同的数据类型和格式。

总结

本文介绍了如何使用 PHP 从 URL 直接读取在线 Excel 文件,无需先下载到本地。通过使用 cURL 库下载 Excel 文件,并使用 PHPSpreadsheet 库解析和处理数据,可以轻松实现该功能。在实际应用中,需要根据目标网站的要求调整 HTTP 请求头,并根据需要修改代码以处理不同的数据类型和格式。

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享