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;
}