PHP导入导出EXCELl,CSV

Stella981
• 阅读 717

PHP导入导出Excel,CSV

HTML

<form action="{:U('Admin/Unit/importcsv')}" method="post" name="myform" id="myform" enctype="multipart/form-data">
    <input type="hidden" name="unit_id" value="{$unit_id}"/>
    <h3 style="background:#006699; color:#FFFFFF; width:450px;">{$unit.1.1.num}号楼/{$unit.1.1.unit}单元</h3>
    <p>
        请选择要导入的CSV文件:
        <br/>
        <input type="file" name="file">
        <input type="submit" name="dosubmit" id="dosubmit" class="dialog btn btn-primary" value="导入CSV">
        <input class="btn btn-default" type="button" onclick="javascript:history.back(-1);" value="{:L('GOBACK')}" >
        <!-- <input type="button" class="btn" value="导出CSV" onclick="window.location.href='do.php?action=export'"> -->
    </p>
</form>

PHP 导入

function importcsv

/**
     * [importcsv description]
     * @return [type] [description]
     */
    public function importcsv() {
        if (IS_POST) {
            $filename = $_FILES['file']['tmp_name'];
            if (empty($filename)) {
                $this->error("csv导入文件请不要为空");
            }
            $handle = fopen($filename, 'r');
            function input_csv($handle) {
                $out = array();
                $n = 0;
                while ($data = fgetcsv($handle, 10000)) {
                    $num = count($data);
                    for ($i = 0; $i < $num; $i++) {
                        $out[$n][$i] = $data[$i];
                    }
                    $n++;
                }
                return $out;
            }
            $result = input_csv($handle); //解析csv
            //$number = count($result, COUNT_RECURSIVE) - count($result);
            // $len_result = count($result);
            $len_result = count($result) - 1;
            if ($len_result == 0) {
                $this->error("csv导入数据为空");
            }
            foreach ($result as $kr => $vr) {
            //这里写你的业务逻辑
                if ($kr) {
                    $i = 0;
                    //中文转码
                    $data['estate_id'] = iconv('gb2312', 'utf-8', $vr[$i++]); //楼盘ID
                    $data['num'] = iconv('gb2312', 'utf-8', $vr[$i++]); //楼栋
                    $data['unit'] = iconv('gb2312', 'utf-8', $vr[$i++]); //单元
                    $data['floors'] = iconv('gb2312', 'utf-8', $vr[$i++]); //楼层
                    $data['number'] = iconv('gb2312', 'utf-8', $vr[$i++]); //门牌号
                    $data['status'] = iconv('gb2312', 'utf-8', $vr[$i++]); //状态
                    $data['type'] = iconv('gb2312', 'utf-8', $vr[$i++]); //关联户型
                    $data['market_money'] = iconv('gb2312', 'utf-8', $vr[$i++]); //市场价
                    //create_time last_time NOW_TIME
                    $data['create_time'] = iconv('gb2312', 'utf-8', NOW_TIME); //创建时间
                    $data['last_time'] = iconv('gb2312', 'utf-8', NOW_TIME); //修改时间
                    $list = D('Property')->add($data);
                }
            }
            if ($list) {
                $unit_info = D('Unit')->where('id=' . I('unit_id'))->find();
                $map['estate_id'] = $unit_info['estate_id'];
                $map['building'] = $unit_info['building'];
                $buildid = D('Building')->where($map)->getField('id');
                $success = D('Unit')->where('id=' . I('unit_id'))->data(array('status' => 1))->save();
                if ($success) {
                    $this->success("csv导入成功!共导入" . $len_result . "条数据", U('Admin/Unit/index', array('id' => $buildid)));
                }
            } else {
                $this->error("csv导入失败!");
            }
            fclose($handle); //关闭指针
        } else {
            $info = M('Unit')->where('id=' . I('id'))->find();
            $buid = D('Property')->bulid_property($info);
            S('buid' . time() . I('id'), $buid);
            $protype = D('Estate')->get_project_type($info['estate_id']);
            $this->assign('unit', $buid);
            $this->assign('unit_id', I('id'));
            $this->assign('protype', $protype);
            $this->assign('estate_id', 'buid' . time() . I('id'));
            $this->display();
        }
    }

PHP 导出

这里本来想导出Excel,先导出成csv了,具体的大家可以按自己的意愿更改

function exportcsv

    /**
     * [exportcsv description]导出Excel
     * @return [type] [description]
     */
    public function exportcsv() {
        //导出Excel     estate_id num unit
        $id = I('id');
        if (isset($id) && !empty($id)) {
            $unit_info = D('Unit')->where('id=' . $id)->find();
            if ($unit_info) {
                $map = array();
                $map['estate_id'] = $unit_info['estate_id']; //楼盘ID
                $map['num'] = $unit_info['building']; //楼栋
                $map['unit'] = $unit_info['unit']; //单元
                $result = M('property')->where($map)->select();
                if ($result) {
                    $title = array('序列', '项目#楼盘', '楼栋', '单元', '楼层', '门牌号', '状态', '关联户型', '市场价', '创建时间', '修改时间');
                    foreach ($result as $k => $v) {
                        $data[$k][] = $v['id']; //序列
                        $data[$k][] = idtoname($v['estate_id'], 'Estate', 'name', 'id') . '#' . $v['estate_id']; //项目#楼盘
                        $data[$k][] = $v['num']; //楼栋
                        $data[$k][] = $v['unit']; //单元
                        $data[$k][] = $v['floors']; //楼层
                        $data[$k][] = $v['floors'] . '0' . $v['number']; //门牌号
                        $data[$k][] = $v['status']; //状态
                        $data[$k][] = idtoname($v['type'], 'ProType', 'name', 'id'); //关联户型
                        $data[$k][] = format_price($v['market_money']); //市场价
                        $data[$k][] = time_format($v['create_time']); //创建时间
                        $data[$k][] = time_format($v['last_time']); //修改时间
                    }
                    export_csv_xls($title, $data);
                    unset($title, $data);exit;
                }
            } else {
                $this->error("未查询到楼盘单元信息!");
            }
        } else {
            $this->error("csv导入失败!");
        }
    }

function export_csv_xls

function export_csv_xls($title, $array = '', $code = 'gb2312', $filename = "") {
    if (!$filename) {
        // $filename = date("Y-m-d") . ".xls";
        $filename = randStr(10) . ".xls";
    }
    header("Content-Type: application/vnd.ms-execl");
    header("Content-Type: application/vnd.ms-excel; charset=" . $code);
    header("Content-Disposition: attachment; filename=$filename");
    header("Pragma: no-cache");
    header("Expires: 0");
    if ($code == "gb2312") {
        $title = array_map("utf8togb2312", $title);
    }
    echo implode("\t", $title) . "\n";
    if ($array) {
        foreach ($array as $v) {
            if ($code == "gb2312") {
                $v = array_map("utf8togb2312", $v);
            }
            echo implode("\t", $v) . "\n";
        }
    }
}

function utf8togb2312

function utf8togb2312($str) {
//编码转换
    $str = format_xml_num($str);
    $bianma = mb_detect_encoding($str);
    if ($bianma == "GB2312") {
        return $str;
    } else {
        return iconv($bianma, 'GB2312', trim($str));
    }
}

function format_xml_num

function format_xml_num($str) {
//导出格式化数字
    if (strlen((float) $str) >= 12 && is_numeric((float) $str) && (float) $str && !strpos($str, '.')) {
        $str = "'" . (string) $str;
    }
    return $str;
}
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Stella981 Stella981
2年前
From表单提交的几种方式
<body<formaction"https://my.oschina.net/u/3285916"method"get"name"formOne"id"formId"name:<inputtype"text"name"name"pwd:<inputtyp
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这