使用过滤器(块)给出错误

时间:2018-08-29 04:25:57

标签: php excel laravel laravel-excel

我正在使用Laravel-Excel 2.1。我正在尝试使用chunk()读取导入的大型Excel文件,但出现错误“方法noHeading不存在。”

我的原始代码

此代码可以很好地读取导入的文件。

$column_number = 5;
$rows = Excel::load('storage/app/public/upload/myfiles.xlsx', function($reader) use ($column_number)
{
    $reader->noHeading();
    $reader->takeColumns($column_number);
    $reader->setDateFormat('d-m-Y');

})->get();

按照文档中的说明使用块之后

此代码给出了Method noHeading does not exist.错误。请注意,我添加了filter('chunk')chunk(250

$column_number = 5;
$rows = Excel::filter('chunk')->load('storage/app/public/upload/myfiles.xlsx')->chunk(250, function($reader) use ($column_number)
{
    $reader->noHeading();
    $reader->takeColumns($column_number);
    $reader->setDateFormat('d-m-Y');

})->get();

2 个答案:

答案 0 :(得分:0)

传递给您的闭包的$reader变量是ExcelParser的实例,而不是LaravelExcelReader的实例,因此没有noHeading()方法。 Excel::filter()确实返回了读者,因此您应该可以这样做:

$column_number = 5;
$rows = Excel::filter('chunk')
    ->noHeading()
    ->takeColumns($column_number)
    ->setDateFormat('d-m-Y');
    ->load('storage/app/public/upload/myfiles.xlsx')
    ->chunk(250, function($results) {return $results;});

虽然完全未经测试!

答案 1 :(得分:-2)

我认为您需要像下面那样更新代码,

IEnumerable<string> GetMyList(string str)
{
    foreach(Match m in Regex.Matches(str, @"(?:<td.*?>)(.*?)(?:<\/td>)"))
        yield return m.Groups[1].Value;
}