实现内容:
- 通过php,将Excel的信息读取到MySQL
- 再将MySQL的信息显示到网页上
实现效果:
Excel:

MySQL:

网页显示效果:

文件说明:
- PHPExcel:下载的插件
- 2020.…….xlsx:需要读入的excel文件
- dbconfig.php:数据库配置文件
- db.php:mysql操作类文件
- inset.php:将excel写入mysql
- display.php:将mysql的信息显示在网页上
——————————
- reader.php:直接读取excel文件信息,显示在在网页上(与此内容无关)
——————————

————————————————————————————
目录
————————————————————————————
01 准备工作
- 学习PHPExcel,下载PHPExcel插件
可参考:PHPExcel的使用:使用PHP对Excel和MySQL操作 - 打卡XAMPP,开启Apache和MySQL
- 浏览器输入
http://127.0.0.1:8001/phpmyadmin/进入phpmyadmin,管理数据库
(8001为Apache的端口号) - 在数据库内创建
gutable数据库 - 在
gutable数据库内创建account/code>表单 - 在
account/code>内建立 order_source 等15个字段的表头 - 将所创建的php文件放到XAMPP安装根目录的
htdocs下
02 dbconfig.php:数据库配置文件
我设置的数据库密码为 123456
我创建的数据库名称为 gutable
以上可自行更改,数据库默认密码为空
<?php
$phpexcel = array(
"host"=>"127.0.0.1",
"username"=>"root",
"password"=>"123456",
"database"=>"gutable",
"charset"=>"utf8"
);
?>
03 db.php:mysql操作类文件
- account为我创建的表单名
- dirname( __ FILE __ ):当前目录
- php中的“.”等同于c++中的“+”
- dirname(FILE)."/dbconfig.php"效果即为:字符串“当前目录地址”+“/dbconfig.php”
,即为 dbconfig.php 文件的绝对目录地址 - require: 引入文件
- class db创建类db
- db类函数首先执行构造函数,将数据库的名字、密码等赋值给conn
- or die(mysqli_error():如果不成功则错误
- $sql = "select * from ‘ account` ":双引号 内 是sql语句;单引号 内 是 sql 内的字符串,此处account是表单名
- $ sql = “insert into ‘account` (order_source,camp,profession,gift,item,order_form,phone_num,order_time,name,remark,team_num,cast_to,fini_date,fig_stat,sys_stat) values (”.$totalData.")";
将 totalData 内的数据 传递给 数据库中 account表单内 order_source等字段
totalData是定义在Insert.php内的变量,其作用是读入excel中一行的值
<?php
require dirname(__FILE__)."/dbconfig.php";//引入配置文件
class db{
public $conn = null;
public function __construct($config){//构造方法,实例化类时自动调用
$this->conn = mysqli_connect($config['host'],$config['username'],$config['password']) or die(mysqli_error());//连接数据库
mysqli_select_db($this->conn,$config['database']) or die(mysqli_error());//选择数据库
mysqli_query($this->conn,"set names ".$config['charset']) or die(mysqli_error($this->conn));//设定mysql编码
}
/**
根据传入sql语句 查询mysql结果集
**/
public function getResult($sql){
$resource = mysqli_query($this->conn,$sql) or die(mysqli_error($this->conn));//查询sql语句
$res = array();
while(($row=mysqli_fetch_assoc($resource))!=false){
$res[] = $row;
}
return $res;
}
/**
从account数据表中获取全部数据
**/
public function getDataBySQL(){
$sql = "select * from `account`";//account是设置的MySQL表单名,可自行修改
$res = self::getResult($sql);
return $res;
}
/**
将数据增加到account数据表中
**/
public function insertDataBySQL($totalData){
$sql = "insert into `account` (order_source,camp,profession,gift,item,order_form,phone_num,order_time,name,remark,team_num,cast_to,fini_date,fig_stat,sys_stat) values (".$totalData.")";
mysqli_query($this->conn,$sql);
}
}
?>
04 inset.php:将excel写入mysql
- $dir = dirname( __ FILE__);//获得当前脚本所在路径
便于之后各文件定位
- require $dir."/PHPExcel/PHPExcel/IOFactory.php";//引入excel读取类文件
这是PHPExcel插件 中excel读取类文件,读取excel均需要这个文件
- $ db = new db($phpexcel);//实例化db类,连接数据库
可以这样理解
- 第一个db是实例化
- 第二个db是
db.php中写入的类Class db,现在这个操作是将其实例化,所以将调用构造函数,传入连接的数据库信息 - $phpexce是
dbconfig.php中定义的数据结构类型,像是c++中的定义的struct,而这个里面就存放着数据库名字、密码等各种信息,
作为实参传递给 db类 里,帮助完成构造函数
- $ objPHPExcel = PHPExcel_IOFactory::load($filename);//加载excel文件
加载 需要读取的Excel文件,此处是全部加载
- $sheet = $objPHPExcel->getSheet(2);//选择第三个sheet
这里第1个sheet的标记号为0
- 接下来进行逐行遍历 foreach ,对于表头位置 跳过 (if($row->getRowIndex()<2)),因为表头就是 订单来源 等这些信息,这个我们已经在mysql数据库中创建了
- $totalData = “”;//SQL 增添语句的一部分
创建了变量 totalData 了,接下来这个我们会传入db.php最后一个函数 insertDataBySQL 的 sql操作语句 中 - 由于已经在 逐行遍历 的循环里了,21行 再使用的 foreach 就是逐个单元格的遍历了
-
- 当 i >15 就可以continue跳出这行的遍历了
-
- 否则,将读取的excel单元格内容赋值给data
-
- 如果i=15,则说明是 这行里 最后一个单元格 了,所以
$ totalData .= “’”.$data."’",即作为string变量,totalData+=data
- 如果i=15,则说明是 这行里 最后一个单元格 了,所以
-
- 如果i<15,则说明他后面还有单元格,所以
$ totalData .= “’”.$data."’,",即totalData+=data+,
- 如果i<15,则说明他后面还有单元格,所以
-
-
- 也就是说
$ totalData .= “’”.$data."’"的第一个双引号内容为空,然后通过“.”实现php的加操作,加上读取的data值,再通过“.”实现php的加操作,加上第二个双引号–>如果是一行里最后一个单元格,则里面内容为空,否则为 逗号 ,便于和后面的单元格连接
- 也就是说
-
- 最后,$ db->insertDataBySQL($totalData);//将每行数据增添到数据表中
<?php
header("charset=utf-8");
$dir = dirname(__FILE__);//获得当前脚本所在路径
require $dir."/db.php";//引入mysql操作类文件
require $dir."/PHPExcel/PHPExcel/IOFactory.php";//引入excel读取类文件
$db = new db($phpexcel);//实例化db类,连接数据库
$filename = $dir."/2020.02.20 CD 流水.xlsx";
$objPHPExcel = PHPExcel_IOFactory::load($filename);//加载excel文件
$sheet = $objPHPExcel->getSheet(2);//选择第三个sheet
foreach($sheet->getRowIterator() as $row){//逐行遍历
if($row->getRowIndex()<2){//跳过表头
continue;
}
$i = 0;
$totalData = "";//SQL 增添语句的一部分
foreach($row->getCellIterator() as $cell){//逐个单元格遍历
$i++;
if($i > 15){
continue;
}
$data = $cell->getValue();//获得单元格的值
if($i == 15){
$totalData .= "'".$data."'";
}else{
$totalData .= "'".$data."',";
}
}
$db->insertDataBySQL($totalData);//将每行数据增添到数据表中
}
?>
05 display.php:将mysql的信息显示在网页上
- head的style里定义样式
- table tr:nth-child(6) td{background: #348051;} 可以实现表格不同行也是不同
- < table>:创建表格;< th>是表头;< td>是表的内容;< tr>每行的开始和结束
- echo $html;//echo到HTML中
<!doctype html>
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html; charset=UTF-8"/>
<title>无标题文档</title>
<style>
td{
background-color: azure;
}
th{
background-color: #fc9d9a;
}
table tr:nth-child(6) td{background: #348051;}
table tr:nth-child(7) td{background: #348051;}
table tr:nth-child(8) td{background: #e4ed53;}
</style>
</head>
<body>
<table text-align="left" cellspacing="0" border="1" bordercolor="#f9cdad">
<tr>
<th>订单来源</th> <!--order_source-->
<th>阵营</th> <!--camp-->
<th>职业</th> <!--profession-->
<th>天赋装等</th> <!--gift-->
<th>项目</th> <!--item-->
<th>订单格式内容</th> <!--order_form-->
<th>电话</th> <!--phone_num-->
<th>接单时间</th> <!--order_time-->
<th>角色名</th> <!--name-->
<th>备注</th> <!--remark-->
<th>团队编号</th> <!--team_num-->
<th>抛单下家</th> <!--cast_to-->
<th>完成日期</th> <!--fini_date-->
<th>图状态</th> <!--fig_stat-->
<th>系统状态</th> <!--sys_stat-->
</tr>
<?php
$dir = dirname(__FILE__);//获得当前脚本所在路径
require $dir."/db.php";//引入mysql操作类文件
$db = new db($phpexcel);//实例化db类,连接数据库
$data = $db->getDataBySQL();//获取数据表中的数据
foreach($data as $key_1=>$value_1){//逐行遍历
$html = "";//echo到HTML中的字符串
$i = 0;
foreach($value_1 as $key_2=>$value_2){//逐个单元格遍历
$i++;
if($i == 1){
$html .= "<tr><td>".$value_2."</td>";//每行开始
}elseif($i == 15){
$html .= "<td>".$value_2."</td></tr>";//每行结束
}else{
$html .= "<td>".$value_2."</td>";//每行中间
}
}
echo $html;//echo到HTML中
}
?>
</table>
</body>
</html>
06 其他:read.php实现直接从excel读入,并显示在网页上
<!doctype html>
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html; charset=UTF-8"/>
</head>
<body>
<table style='text-align:left;' border='1'>
<tr><th>order_source</th><th>camp</th><th>profession</th><th>gift</th><th>item</th></tr>
<?php
$dir = dirname(__FILE__);
require $dir."/db.php";
require "D:/ws/xampp/PHPExcel/PHPExcel/PHPExcel/IOFactory.php";
$db = new db($phpexcel);
$filename = $dir."/2020.02.20 CD 流水.xlsx";
$objPHPExcel = PHPExcel_IOFactory::load($filename);
$sheet = $objPHPExcel->getSheet(1);
foreach($sheet->getRowIterator() as $row){
if($row->getRowIndex()<2){
continue;
}
$i = 0;
$totalData = "";
foreach($row->getCellIterator() as $cell){
$i++;
if($i>5){
continue;
}
$data = $cell->getValue();
if($i == 1){
echo "<tr><th>".$data."</th>";
}elseif($i == 5){
echo "<th>".$data."</th></tr>";
}else{
echo "<th>".$data."</th>";
}
}
echo "<br/>";
}
?>
</body>
</html>
本文介绍如何使用PHP和PHPExcel插件将Excel数据导入MySQL数据库,并将数据库内容展示在网页上。涵盖数据库配置、数据读取、插入及网页显示等步骤。

1265

被折叠的 条评论
为什么被折叠?



