phpExcel导入导出
1. 下载PHPExcel的SDK,下载地址:
https://github.com/PHPOffice/PHPExcel
将SDK解压之后的Class文件拷贝到自己的项目。
2. 一个按钮实现导入功能
<a href="{:U('Record/newCustomer')} " class="btn black">导出表格</a>
<a href="javascript:0;" class="btn green" onclick="getExcel()">导入表格</a>
<form action="{:U('Record/RecordExcel'))}" id="formExcel" method="post" enctype="multipart/form-data">
<input type="file" style="display: none" id="file" onchange="postExcel()">
</form>
<script>
function getExcel() {
$('#file').click();
}
function postExcel(){
// # 创建formdata对象
var formData = new FormData();
// # 给formData对象添加<input>标签,注意与input标签的ID一致
formData.append('file', $('#file')[0].files[0]);
$.ajax({
url : "{:U('Record/newRecordExcel')}",//这里写你的url
type : 'POST',
data : formData,
contentType: false,// 当有文件要上传时,此项是必须的,否则后台无法识别文件流的起始位置
processData: false,// 是否序列化data属性,默认true(注意:false时type必须是post)
dataType: 'json',//这里是返回类型,一般是json,text等
clearForm: true,//提交后是否清空表单数据
success: function(data) { //提交成功后自动执行的处理函数,参数data就是服务器返回的数据。
aler('上传成功');
},
error: function(data, status, e) { //提交失败自动执行的处理函数。
console.error(e);
}
});
}
</script>
PHP后台代码
//导入excel 文件
public function newRecordExcel(){
if (!empty($_FILES)){
$upload = new \Think\Upload(); // 实例化上传类
$upload->maxSize = 10485760 ; // 设置附件上传大小
$upload->exts = array('xls','xlsx'); // 设置附件上传类型
$upload->rootPath = './Public/Excel/'; // 设置附件上传根目录
$upload->autoSub = false; // 将自动生成以photo后面加时间的形式文件夹,关闭
// 上传文件
$info = $upload->upload(); // 上传文件
$exts = $info['file']['ext']; // 获取文件后缀
$filename = $upload->rootPath.$info['file']['savename']; // 生成文件路径名
if(!$info) { // 上传错误提示错误信息
$this->error($upload->getError());
}else{ // 上传成功
import("Org.Util.PHPExcel.PHPExcel");
$PHPExcel = new \PHPExcel(); // 创建PHPExcel对象,注意,不能少了\
if ($exts == 'xls') { // 如果excel文件后缀名为.xls,导入这个类
$PHPReader = new \PHPExcel_Reader_Excel5();
} else
if ($exts == 'xlsx') {
import("Org.Util.PHPExcel.Reader.Excel2007");
$PHPReader = new \PHPExcel_Reader_Excel2007();
}
$PHPExcel=$PHPReader->load($filename);
$currentSheet = $PHPExcel->getSheet(0); // 获取表中的第一个工作表,如果要获取第二个,把0改为1,依次类推
$allColumn = $currentSheet->getHighestColumn(); // 获取总列数
$allRow = $currentSheet->getHighestRow(); // 获取总行数
for ($i = 3; $i <= $allRow; $i++) {
$data_p['team_name'] =$PHPExcel->getActiveSheet()->getCell("A" . $i)->getValue();
$data_p['c_username'] =$PHPExcel->getActiveSheet()->getCell("B" .$i)->getValue();
$data_p['m_username'] =$PHPExcel->getActiveSheet()->getCell("C" .$i)->getValue();
$data_p['phone'] = $PHPExcel->getActiveSheet()->getCell("D". $i)->getValue();
$data_p['source'] =$PHPExcel->getActiveSheet()->getCell("E" .$i)->getValue();
$data_p['age'] =$PHPExcel->getActiveSheet()->getCell("F" . $i)->getValue();
$data_p['sex'] =$PHPExcel->getActiveSheet()->getCell("G" . $i)->getValue();
$data_p['career'] =$PHPExcel->getActiveSheet()->getCell("H" . $i)->getValue();
$data_p['hobby'] =$PHPExcel->getActiveSheet()->getCell("I" . $i)->getValue();
$data_p['character'] =$PHPExcel->getActiveSheet()->getCell("J" . $i)->getValue();
//操作数据库
$ex=M('auction_goods')->add($data_p);
}
if($ex){
$this->success("导入成功");
}else{
$this->error("导入失败,原因可能是excel表中格式错误","5");// 提示错误
}
}
}else {
$this->display();
}
}
php导出
/*
* excel导出
* $expTitle Excel 文件名
* $expCellName arr//导出excel中各项名称
* $expTableData 数据库数据
* */
function exportExcel($expTitle, $expCellName, $expTableData)
{
vendor("PHPExcel.PHPExcel");
$xlsTitle = iconv('utf-8', 'gb2312', '导出文件');
$fileName = $expTitle . date('_YmdHis');// 导出文件名称
$cellNum = count($expCellName);
$dataNum = count($expTableData);
$objPHPExcel = new \PHPExcel();
$cellName = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ');
$objPHPExcel->getActiveSheet(0)->mergeCells('A1:' . $cellName[$cellNum - 1] . '1');//合并单元格
for ($i = 0; $i < $cellNum; $i++) {
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i] . '2', $expCellName[$i][1]);
}
// Miscellaneous glyphs, UTF-8
for ($i = 0; $i < $dataNum; $i++) {
for ($j = 0; $j < $cellNum; $j++) {
$objPHPExcel->getActiveSheet(0)->setCellValue($cellName[$j] . ($i + 3), ' ' . $expTableData[$i][$expCellName[$j][0]]);
}
}
header('pragma:public');
header('Content-type:application/vnd.ms-excel;charset=utf-8;name="' . $xlsTitle . '.xls"');
header("Content-Disposition:inline;filename=$fileName.xls"); //attachment新窗口打印inline本窗口打印
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
exit;
}
$info = 数据库出来的数据
$xlsCell = array(
array('id', '序号'),
array('team_name', '团队名字'),
array('c_username', '顾客名字'),
array('m_username', '顾问名字'),
array('phone', '手机号'),
array('source', '来源'),
array('age', '年龄'),
array('sex', '性别'),
array('career', '职业'),
array('hobby', '爱好'),
array('character', '性格'),
); //导出excel中各项名称
$filename = '准会员档案';//文件名字
exportExcel($filename, $xlsCell, $info);