我遇到了同样的问题.使用Laravel 4.这是我的控制器的代码:
public function uploadData()
{
$file = Input::file('data')->getRealPath();
\Excel::load($file, function($reader) {
echo "<pre>";
$reader->setDelimiter('|');
print_r($reader->get());
});
}
Run Code Online (Sandbox Code Playgroud)
输出未在管道分隔符上拆分,而是将其视为一个长字符串.这是一个示例:
Maatwebsite\Excel\Collections\RowCollection Object
(
[title:protected] => Worksheet
[items:protected] => Array
(
[0] => Maatwebsite\Excel\Collections\CellCollection Object
(
[title:protected] =>
[items:protected] => Array
(
[upc_numberitem_numberqty_availunit_pricedescriptioncolorqty_on_ponext_avail_dt] => 040176424354|53607-3037|0|14.50|PACK-N-GO DUFFELS 20?"|BIRDS ON A WIRE/LEAF GREEN||
)
)
[1] => Maatwebsite\Excel\Collections\CellCollection Object
(
[title:protected] =>
[items:protected] => Array
(
[upc_numberitem_numberqty_availunit_pricedescriptioncolorqty_on_ponext_avail_dt] => 040176414850|53607-3054|0|14.50|PACK-N-GO DUFFELS 20?"|BLACK/BLACK/BLACK||
)
)
)
Run Code Online (Sandbox Code Playgroud)
我在这里做错了吗?为什么管道字符上没有解析行?
如果我更改了delimiter设置config/csv.php,则会正确解析文件,结果如下所示:
Maatwebsite\Excel\Collections\RowCollection Object
(
[title:protected] …Run Code Online (Sandbox Code Playgroud) 所以我创建了一个 PHP 控制器来处理由 JS 发布的导出数据。问题是我可以看到它在控制台中创建了一些东西,但文件下载从未开始。我尝试使用 ->store (laravel excel) 并将其保存在导出文件夹中,但当我尝试使用时再次
return \Response::download($result);
Run Code Online (Sandbox Code Playgroud)
它仍然不会开始下载。我遇到的问题只是开始下载。
角度控制器
$scope.exportMatrix = function () {
var postData = {list: $scope.list, matrix: $scope.matrix};
$http({
method: 'POST',
url: '/export',
dataType: 'obj',
data: postData,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).success(function (data) {
console.log(data);
}).error(function (data) {
console.log("failed");
});
}
Run Code Online (Sandbox Code Playgroud)
路线
Route::post('/export', 'ExportController@export');
Run Code Online (Sandbox Code Playgroud)
PHP控制器
<?php namespace App\Http\Controllers;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App;
use Excel;
use Response;
class ExportController extends Controller {
public function export()
{
$excel = App::make('excel');
Excel::create('Test', …Run Code Online (Sandbox Code Playgroud) 我正在使用Maatwebsite/Laravel-Excel将一些数据导入我的laravel应用程序.
我循环使用excel的行,验证数据然后保存它,但如果我得到验证错误,我想从Excel :: load()函数外部返回$ error变量.可能吗?
public function import()
{
Excel::load(Input::file('excelFile'), function ($reader) {
foreach ($reader->toArray() as $row) {
if($everythingOK){
//do stuff
} else {
$errors[] = 'error';
}
}
});
return $errors;
}
Run Code Online (Sandbox Code Playgroud) 我有laravel项目,可以使用laravel-excel插件从.csv文件将数据上传到mysql。
当我尝试从.csv文件上传数据到mysql时,出现错误“找不到类'ZipArchive'”。如果我使用的是.csv,则无法理解“ zip”与它的关系,我正在使用:VMware Debian服务器,PHP 7.1
在我的PC上,一切正常。
你好亲爱的我想创建一个客户刀片,为用户提供导入和导出 Excel 文件的功能。我的customers_blade.php 看起来像这样;
@extends('layouts.app')
@section('content')
<div class="panel-heading">Import and Export Data Into Excel File</div>
<div class="panel-body">
{!! Form::open(array('route'=>'customer.import','method'=>'POST','files'=>'true')) !!}
<div class="row">
<div class="col-xs-10 col-sm-10 col-md-10">
@if(Session::has('success'))
<div class="alert alert-success">
{{Session :: get('message')}}
</div>
@if(Session::has(warning))
<div class="alert alert-warning">
{{Session::get('message')}}
</div>
@endif
<div class="form-group">
{!! Form::label('sample_file','Select File to Import:',['class'=>'col-md-3']) !!}
<div class="col-md-9">
{!! Form::file('customers',array('class'=>'form-control')) !!}
{!! $error->first('products','<p class="alert alert-danger">:message</p') !!}
</div>
</div>
</div>
<div class="col-xs-2 col-sm-2 col-md-2 text-center">
{!! Form::submit('Upload',['class'=>'btn btn-success']) !!}
</div>
</div>
{!! Form::close() !!}
</div>
@endsection
Run Code Online (Sandbox Code Playgroud)
但是当我转到页面时会发生此错误。我该如何编辑它。你能帮我么?
解析错误:语法错误,文件意外结束,需要 elseif …
我想上传大型excel文件。但是因为文件包含很多行,加载速度很慢,我收到了这个错误:
Controller.php 第 457 行中的 FatalErrorException:超过了 120 秒的最大执行时间
我已经把它放在我的 .htaccess 上:
<IfModule mod_php5.c>
php_value max_execution_time 1500
php_value upload_max_filesize 15M
</IfModule>
Run Code Online (Sandbox Code Playgroud)
我还在控制器顶部添加了这个:
ini_set('memory_limit', '3000M');
ini_set('max_execution_time', '0');
Run Code Online (Sandbox Code Playgroud)
我还在 php.ini 中更改了 max_execution_time:
max_execution_time = 300
Run Code Online (Sandbox Code Playgroud)
并在 config.inc.php 上添加:
$cfg['ExecTimeLimit'] = 0;
Run Code Online (Sandbox Code Playgroud)
我想知道为什么它根本不起作用并不断让我陷入那个错误......代码有没有遗漏?任何帮助将不胜感激,谢谢!
我已将 Maatwebsite/Laravel-Excel 从 2.1 升级到 3.1。某些方法已被弃用。
这是 2.1 版的代码。
$data = Excel::load($path, function($reader) {})->get()->toArray();
Run Code Online (Sandbox Code Playgroud)
当我使用 2.1 时它可以工作,但升级后,它是错误的
调用未定义的方法 Maatwebsite\Excel\Excel::load()
对于 3.1 版,我尝试更改为
$data = Excel::import($path, function($reader) {})->get()->toArray();
Run Code Online (Sandbox Code Playgroud)
我知道这可能不是正确的语法。
这是我使用 2.1 开发时的完整代码。
$path = $request->file('csv_file')->getRealPath();
if ($request->has('header')) {
$data = Excel::import($path, function($reader) {})->get()->toArray();
} else {
$data = array_map('str_getcsv', file($path));
}
if (count($data) > 0) {
if ($request->has('header')) {
$csv_header_fields = [];
foreach ($data[0] as $key => $value) {
$csv_header_fields[] = $key;
}
}
$csv_data = array_slice($data, 0, 8);
$csv_data_file = …Run Code Online (Sandbox Code Playgroud) 我已经被困了一段时间来弄清楚以下异常,任何帮助都会被分配。我们正在 Laravel 项目上使用 AWS Lambda 服务。我们正在使用Laravel Excel将大量数据导出到 CSV 文件,并通过 Laravel SQS 队列来完成此操作。
PHP 版本:7.2
Laravel 框架:7.30.1
Laravel Excel:3.1
例外:
Aws\Sqs\Exception\SqsException /tmp/vendor/aws/aws-sdk-php...
stage.ERROR: Error executing "SendMessage" on "https://sqs.eu-central-
1.amazonaws.com"; AWS HTTP error: Client error: `POST https://sqs.eu-
central-1.amazonaws.com/` resulted in a `413 Request Entity Too Large`
response:
HTTP content length exceeded 1662976 bytes.
Unable to parse error information from response - Error parsing XML: String could not be parsed as
XML {"exception":"[object] (Aws\\Sqs\\Exception\\SqsException(code: 0): Error executing
\"SendMessage\" on \"https://sqs.eu-central-1.amazonaws.com/"; AWS …Run Code Online (Sandbox Code Playgroud) 我正在尝试检查用户上传的excel文件是否具有正确的列/第一行/属性,然后再读入其他行.我正在使用Laravel 4和MaatWebsite的 Laravel Excel.
我创建了一个函数,允许用户通过导入excel文件来更新系统数据库的employee表.
现在正确的Excel文件,有,比方说,3列:firstname,lastname,和username.如果excel文件具有所有这些属性/列,我现在将读取以下每一行并验证每一行,这实际上不是我现在问题的一部分.
但是如果excel文件中没有3个属性/列中的任何一个,我将忽略该请求并返回错误.
我尝试使用它,它获取lastname属性:
$sample = Excel::selectSheetsByIndex(0)->load($readFile, function($reader){})->get(array("lastname"));
Run Code Online (Sandbox Code Playgroud)
但即使lastname没有找到,$ sample仍然不为空,所以我无法检查是否lastname存在.
如何检查属性/列是否存在?
更新:
如果属性行之后的第一行具有所有需要的属性,那么我选择的答案将完美地运行.例如:如果有值firstname,lastname和username.
但是,如果first name缺少第一个非属性行(引用列名的属性行)的值(或任何attritbute值),则提供的脚本将返回false,即使excel文件具有所有firstname,lastname和username属性.
所以我将脚本修改为:
$excelChecker = Excel::selectSheetsByIndex(0)->load('path/to/file', function($reader){})->get()->toArray();
$excelIsValid = false;
Run Code Online (Sandbox Code Playgroud)
然后我循环遍历所有的结果,并检查是否至少一次,全部所需要的值(firstname,lastname,和username)已经被设置或都存在.
foreach($excelChecker as $ex){
if(isset($ex["lastname"]) && isset($ex["firstname"]) && isset($ex["username"])){
$excelIsValid = true;
}
}
Run Code Online (Sandbox Code Playgroud)说明:
如果$excelIsValid仍然false …
我正在尝试使用 laravel-excel 导入一个 excel 文件,所以我使用了这个算法
$result = Excel::load('public/uploads/test.xlsx',function($reader){
})->get();
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误: RowIterator.php 第 125行中的 PHPExcel_Exception: 第 2 行超出范围 (2 - 1)
laravel-excel ×10
laravel ×8
php ×7
phpexcel ×3
laravel-4 ×2
laravel-5 ×2
amazon-sqs ×1
angularjs ×1
aws-lambda ×1
blade ×1
excel ×1
exception ×1
export ×1
scope ×1