使用 PHPSpreadsheet 打开受密码保护的 XLSX 文件

B 7*_*B 7 6 php phpoffice phpspreadsheet

我正在尝试使用PHPSpreadsheet文档)打开受密码保护的 Excel 文件 (.xlsx )。我知道密码,但我找不到打开它的方法。

load()方法\PhpOffice\PhpSpreadsheet\Reader\Xlsx不能插入密码,当我尝试加载文件时,它会返回错误(当然)。

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
$spreadsheet = $reader->load('hello world.xlsx');
$sheet = $spreadsheet->getActiveSheet();
echo $sheet->getCell('A1')->getValue() . "\n";
Run Code Online (Sandbox Code Playgroud)

这是错误

警告:ZipArchive::getFromName():第 311 行 /PHPOffice/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php 中的 Zip 对象无效或未初始化 警告:ZipArchive::getFromName():无效或未初始化的 Zip 对象在 /PHPOffice/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php 第 313 行警告:为 /PHPOffice/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php 中的 foreach() 提供的参数无效第 350 行警告:ZipArchive::getFromName():/PHPOffice/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php 中的 Zip 对象无效或未初始化,第 311 行警告:ZipArchive::getFromName():无效或313 行 /PHPOffice/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php 中未初始化的 Zip 对象警告:在 /PHPOffice/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php 第 397 行中为 foreach() 提供的参数无效警告:ZipArchive::getFromName():/PHPOffice/vendor/phpoffice 中的 Zip 对象无效或未初始化/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php on line 311 警告:ZipArchive::getFromName(): Invalid or uninitialized Zip object in /PHPOffice/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php on line 313 警告:在第 1855 行的 /PHPOffice/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php 中为 foreach() 提供的参数无效警告:ZipArchive::close():/PHPOffice/ 中的 Zip 对象无效或未初始化供应商/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php 在线 1883php 上线 1883php 上线 1883getFromName():第 311 行 /PHPOffice/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php 中的 Zip 对象无效或未初始化 警告:ZipArchive::getFromName():/PHPOffice/vendor 中的 Zip 对象无效或未初始化/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php 第 313 行警告:为 /PHPOffice/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php 中的 foreach() 提供的参数无效,第 1855 行警告: ZipArchive::close(): 1883 行 /PHPOffice/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php 中的 Zip 对象无效或未初始化getFromName():第 311 行 /PHPOffice/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php 中的 Zip 对象无效或未初始化 警告:ZipArchive::getFromName():/PHPOffice/vendor 中的 Zip 对象无效或未初始化/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php 第 313 行警告:为 /PHPOffice/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php 中的 foreach() 提供的参数无效,第 1855 行警告: ZipArchive::close(): 1883 行 /PHPOffice/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php 中的 Zip 对象无效或未初始化/PHPOffice/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php 第 313 行中的 Zip 对象无效或未初始化 警告:为 /PHPOffice/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/ 中的 foreach() 提供的参数无效Reader/Xlsx.php 在线 1855 警告:ZipArchive::close():无效或未初始化的 Zip 对象在 /PHPOffice/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php 在线 1883/PHPOffice/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php 第 313 行中的 Zip 对象无效或未初始化 警告:为 /PHPOffice/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/ 中的 foreach() 提供的参数无效Reader/Xlsx.php 在线 1855 警告:ZipArchive::close():无效或未初始化的 Zip 对象在 /PHPOffice/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php 在线 1883

这段代码如何处理密码?

Jay*_*nia 4

欢迎您查看我的PHPDecryptXLSXWithPassword存储库。

它也适用于 DOCX/PPTX 文件,但这个答案特定于您的问题:首先使用密码解密文件,然后将解密的文件与 PHPSpreadsheet 一起使用。

这是一个例子:

require_once('PHPDecryptXLSXWithPassword.php');

$encryptedFilePath = 'hello world.xlsx';
$password = 'mypassword'; // password to "open" the file
$decryptedFilePath = 'temp_path_to_decrypted_file.xlsx';

decrypt($encryptedFilePath, $password, $decryptedFilePath);

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
$spreadsheet = $reader->load($decryptedFilePath);
$sheet = $spreadsheet->getActiveSheet();
echo $sheet->getCell('A1')->getValue() . "\n";
Run Code Online (Sandbox Code Playgroud)

注意:这是一个实验代码,所以请谨慎使用。请勿在生产中使用!