【问题标题】:tables export into to csv files表导出到 csv 文件
【发布时间】:2017-11-16 19:40:21
【问题描述】:

在 laravel 5.5 项目中,我希望我的一些表导出到 csv 文件,我得到了这个http://www.maatwebsite.nl/laravel-excel/docs/export#export库 代码如下:

$path = $directoriesArray[count($directoriesArray)-1];
Excel::create($filename, function($excel) use($dataArray) {
    $excel->sheet('file', function($sheet)  use($dataArray) {
        $sheet->fromArray( $dataArray );
    });
})->store('csv', $path)->export('csv');

我可以上传 1 个文件,但是因为我需要上传多个表格 到相对文件我在一个圆圈中运行导出功能 并且只上传第一个文件。是不是限制 浏览器(我在 chromium、firefox 中试过)或者是否是上传所有文件的方式?

1) 如果有办法只将此 csv 文件写入磁盘而不上传?

2) 如果有某种方法可以对输出数据进行某种缓冲(如 ob_start )并手动将它们写入文件?

3) 如果有其他工具可以做到这一点?

谢谢!

【问题讨论】:

  • 您能否分享循环中的代码,以及处理上传的代码

标签: php laravel csv


【解决方案1】:

决定是:

})->store('csv', $path);

没有

->export('csv')

:)

【讨论】:

    【解决方案2】:

    我是这样做的:

    <?php
    
    
    $tablesArray= [  // array of tables to export
        'settings',
        'groups',
        'users',
    ];
    $now_label= '_1';//strftime('%Y-%m-%d_%H_%M_%S');
    $directories= [ public_path('uploads'), public_path('uploads/csv') , public_path('uploads/csv/loan_dump_'.$now_label) ];// to which directory export files
    foreach( $tablesArray as $next_key=>$next_table_name ) {  // all tables
        $columnListing= \Schema::getColumnListing( $next_table_name );  // table columns
    
        if ( $next_table_name == 'settings' ) {
            $dataRows = Settings::all();
        }
        if ( $next_table_name == 'groups' ) {
            $dataRows = Group::all();
        }
        if ( $next_table_name == 'users' ) {
            $dataRows = User::all();
        }
        if ($dataRows == null) {
            die("-1 XXZ INVALID DATA");
        }
        $dataRowsArray = $dataRows->toArray();
    
        $writeRowsArray= [];
        $row= 0;
        foreach( $dataRowsArray as $next_key=>$nextDataRow ) {
            if (!empty($nextDataRow['created_at'])) {
                $nextDataRow['created_at'] = $this->dateTimeToDbFormat($nextDataRow['created_at']);
            }
            if (!empty($nextDataRow['updated_at'])) {
                $nextDataRow['updated_at'] = $this->dateTimeToDbFormat($nextDataRow['updated_at']);
            }
            if ($row == 0) { // first row with keys/file headers
                $writeRowsArray[] = $nextDataRow;
            } else {
                $writeRowsArray[] = array_values($nextDataRow);
            }
            $row++;
        }
        $this->writeArrayToCsvFile($writeRowsArray, $next_table_name, $directories);
    
    } // foreach( $tablesArray as $next_key=>$next_table_name ) {  // all tables
    
    public function writeArrayToCsvFile(array $dataArray, string $filename, array $directoriesArray) : int
    {
        self::createDir(  $directoriesArray  );
        $path = $directoriesArray[count($directoriesArray)-1];
        Excel::create($filename, function($excel) use($dataArray) {
            $excel->sheet('file', function($sheet)  use($dataArray) {
                $sheet->fromArray( $dataArray );
            });
        })->store('csv', $path)->export('csv');
        return 1;
    }
    
    
    ?>
    

    只有 $tablesArray 数组中的第一个文件可以导出。 如果要评论第一个表,那么下一个表会上传好,依此类推。

    奇怪的文件上传了两次:在 $directories 路径和“Downloads”目录中(我在 kubuntu 下)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-06
      • 2012-03-21
      相关资源
      最近更新 更多