我在用laravel excel https://laravel-excel.com/导出 csv 文件。要导出,代码如下,
return Excel::download(new Export(results,$header), "test.csv");
Export.php 文件就像,
namespace App\AllClass;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\WithHeadings;
class Export implements FromCollection,WithHeadings
{
private $myArray;
private $header;
public function __construct($myArray,$header){
$this->myArray = $myArray;
$this->header = $header;
}
public function collection()
{
$data = mb_convert_encoding($this->myArray,"SJIS", "UTF-8");
// dump($data);
return collect($data);
}
public function headings(): array
{
$header = mb_convert_encoding($this->header,"SJIS", "UTF-8");
// dump($header);
return $header;
}
}
如您所见,我在创建 Excel 之前转换数据。无需转换,我可以完美导出 UTF-8 格式。但转换为shift-jis后,它删除了所有日语字符。但是,如果我在返回之前转储标头,它会向我显示乱码数据;不是像 csv 文件那样的空字符串。
我解决了。
我在这里分享一下我的解决方案。
Laravel Excel 默认不支持。
但我们可以通过简单的方式做到这一点。
-
下载前获取 csv 内容:\Excel::raw
-
转换为另一种编码:mb_convert_encodinghttps://docs.laravel-excel.com/3.1/exports/collection.html#storing-raw-contents https://docs.laravel-excel.com/3.1/exports/collection.html#storing-raw-contents
-
下载 csv。
$exportedObject= new \App\Exports\ClassExport($exportDataArray, $fileName);
$csvContent = \Excel::raw($exportedObject, $exportedObject->writerType);
$csvContent = mb_convert_encoding($csvContent, 'SJIS', '自动');
// 就我而言,我将 csv 上传到 S3。
$storageInstance = \Storage::disk('s3_import_csvs');
$putFileOnStorage = $storageInstance->put($fileName, $csvContent);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)