如何在 laravel 中读取 xls 文件 - laravel-excel

S.M*_*ian 5 php excel laravel laravel-5 laravel-excel

我正在使用laravel-excel库来读取 Excel 文件。

http://www.maatwebsite.nl/laravel-excel/docs/import

   //http://localhost:8000/assets/panel/excel/test123.xls
    $address = URL::to('/assets/panel/excel/').'/test123.xls';
   // dd($address);
    Excel::load($address, function($reader) {

        $results = $reader->get();
        dd($results);

    });
Run Code Online (Sandbox Code Playgroud)

该文件http://localhost:8000/assets/panel/excel/test123.xls存在,但我收到此错误:

Could not open C:\xampp\htdocs\tahrircenter\http://localhost:8000/assets/panel/excel/test123.xls for reading! File does not exist.
Run Code Online (Sandbox Code Playgroud)

我知道错误的含义,但是如何使用我的地址而不是该库中的目录地址?

Dmy*_*bak 4

解决方案1

刚刚测试,以下内容应该有效:

// /routes/web.php
Route::get('excel-test', function () {
    // http://localhost/assets/panel/excel/test123.xls
    // /public/assets/panel/excel/test123.xls
    $address = './assets/panel/excel/test123.xls';
    Excel::load($address, function($reader) {
        $results = $reader->get();
        dd($results);
    });
});
Run Code Online (Sandbox Code Playgroud)

Laravel Excel 基于PHPOffice的 PHPExcel 代码

PHPExcel 文档中的示例之一具有以下代码: https://github.com/PHPOffice/PHPExcel/blob/1.8/Documentation/Examples/Reader/exampleReader01.php#L29

解决方案2

public_path()您也可以使用Laravel 辅助函数:

Route::get('excel-test', function () {
    $address = public_path('assets/panel/excel/test123.xls');
    Excel::load($address, function($reader) {
        $results = $reader->get();
        dd($results);
    });
});
Run Code Online (Sandbox Code Playgroud)

讨论

生成错误的文件部分:

// /vendor/phpoffice/phpexcel/Classes/PHPExcel/Reader/Excel5.php
public function canRead($pFilename)
{
    // Check if file exists
    if (!file_exists($pFilename)) {
        throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! File does not exist.");
    }
    // ...
}
Run Code Online (Sandbox Code Playgroud)

如您所见,PHPExcel 使用file_exists()PHP 函数来检查文件是否存在。file_exists()只能检查本地路径,不能检查远程路径/URL。