Thinkphp5.0如何导入导出

小云云
发布: 2023-03-17 16:54:01
原创
2344 人浏览过

ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP 开发框架,遵循 Apache2 开源协议发布,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。本篇文章我们主要跟大家分享Thinkphp5.0如何导入导出。

首先去官网http://phpexcel.codeplex.com/下载最新PHPExcel

Thinkphp扩展类一般都放在extend下

写导入导出的公共方法,方便再控制器中调用

导入excel文件

/**
 * 导入excel文件
 * @param  string $file excel文件路径
 * @return array        excel文件内容数组
 */
function import_excel($file){
    // 判断文件是什么格式
    $type = pathinfo($file);
    $type = strtolower($type["extension"]);
    $type=$type==='csv' ? $type : 'Excel5';
    ini_set('max_execution_time', '0');
    Loader::import('PHPExcel.PHPExcel');
 
    // 判断使用哪种格式
    $objReader = PHPExcel_IOFactory::createReader($type);
    $objPHPExcel = $objReader->load($file);
    $sheet = $objPHPExcel->getSheet(0);
    // 取得总行数
    $highestRow = $sheet->getHighestRow();
    // 取得总列数
    $highestColumn = $sheet->getHighestColumn();
 
    //循环读取excel文件,读取一条,插入一条
    $data=array();
    //从第一行开始读取数据
    for($j=1;$j<=$highestRow;$j++){
        //从A列读取数据
        for($k=&#39;A&#39;;$k<=$highestColumn;$k++){
            // 读取单元格
            $data[$j][]=$objPHPExcel->getActiveSheet()->getCell("$k$j")->getValue();
        }
    }
    return $data;
}
登录后复制


数组转xls格式的excel文件

/**
 * 数组转xls格式的excel文件
 * @param  array  $data      需要生成excel文件的数组
 * @param  string $filename  生成的excel文件名
 *      示例数据:
        $data = array(
            array(NULL, 2010, 2011, 2012),
            array(&#39;Q1&#39;,   12,   15,   21),
            array(&#39;Q2&#39;,   56,   73,   86),
            array(&#39;Q3&#39;,   52,   61,   69),
            array(&#39;Q4&#39;,   30,   32,    0),
           );
 */
function create_xls($data,$filename=&#39;simple.xls&#39;){
    ini_set(&#39;max_execution_time&#39;, &#39;0&#39;);
    Loader::import(&#39;PHPExcel.PHPExcel&#39;);
    $filename=str_replace(&#39;.xls&#39;, &#39;&#39;, $filename).&#39;.xls&#39;;
    $phpexcel = new PHPExcel();
    $phpexcel->getProperties()
        ->setCreator("Maarten Balliauw")
        ->setLastModifiedBy("Maarten Balliauw")
        ->setTitle("Office 2007 XLSX Test Document")
        ->setSubject("Office 2007 XLSX Test Document")
        ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
        ->setKeywords("office 2007 openxml php")
        ->setCategory("Test result file");
    $phpexcel->getActiveSheet()->fromArray($data);
    $phpexcel->getActiveSheet()->setTitle(&#39;Sheet1&#39;);
    $phpexcel->setActiveSheetIndex(0);
    header(&#39;Content-Type: application/vnd.ms-excel&#39;);
    header("Content-Disposition: attachment;filename=$filename");
    header(&#39;Cache-Control: max-age=0&#39;);
    header(&#39;Cache-Control: max-age=1&#39;);
    header (&#39;Expires: Mon, 26 Jul 1997 05:00:00 GMT&#39;); // Date in the past
    header (&#39;Last-Modified: &#39;.gmdate(&#39;D, d M Y H:i:s&#39;).&#39; GMT&#39;); // always modified
    header (&#39;Cache-Control: cache, must-revalidate&#39;); // HTTP/1.1
    header (&#39;Pragma: public&#39;); // HTTP/1.0
    $objwriter = PHPExcel_IOFactory::createWriter($phpexcel, &#39;Excel5&#39;);
    $objwriter->save(&#39;php://output&#39;);
    exit;
}
数据转csv格式的excle
/**
 * 数据转csv格式的excle
 * @param  array $data      需要转的数组
 * @param  string $header   要生成的excel表头
 * @param  string $filename 生成的excel文件名
 *      示例数组:
        $data = array(
            &#39;1,2,3,4,5&#39;,
            &#39;6,7,8,9,0&#39;,
            &#39;1,3,5,6,7&#39;
            );
        $header=&#39;用户名,密码,头像,性别,手机号&#39;;
 */
function create_csv($data,$header=null,$filename=&#39;simple.csv&#39;){
    // 如果手动设置表头;则放在第一行
    if (!is_null($header)) {
        array_unshift($data, $header);
    }
    // 防止没有添加文件后缀
    $filename=str_replace(&#39;.csv&#39;, &#39;&#39;, $filename).&#39;.csv&#39;;
    ob_clean();
    Header( "Content-type:  application/octet-stream ");
    Header( "Accept-Ranges:  bytes ");
    Header( "Content-Disposition:  attachment;  filename=".$filename);
    foreach( $data as $k => $v){
        // 如果是二维数组;转成一维
        if (is_array($v)) {
            $v=implode(&#39;,&#39;, $v);
        }
        // 替换掉换行
        $v=preg_replace(&#39;/\s*/&#39;, &#39;&#39;, $v);
        // 解决导出的数字会显示成科学计数法的问题
        $v=str_replace(&#39;,&#39;, "\t,", $v);
        // 转成gbk以兼容office乱码的问题
        echo iconv(&#39;UTF-8&#39;,&#39;GBK&#39;,$v)."\t\r\n";
    }
}
登录后复制

使用示例:

导入原理:

将要导入的文件先通过Thinkphp方法上传到服务器,再根据上传后的路径去调用公共导入方法,传入要导入的excel的文件路径,如下

public function importUser(){
        $data=import_excel(&#39;./a.xls&#39;);
        print_r($data);
        exit;
    }
登录后复制

以上内容就是Thinkphp5.0导入导出的详解,希望能帮助到大家。

相关推荐:

thinkphp5中数据库添加内容的实现方法

mysql导入数据库的方法

ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例

以上是Thinkphp5.0如何导入导出的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!