Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Laravel Excel选择图纸_Php_Laravel_Laravel Excel_Maatwebsite Excel - Fatal编程技术网

Php 使用Laravel Excel选择图纸

Php 使用Laravel Excel选择图纸,php,laravel,laravel-excel,maatwebsite-excel,Php,Laravel,Laravel Excel,Maatwebsite Excel,我正在使用非常有用的软件包 由于我喜欢让我的控制器远离excel导入代码的想法,我正在使用excel文件注入加载上载的文件,请参见此处: 这是我的Excel文件注入代码: StudentImport.php namespace App\Excel; class StudentImport extends \Maatwebsite\Excel\Files\ExcelFile { public function getFile() { return \Input:

我正在使用非常有用的软件包

由于我喜欢让我的控制器远离excel导入代码的想法,我正在使用excel文件注入加载上载的文件,请参见此处:

这是我的Excel文件注入代码:

StudentImport.php
namespace App\Excel;

class StudentImport extends \Maatwebsite\Excel\Files\ExcelFile {

    public function getFile()
    {
        return \Input::file('student_file');
    }

    public function getFilters()
    {
        return [];
    }

}
但是,我的问题是,我不明白在使用这种方法时在哪里运行诸如:
->selectSheets('mysheet')
之类的方法

在使用ExcelFile注入获取文件后,我当前的工作是在我的控制器中执行以下操作

ExcelController.php

namespace App\Excel;

class StudentImport extends \Maatwebsite\Excel\Files\ExcelFile {

    public function getFile()
    {
        return \Input::file('student_file');
    }

    public function getFilters()
    {
        return [];
    }

}
public function import(StudentImportFormRequest $request, StudentImport $import)
{
    $results = $import->get();

    foreach($results as $sheet) {
        $sheetTitle = $sheet->getTitle();

        if($sheetTitle === 'students') {
            foreach($sheet as $row) {
                // do something
            }
        }
    }

}
我相信我可能需要扩展ExcelFile类并添加一个新方法,该方法将作为selectSheets()方法的包装器,或者以某种方式将其添加到loadFile()方法中-这似乎是设置过滤器和设置的地方,所以我猜这是您可以添加特定工作表选择的地方

另外,我想知道如何将某些列设置为字符串,因为它们当前被读取为数字。目前,我将文本输出为浮点数(即,它们有以下小数点!),当我在不使用值绑定器的情况下对第一行(也是唯一一行)进行dd()时,我得到以下结果:

CellCollection {#862 ▼
  #title: null
  #items: array:8 [▼
    "name" => "John Smith"
    "refno" => "s123"
    "nid" => 1234567890.0
    "birth_date" => Carbon {#861 ▼
      +"date": "1971-01-05 00:00:00.000000"
      +"timezone_type": 3
      +"timezone": "UTC"
    }
    "is_active" => 1.0
    "course_title" => "Computer Science"
    "institution_id" => 1.0
    "course_id" => 1.0
  ]
}
我曾尝试实现文档中提到的ValueBinder:但尚未成功。我只有一列需要读作日期,其余的应该读作文本,以下代码不起作用:

namespace App\Excel;

use PHPExcel_Cell;
use PHPExcel_Cell_DataType;
use PHPExcel_Cell_IValueBinder;
use PHPExcel_Cell_DefaultValueBinder;

class StudentValueBinder extends PHPExcel_Cell_DefaultValueBinder implements PHPExcel_Cell_IValueBinder
{
    public function bindValue(PHPExcel_Cell $cell, $value = null)
    {
        if ($cell->getColumn() !== 'D') {

            $cell->setValueExplicit($value, PHPExcel_Cell_DataType::TYPE_STRING);

            return true;
        }

        // else return default behavior
        return parent::bindValue($cell, $value);
    }
}

任何建议都将不胜感激!谢谢。

getFile方法应该返回一个文件名:

namespace App\Excel 
class MyExcelClass {
public function getFile()
    {
        return storage_path('excel') . '/file.xls';
    }
}
存储路径只指向存储文件夹,然后指向传递给存储路径的任何子目录

因此,实际上StudentImport->getFile(),至少在文档中,只返回“/path/to/MyProject/storage/excel/file.xls;”

虽然可以进一步分离和扩展控件,但让我们从基本情况开始

在控制器中:

use Maatwebsite\Excel\Facades\Excel;
use App\Excel\MyExcelClass;
class ExcelController extends Controller
{
    public function importAndManipulate() {
        Excel::load(MyExcelClass::getFile(), function ($reader){
            $reader->first(); // get first sheet
            foreach($reader as $sheet) // loop through sheets
            {
               $sheetTitle = $sheet->getTitle();
            }
        });
    }
}
您也可以尝试$reader->selectSheet('NameOfSheet')。如果这不起作用,请尝试在加载工作表后或在回调中调用facade上的selectSheet

我承认文档可能很难解析。为什么不先在存储路径中的某个位置存储一个excel文件,然后将该路径硬编码到加载函数中呢


你找到这个问题的答案了吗?真的不记得了,对不起!我想你最好在这里寻求帮助: