excel 导出导入

本文介绍了如何使用PHPExcel库在PHP中实现Excel数据的导出和导入功能。导出部分展示了如何设置表头、样式并写入数据库数据到Excel文件。导入部分则讲解了读取Excel文件内容,检查数据格式并将其写入或更新到数据库的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**

  • 导出
  • @param
  • @param
  • @return
    */

public function exportexcel()
{

set_time_limit(0);
ini_set(‘memory_limit’, ‘1024M’);
vendor(“PHPExcel.PHPExcel.PHPExcel”);
vendor(“PHPExcel.PHPExcel.Writer.IWriter”);
vendor(“PHPExcel.PHPExcel.Writer.Abstract”);
vendor(“PHPExcel.PHPExcel.Writer.Excel5”);
vendor(“PHPExcel.PHPExcel.Writer.Excel2007”);
vendor(“PHPExcel.PHPExcel.IOFactory”);
//$data = Db::table(‘enroll_activity_hotel’)->where(‘is_del’, ‘0’)->field(‘name,address,phone,departure_time,two_room,three_room’)->select();
$name = ‘酒店列表’;
$excel = new \PHPExcel(); //引用phpexcel
iconv(‘UTF-8’, ‘gb2312’, $name); //针对中文名转码
$header = [‘酒店名称’, ‘酒店地址’, ‘酒店电话’, ‘发车时间’, ‘两人间数’, ‘三人间数’]; //表头,名称可自定义
$excel->setActiveSheetIndex(0);
e x c e l − > g e t A c t i v e S h e e t ( ) − > s e t T i t l e ( excel->getActiveSheet()->setTitle( excel>getActiveSheet()>setTitle(name); //设置表名
$excel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(18);
$excel->getActiveSheet()->getColumnDimension(‘A’)->setWidth(30);
$excel->getActiveSheet()->getColumnDimension(‘B’)->setWidth(30);
$excel->getActiveSheet()->getColumnDimension(‘C’)->setWidth(30);
$excel->getActiveSheet()->getColumnDimension(‘D’)->setWidth(30);
$excel->getActiveSheet()->getColumnDimension(‘E’)->setWidth(30);
$excel->getActiveSheet()->getColumnDimension(‘F’)->setWidth(30);
l e t t e r = a r r a y ( ′ 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 ′ , ′ A A ′ , ′ A B ′ , ′ A C ′ , ′ A D ′ , ′ A E ′ , ′ A F ′ , ′ A G ′ , ′ A H ′ , ′ A I ′ , ′ A J ′ , ′ A K ′ , ′ A L ′ , ′ A M ′ , ′ A N ′ , ′ A O ′ , ′ A P ′ , ′ A Q ′ , ′ A R ′ , ′ A S ′ , ′ A T ′ , ′ A U ′ , ′ A V ′ , ′ A W ′ , ′ A X ′ , ′ A Y ′ , ′ A Z ′ ) ; / / 生 成 表 头 f o r ( letter = 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'); //生成表头 for ( letter=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);//for(i = 0; i < c o u n t ( i < count( i<count(header); $i++) {
//设置表头值
e x c e l − > g e t A c t i v e S h e e t ( ) − > s e t C e l l V a l u e ( " excel->getActiveSheet()->setCellValue(" excel>getActiveSheet()>setCellValue("letter[$i]1", h e a d e r [ header[ header[i]);
//设置表头字体样式
e x c e l − > g e t A c t i v e S h e e t ( ) − > g e t S t y l e ( " excel->getActiveSheet()->getStyle(" excel>getActiveSheet()>getStyle("letter[$i]1")->getFont()->setName(‘宋体’);
//设置表头字体大小
e x c e l − > g e t A c t i v e S h e e t ( ) − > g e t S t y l e ( " excel->getActiveSheet()->getStyle(" excel>getActiveSheet()>getStyle("letter[$i]1")->getFont()->setSize(14);
//设置表头字体是否加粗
e x c e l − > g e t A c t i v e S h e e t ( ) − > g e t S t y l e ( " excel->getActiveSheet()->getStyle(" excel>getActiveSheet()>getStyle("letter[$i]1")->getFont()->setBold(true);
//设置表头文字水平居中
e x c e l − > g e t A c t i v e S h e e t ( ) − > g e t S t y l e ( " excel->getActiveSheet()->getStyle(" excel>getActiveSheet()>getStyle("letter[$i]1")->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
//设置文字上下居中
e x c e l − > g e t A c t i v e S h e e t ( ) − > g e t S t y l e ( excel->getActiveSheet()->getStyle( excel>getActiveSheet()>getStyle(letter[$i])->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
//设置单元格背景色
e x c e l − > g e t A c t i v e S h e e t ( ) − > g e t S t y l e ( " excel->getActiveSheet()->getStyle(" excel>getActiveSheet()>getStyle("letter[$i]1")->getFill()->getStartColor()->setARGB(‘FFFFFFFF’);
e x c e l − > g e t A c t i v e S h e e t ( ) − > g e t S t y l e ( " excel->getActiveSheet()->getStyle(" excel>getActiveSheet()>getStyle("letter[$i]1")->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID);
e x c e l − > g e t A c t i v e S h e e t ( ) − > g e t S t y l e ( " excel->getActiveSheet()->getStyle(" excel>getActiveSheet()>getStyle("letter[$i]1")->getFill()->getStartColor()->setARGB(‘FF6DBA43’);
//设置字体颜色
e x c e l − > g e t A c t i v e S h e e t ( ) − > g e t S t y l e ( " excel->getActiveSheet()->getStyle(" excel>getActiveSheet()>getStyle("letter[$i]1")->getFont()->getColor()->setARGB(‘FFFFFFFF’);
}
//写入数据
$count = Db::table(‘enroll_activity_hotel’)->where(‘is_del’, ‘0’)->count(‘id’);
n u m s = c e i l ( nums = ceil( nums=ceil(count / 2000);
for ($i = 0; $i < n u m s ; + + nums; ++ nums;++i) {
d a t a = D b : : t a b l e ( ′ e n r o l l a c t i v i t y h o t e l ′ ) − > w h e r e ( ′ i s d e l ′ , ′ 0 ′ ) − > f i e l d ( ′ n a m e , a d d r e s s , p h o n e , d e p a r t u r e t i m e , t w o r o o m , t h r e e r o o m ′ ) − > l i m i t ( ( data = Db::table('enroll_activity_hotel')->where('is_del', '0')->field('name,address,phone,departure_time,two_room,three_room')->limit(( data=Db::table(enrollactivityhotel)>where(isdel,0)>field(name,address,phone,departuretime,tworoom,threeroom)>limit((i * 2000) . ‘,’ . (2000))->select();
if (!empty($data)) {
$param = i ∗ 2000 ; / / 写 入 数 据 f o r e a c h ( i * 2000; //写入数据 foreach ( i2000;//foreach(data as $k => $v) {
$n = $param + $k + 2;
//列字体居中
$excel->getActiveSheet()->getStyle(‘A’ . $n)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$excel->getActiveSheet()->getStyle(‘B’ . $n)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$excel->getActiveSheet()->getStyle(‘C’ . $n)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$excel->getActiveSheet()->getStyle(‘D’ . $n)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$excel->getActiveSheet()->getStyle(‘E’ . $n)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$excel->getActiveSheet()->getStyle(‘F’ . $n)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$excel->getActiveSheet()->getStyle(‘D’)->getNumberFormat()->setFormatCode(\PHPExcel_Style_NumberFormat::FORMAT_TEXT);

//从第二行开始写入数据(第一行为表头)
$excel->getActiveSheet()->setCellValue(‘A’ . $n, $v[‘name’]);
$excel->getActiveSheet()->setCellValue(‘B’ . $n, $v[‘address’]);
$excel->getActiveSheet()->setCellValue(‘C’ . $n, $v[‘phone’]);
$excel->getActiveSheet()->setCellValue(‘D’ . $n, $v[“departure_time”]);
$excel->getActiveSheet()->setCellValue(‘E’ . $n, $v[‘two_room’]);
$excel->getActiveSheet()->setCellValue(‘F’ . $n, KaTeX parse error: Expected 'EOF', got '}' at position 19: …three_room']); }̲ } else { break…data);

//清理缓冲区,避免中文乱码
ob_end_clean();//清除缓冲区,避免乱码
header(‘Content-Type: application/vnd.ms-excel’);
header(‘Content-Disposition: attachment;filename="’ . $name . ‘.xlsx"’);
header(‘Cache-Control: max-age=0’);
//导出数据
KaTeX parse error: Undefined control sequence: \PHPExcel at position 13: res_excel = \̲P̲H̲P̲E̲x̲c̲e̲l̲_IOFactory::cre…excel, ‘Excel2007’);
$res_excel->save(‘php://output’);
}
/**

  • daoru
  • @param
  • @param
  • @return
    */
    public function implodexcel()
    {

set_time_limit(0);
if (!empty(KaTeX parse error: Expected '}', got 'EOF' at end of input: …传文件 if (!empty(_FILES[‘import’][‘error’])) {
return array(‘status’ => 0, ‘msg’ => ‘文件上传失败’);
}

$tmp_file = $_FILES [‘import’] [‘tmp_name’];
$file_types = explode(".", $_FILES [‘import’] [‘name’]);
$file_type = f i l e t y p e s [ c o u n t ( file_types [count( filetypes[count(file_types) - 1];
/判别是不是.xls文件,判别是不是excel文件/
if (strtolower(KaTeX parse error: Expected 'EOF', got '&' at position 22: …ype) != "xlsx" &̲& strtolower(file_type) != “xls”) {
$this->error(‘不是Excel文件,重新上传’);
}
/设置上传路径/
/百度有些文章写的上传路径经过编译之后斜杠不对。不对的时候用大写的DS代替,然后用连接符链接就可以拼凑路径了。/
$savePath = ROOT_PATH . ‘public’ . DS . ‘upload’ . DS;/以时间来命名上传的文件/
$str = date(‘Ymdhis’);
$file_name = $str . “.” . f i l e t y p e ; / ∗ 是 否 上 传 成 功 ∗ / i f ( ! c o p y ( file_type; /*是否上传成功*/ if (!copy( filetype;//if(!copy(tmp_file, $savePath . $file_name)) {
KaTeX parse error: Expected 'EOF', got '}' at position 22: …error('上传失败'); }̲ /* *注意:这里调用执行了…res,再进行数据库写入
*/
$res = t h i s − > r e a d ( this->read( this>read(savePath . $file_name, “UTF-8”, $file_type);//传参,判断office2007还是office2003

u n i q u e s = a r r a y f i l t e r ( a r r a y c o l u m n ( uniques = array_filter(array_column( uniques=arrayfilter(arraycolumn(res, 0));
f i l p u n i = a r r a y f l i p ( a r r a y f l i p ( filpuni = array_flip(array_flip( filpuni=arrayflip(arrayflip(uniques));

if (count( u n i q u e s ) ! = c o u n t ( uniques) != count( uniques)!=count(filpuni)) {
return array(‘status’ => 0, ‘msg’ => “酒店名称有重复项,请处理后再导入”);
}

$datas = Db::table(‘enroll_activity_hotel’)->where(‘is_del’, ‘0’)->field(‘id,name,address,phone,departure_time,two_room,three_room’)->select();
a n a m e s = a r r a y c o l u m n ( anames = array_column( anames=arraycolumn(datas, ‘name’);
c o u l u d a t e = a r r a y c o l u m n ( couludate = array_column( couludate=arraycolumn(datas, null, ‘name’);//print_r(KaTeX parse error: Expected '}', got 'EOF' at end of input: …的写入*/ foreach (res as $k => $v) {

//如果导入数据为空,跳过
if (empty(array_filter($v))) {
continue;
}

if ($k > 1) {

m b l e n g t h = m b s t r l e n ( mblength = mb_strlen( mblength=mbstrlen(v[0], ‘UTF8’);
if ($mblength > 50 || $mblength < 1) {
Db::rollback();
return array(‘status’ => 0, ‘msg’ => ‘酒店名’ . $v[0] . ‘:字符长度不符请控制在2-50字符以内’);
}
p h o l e n g t h = m b s t r l e n ( pholength = mb_strlen( pholength=mbstrlen(v[2], ‘UTF8’);
if ($pholength > 20 || $pholength < 1) {
Db::rollback();
return array(‘status’ => 0, ‘msg’ => ‘酒店’ . KaTeX parse error: Expected 'EOF', got '}' at position 20: … . ':电话长度不符'); }̲ if(!is_numeric…v[2])) {
Db::rollback();
return array(‘status’ => 0, ‘msg’ => ‘酒店’ . $v[0] . ‘:电话必须为数字’);
}
a d r e s l e n g t h = m b s t r l e n ( adreslength = mb_strlen( adreslength=mbstrlen(v[1], ‘UTF8’);
if ($adreslength > 100 || $adreslength < 1) {
Db::rollback();
return array(‘status’ => 0, ‘msg’ => ‘酒店’ . $v[0] . ‘:地址长度不符’);
}

t i m e l e n g t h = m b s t r l e n ( timelength = mb_strlen( timelength=mbstrlen(v[3], ‘UTF8’);
if ($timelength > 20 || $timelength < 1) {
Db::rollback();
return array(‘status’ => 0, ‘msg’ => ‘酒店’ . $v[0] . ‘:发车时间长度不符’);
}

t o r o m l e n g t h = m b s t r l e n ( toromlength = mb_strlen( toromlength=mbstrlen(v[4], ‘UTF8’);
t r e r o m l e n g t h = m b s t r l e n ( treromlength = mb_strlen( treromlength=mbstrlen(v[5], ‘UTF8’);
if ($toromlength < 1 || $treromlength < 1) {
Db::rollback();
return array(‘status’ => 0, ‘msg’ => ‘酒店’ . KaTeX parse error: Expected 'EOF', got '}' at position 31: …写,没有请填写数字为0'); }̲ if(!is_numeric…v[4])) {
Db::rollback();
return array(‘status’ => 0, ‘msg’ => ‘酒店’ . KaTeX parse error: Expected 'EOF', got '}' at position 22: … ':房间数必须为数字'); }̲ if(!is_numeric…v[5])) {
Db::rollback();
return array(‘status’ => 0, ‘msg’ => ‘酒店’ . $v[0] . ‘:房间数必须为数字’);
}
i s e x i t = a r r a y s e a r c h ( isexit = array_search( isexit=arraysearch(v[0], $anames);

if (false === $isexit) {
d a t a [ data[ data[k][‘name’] = $v[0];
d a t a [ data[ data[k][‘address’] = $v[1];
d a t a [ data[ data[k][‘phone’] = $v[2];
d a t a [ data[ data[k][‘departure_time’] = $v[3];
d a t a [ data[ data[k][‘two_room’] = $v[4];
d a t a [ data[ data[k][‘three_room’] = $v[5];
d a t a [ data[ data[k][‘is_open’] = 1;
d a t a [ data[ data[k][‘add_admin_id’] = session(‘user.id’);
d a t a [ data[ data[k][‘add_time’] = time();
d a t a [ data[ data[k][‘update_admin_id’] = session(‘user.id’);
d a t a [ data[ data[k][‘update_time’] = time();
} else {
//如果数据表中有本账户,判断他最新导入的表格是否修改过信息
if ( c o u l u d a t e [ couludate[ couludate[v[0]][‘address’] != $v[1] || c o u l u d a t e [ couludate[ couludate[v[0]][‘phone’] != $v[2] || c o u l u d a t e [ couludate[ couludate[v[0]][‘departure_time’] != $v[3] || c o u l u d a t e [ couludate[ couludate[v[0]][‘two_room’] != $v[4] || c o u l u d a t e [ couludate[ couludate[v[0]][‘three_room’] != $v[5]) {
d a t a u p [ dataup[ dataup[k][‘id’] = c o u l u d a t e [ couludate[ couludate[v[0]][‘id’];
d a t a u p [ dataup[ dataup[k][‘address’] = $v[1];
d a t a u p [ dataup[ dataup[k][‘phone’] = $v[2];
d a t a u p [ dataup[ dataup[k][‘departure_time’] = $v[3];
d a t a u p [ dataup[ dataup[k][‘two_room’] = $v[4];
d a t a u p [ dataup[ dataup[k][‘three_room’] = $v[5];
d a t a u p [ dataup[ dataup[k][‘update_admin_id’] = session(‘user.id’);
d a t a u p [ dataup[ dataup[k][‘update_time’] = time();

}
}

}
}
if (isset( d a t a u p ) ∣ ∣ i s s e t ( dataup) || isset( dataup)isset(data)) {
//如果有更新的数据,批量更新
if (isset($dataup)) {

foreach ($dataup as $key => $value) {
$updas = Db::table(‘enroll_activity_hotel’)->where(‘id’, v a l u e [ ′ i d ′ ] ) − > u p d a t e ( value['id'])->update( value[id])>update(value);
if (!$updas) {
Db::rollback();
return array(‘status’ => 0, ‘msg’ => $e->getMessage());
}
}

}
if (isset($data)) {
//插入的操作最好放在循环外面
r e s u l t = D b : : t a b l e ( ′ e n r o l l a c t i v i t y h o t e l ′ ) − > i n s e r t A l l ( result = Db::table('enroll_activity_hotel')->insertAll( result=Db::table(enrollactivityhotel)>insertAll(data);
if (!$result) {
Db::rollback();
return array(‘status’ => 0, ‘msg’ => $e->getMessage());
}
}
Db::commit();
return array(‘status’ => 1, ‘msg’ => “导入成功”);

} else {
Db::rollback();
return array(‘status’ => 0, ‘msg’ => “重复导入”);
}

} catch (\Exception $e) {
Db::rollback();
return array(‘status’ => 0, ‘msg’ => $e->getMessage());
}
}

}

/**

  • 导入方法附属方法
  • @param
  • @param
  • @return
    */
    public function read($filename, $encode, $file_type)
    {

vendor(“PHPExcel.PHPExcel.PHPExcel”);
vendor(“PHPExcel.PHPExcel.Writer.IWriter”);
vendor(“PHPExcel.PHPExcel.Writer.Abstract”);
vendor(“PHPExcel.PHPExcel.Writer.Excel5”);
vendor(“PHPExcel.PHPExcel.Writer.Excel2007”);
vendor(“PHPExcel.PHPExcel.IOFactory”);

if (strtolower($file_type) == ‘xls’)//判断excel表类型为2003还是2007
{
Vendor(“Excel.PHPExcel.Reader.Excel5”);
$objReader = \PHPExcel_IOFactory::createReader(‘Excel5’);

} elseif (strtolower($file_type) == ‘xlsx’) {
Vendor(“Excel.PHPExcel.Reader.Excel2007”);
$objReader = \PHPExcel_IOFactory::createReader(‘Excel2007’);
}
$objReader->setReadDataOnly(true);
$objPHPExcel = o b j R e a d e r − > l o a d ( objReader->load( objReader>load(filename);
$objWorksheet = $objPHPExcel->getActiveSheet();
$highestRow = $objWorksheet->getHighestRow();
$highestColumn = $objWorksheet->getHighestColumn();
KaTeX parse error: Undefined control sequence: \PHPExcel at position 22: …tColumnIndex = \̲P̲H̲P̲E̲x̲c̲e̲l̲_Cell::columnIn…highestColumn);
e x c e l D a t a = a r r a y ( ) ; f o r ( excelData = array(); for ( excelData=array();for(row = 1; $row <= $highestRow; KaTeX parse error: Expected '}', got 'EOF' at end of input: row++) { for (col = 0; $col < $highestColumnIndex; $col++) {
e x c e l D a t a [ excelData[ excelData[row][] = (string) o b j W o r k s h e e t − > g e t C e l l B y C o l u m n A n d R o w ( objWorksheet->getCellByColumnAndRow( objWorksheet>getCellByColumnAndRow(col, $row)->getValue();
}
}
return $excelData;
}

Excel的基础入门操作,协助你掌握从零基础入门到高级技巧应用(全7集) 视频教程下载地址:https://306t.com/file/686368-477371689

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值