PHP Excel导入导出亲测成功

介绍

PHP开发中会遇到导入导出表格的功能,特别是电商平台,以前用的PHPExcel 作者已经不再更新和维护了,推荐使用PhpSpreadsheet读取和写入Excel。接下来博主将介绍如何使用

提前准备

要使用PhpSpreadsheet需要满足以下条件:

PHP5.6或更高版本,推荐PHP7.0(博主测试的时候php7.0导入导出是没有问题的,php7.3导出是打不开的)
支持php_zip扩展
支持php_xml扩展
支持php_gd2扩展

PHP导入

先新建个测试表格,内容如下
在这里插入图片描述

建库

然后新建个测试数据库excel 新建表 表的DDL语句如下

CREATE TABLE `data` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL COMMENT '标题',
  `content` varchar(255) NOT NULL COMMENT '内容',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;

安装PhpSpreadsheet

开始安装利用composer安装PhpSpreadsheet

composer require phpoffice/phpspreadsheet

编写代码


	#数据库配置
	require_once '../src/conf.php';

	$file = $_FILES['file']['tmp_name'];
	# 载入composer自动加载文件
	require '../vendor/autoload.php';
	# 载入方法库
	require '../src/function.php';

	# 创建读操作
	$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx');
	# 打开文件、载入excel表格
	$spreadsheet = $reader->load($file);
	# 获取活动工作薄
	$sheet = $spreadsheet->getActiveSheet();

	# 获取总列数
	$highestColumn = $sheet->getHighestColumn();
	# 获取总行数
	$highestRow = $sheet->getHighestRow();


	# 列数 改为数字显示
	$highestColumnIndex = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString($highestColumn);


	// echo $highestRow;
	$sql = "INSERT INTO data (id,title,content) VALUES ";
	// echo $highestRow;
	for($a=2;$a<=$highestRow;$a++){
		$id = $sheet->getCellByColumnAndRow(1,$a)->getValue();
		$title = $sheet->getCellByColumnAndRow(2,$a)->getValue();
		$content = $sheet->getCellByColumnAndRow(3,$a)->getValue();

		//转义特殊字符
	    $title = addslashes($title);
	    $content = addslashes($content);
	    
	    //拼接
        $itemStr = '( ';
        $itemStr .=  "'$id','$title','$content'";
        $itemStr .= '),';
        $sql .= $itemStr;
	}

	//移除最后一个逗号
	$sql = rtrim($sql, ',');
	$sql .= ';';

	//将拼接好的sql语句插入数据库
	$ins = insert($sql);
	if($ins){

		echo json_encode(['code'=>0,'msg'=>'成功']);
	}else{

		echo json_encode(['code'=>-2,'msg'=>'失败']);
	}

里面有一些函数是博主封装好的,这里的sql语句用的是组装的,不是单条插入的,这样大大提高数据库效率,然后前端页面需要上传,

查看效果

在这里插入图片描述
点击导入选择测试的表格进行导入 会看到数据库有内容了
在这里插入图片描述
可以看到成功导入了

PHP导出

导出相对于导入简单一点

	#数据库配置
	require_once '../src/conf.php';

	# 载入方法库
	require_once '../src/function.php';

	$select = fetchAll('select * from data');

	if(empty($select)){
		exit;
	}
	

	# 载入composer自动加载文件
	require '../vendor/autoload.php';
	# 给类文件的命名空间起个别名
	use \PhpOffice\PhpSpreadsheet\Spreadsheet;
	# 实例化 Spreadsheet 对象
	$spreadsheet = new Spreadsheet();
	# 获取活动工作薄
	$sheet = $spreadsheet->getActiveSheet();

	$sheet->setCellValue('A1','ID');
	$sheet->setCellValue('B1','标题');
	$sheet->setCellValue('C1','内容');
	$sheet->fromArray(
		$select,
		null,
		'A2'
	);

	// MIME 协议,文件的类型,不设置,会默认html
	header('Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
	// MIME 协议的扩展
	header('Content-Disposition:attachment;filename=1.xlsx');
	// 缓存控制
	header('Cache-Control:max-age=0');

	$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
	// php://output 它是一个只写数据流, 允许你以 print 和 echo一样的方式写入到输出缓冲区。 
	$writer->save('php://output');

点击页面的导出后,浏览器会下载个excel表格
在这里插入图片描述
成功下载,安全起见,一般下载的excel是受保护视图打开的,需要编辑,启用编辑即可.这篇博客就简单的讲解了一下php excel的导入导出,博主把实用的部分分享出来,小伙伴要是对表格有其他方面的需求,或者想深入了解这个东西,可以参考
PhpSpreadsheet使用总结

最后博主把打包好的源码和资料放在这里,点击下载

补充:
如果导出excel还是无法打开出现"文件损坏 无法打开",估计是excel保护视图的问题

文件损坏无法打开解决办法

觉得本篇博文对你有帮助可以点个赞或者评论支持一下哦

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值