thinkphp5 csv格式导入导出(多数据处理)

关于csv文件格式的导出导入个人见解

先上代码:

<?php
namespace think;

class Csv
{
    /**
     * 导出csv文件
     * @param $list 数据源
     * @param $title 数据列表
     */
    public function put_csv($list,$title)
    {
        $file_name = "exam".time().".csv";//文件名
        header(‘Content-Type: application/vnd.ms-excel‘);//设置内容类型为Excel
        header(‘Content-Disposition: attachment;filename=‘.$file_name );//下载文件
        header(‘Cache-Control: max-age=0‘);//表示当访问此网页后的0秒内再次访问不会去服务器
        $file = fopen(‘php://output‘,"a");//打开文件或者 URL,  php://output 是一个只写的数据流, 允许你以 print 和 echo 一样的方式 写入到输出缓冲区,  a:写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
        $limit = 1000;
        $calc = 0;
        foreach ($title as $v){
            $tit[] = iconv(‘UTF-8‘, ‘GB2312//IGNORE‘,$v);//转码
        }
        fputcsv($file,$tit);//将行格式化为 CSV 并写入一个打开的文件中。(标题)
        foreach ($list as $v){
            $calc++;
            //-------核心!!!清空缓存,将缓存上的数据写入到文件--------
            if($limit == $calc){
                ob_flush();//将本来存在输出缓存中的内容取出来,调用ob_flush()之后缓冲区内容将被丢弃。
                flush();   //待输出的内容立即发送。   具体查看:https://www.jb51.net/article/37822.htm
                $calc = 0;
            }//-------核心--------
            foreach($v as $t){
                $tarr[] = iconv(‘UTF-8‘, ‘GB2312//IGNORE‘,$t);
            }
            fputcsv($file,$tarr);//将行格式化为 CSV 并写入一个打开的文件中。(内容)
            unset($tarr);//销毁指定的变量
        }
        unset($list);//销毁指定的变量
        fclose($file);//关闭打开的文件
        exit();
    }

    // csv导入,此格式每次最多可以处理1000条数据(我觉得这个是不对的,他规定的是读取一行的最大长度)
    //$filename  文件路径
    public function input_csv($filename) {
        $csv_file = $handle = fopen($filename,‘r‘);//只读方式打开,将文件指针指向文件头]
        $result_arr = array ();
        $i = 0;
        //函数从文件指针中读入一行并解析 CSV 字段(一维数组)
        while($data_line = fgetcsv($csv_file,1000)) {
            //跳过第一行标题读取
            if ($i == 0) {
                $GLOBALS [‘csv_key_name_arr‘] = $data_line;//将标题存储起来
                $i ++;
                continue;
            }
            //读取内容
            foreach($GLOBALS[‘csv_key_name_arr‘] as $csv_key_num => $csv_key_name ) {
                $csv_key_name = iconv(‘gb2312‘,‘utf-8‘, $csv_key_name);//标题
                if(empty($data_line[$csv_key_num])) {
                    $result_arr[$i][$csv_key_name] = ‘‘;
                }else {
                    $value = iconv(‘gb2312‘,‘utf-8‘, $data_line[$csv_key_num]);//标题对应的内容
                    $result_arr[$i][$csv_key_name] = $value;
                }
            }
            $i++;
        }
        fclose($handle); // 关闭指针
        return $result_arr;
    }
}

控制器的使用:

    /**
     * 大数据改 导出
     */
     public function excelOut2()
    {// 不限制脚本执行时间以确保导出完成
//        set_time_limit(0);

        $data = db(‘receive‘) -> where($where) -> order(‘create_time desc‘)-> select();
         $csv_title = array(‘订单编号‘,‘客户姓名‘,‘客户联电‘,‘身份证号码‘,‘收货地址‘,‘发展渠道编码‘,‘订单日期‘,‘总部商城号码‘,‘是否开户‘,‘备注‘,‘用户标识‘,‘开户号码‘,‘卡号‘,‘套餐‘,‘运单号‘,‘签收时间‘,‘签收状态‘,‘异常标记‘,‘入网时间‘,‘首充时间‘,‘首充金额‘,‘发展渠道‘,‘对应区分‘,‘发展人电话‘,‘兑换码‘,‘订单类型‘,‘发货人‘,‘发货日期‘,‘异常原因‘,‘异常转化情况‘,‘异常操作员工‘,‘异常操作时间‘,‘店铺‘,‘登记时间‘);
        //csv导出
         $csv = new Csv();  //实例化后才可以调用之前类文件定义好的方法
         $csv->put_csv($data, $csv_title);
    }

    /**
     * 大数据改 导入
     */
    public function excelIn3()
    {
        if (request() -> isPost())
        {
            // 获取表单上传文件
            $file = request()->file(‘examfile‘);
            if(empty($file)) {
                $this->error(‘请选择上传文件‘);
            }
            $info = $file->move(ROOT_PATH.‘public‘.DS.‘upload‘);
            //获取文件(日期/文件),$info->getFilename();
            $filename = ROOT_PATH.‘public‘.DS.‘upload/‘.$info->getSaveName();
//            $handle = fopen($filename,‘r‘);//只读方式打开,将文件指针指向文件头]
            $csv = new Csv();
            $result = $csv->input_csv($filename); // 解析csv
            $len_result = count($result);//返回数目
            if($len_result == 0){
                $this->error(‘此文件中没有数据!‘);
            }
//            fclose($handle); // 关闭指针
            dump($result);
            return ;
        }

        return $this -> fetch();
    }

有什么不对的欢迎提出建议。

原文地址:https://www.cnblogs.com/laijinquan/p/9751100.html

时间: 2024-10-22 20:23:24

thinkphp5 csv格式导入导出(多数据处理)的相关文章

Excel格式导入导出数据(单语言版本)

Excel格式导入导出数据(单语言版本) 可以使用常用的excel格式导入导出相关数据,包含: 1. 商品分类: 2. 筛选组: 3. 筛选: 4. 商品资料: 5. 商品附加图片资料,(不包含图片本身的上传或抓取): 6. 商品选项: 7. 商品属性: 8. 产品特价数据: 9. 商品折扣数据: 10. 商品奖励积分数据: 特色: 1. 常用excel软件编辑商品数据后导入: 2. 导出的文件名称包含日期和时间,便于备份存档: 3. 由于涉及到服务器的内存,以及数据的多寡,可以将数据按照商品I

开发了一个安卓小软件“CSV联系人导入导出工具”,欢迎测试

开发了一个安卓小软件“CSV联系人导入导出工具”,欢迎测试.本软件可以帮你快速备份和恢复联系人,不用担心号码遗失,软件操作简单,使用方便. 下载地址:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=419036&extra=page%3D1 原文地址:https://www.cnblogs.com/ybmj/p/12354353.html

在 Laravel 5 中使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能(转)

1.简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel ,从而方便我们以优雅的.富有表现力的代码实现Excel/CSV文件的导入和 导出 . 该项目的GitHub地址是: https://github.com/Maatwebsite/Laravel-Excel . 本文我们将在Laravel中使用Laravel Excel简单实现Excel文件的导入和导出. 2.安装&配置 使用Composer安装依赖 首先在Laravel项目根目录

在 Laravel 5 中使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能

1.简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel ,从而方便我们以优雅的.富有表现力的代码实现Excel/CSV文件的导入和 导出 . 该项目的GitHub地址是: https://github.com/Maatwebsite/Laravel-Excel . 本文我们将在Laravel中使用Laravel Excel简单实现Excel文件的导入和导出. 2.安装&配置 使用Composer安装依赖 首先在Laravel项目根目录

thinkphp5 使用PHPExcel 导入导出

首先下载PHPExcel类.网上很多,自行下载. 然后把文件放到vendor文件里面. 一般引用vendor里面的类或者插件用vendor(); 里面加载的就是vendor文件,然后想要加载哪个文件,直接写就行,中间的"."相当于文件路径的"/". 例如加载excel5这个文件: 先把html代码贴出来(整个导入导出的): <form enctype="multipart/form-data" method="post"

【转】Java操作CSV文件导入导出

特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/mao2080/ 1 public class CSVUtils { 2 3 /** 4 * 5 * 描述:导出 6 * @author [email protected] 7 * @created 2017年8月26日 下午2:39:13 8 * @since 9 * @param file cs

MongoDB csv文件导入导出

1.导出到csv文件: 2.从csv导入: 数据经过csv导出导入,有一个非常隐蔽的问题,编写代码时需要注意: 先导入一条数据: 其中Price是double类型: 然后我把该条记录导出到Demo.csv,并且从数据库删除该条记录,然后再从Demo.csv导入该条记录: 再来看此时数据库中该条记录: 发现Price数值原本double型66.000000自动变成了Int32型66. 这时问题出现了,你如果还是用bson_iter_double(&iter)去取Price字段时,就会取不到值: 只

使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能

一.安装配置 使用Composer安装依赖: composer require maatwebsite/excel 发布配置(可选): php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider" 配置config/app.php的providers和aliases(可选): 'providers' => [ /* * Package Service Providers... */ M

将csv格式的数据文件导入/导出数据库+添加新的字段

最近一直忙于实验室的事情,没有好好更新博客,在抓包的过程中,遇到了很多问题. 因为我常用Wireshark将抓包信息导出为csv文件,这里简单mark一下将csv文件导入/导出到数据库的2种方法: 一.简单,但是稍慢的方法,使用Navicat for MySQL,傻瓜式导入数据库: 流程如下: 安装完成并配置好连接后界面如下: 新建数据库 进入导入向导 选择导入类型: 然后选择文件作为数据源,这里是我之前抓好的包,300w+条抓包记录 这里直接采取默认设置 同样默认 自己设置了下表明,新建了表