- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文所述实例是使用在Thinkphp的开发框架上,要是使用在其他框架也是同样的方法,很多人可能不能正确的实现Excel的导入导出,问题基本上都是phpExcel的核心类引用路径出错造成的,如果有问题大家务必要对路劲是否引用正确进行测试.
具体操作步骤如下:
(一)导入Excel 。
第一,在前台html页面进行上传文件:如:
1
2
3
4
5
|
<
form
method
=
"post"
action
=
"php文件"
enctype
=
"multipart/form-data"
>
<
h3
>导入Excel表:</
h3
><
input
type
=
"file"
name
=
"file_stu"
/>
<
input
type
=
"submit"
value
=
"导入"
/>
</
form
>
|
第二,在对应的php文件进行文件的处理 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
if
(!
empty
(
$_FILES
[
'file_stu'
] [
'name'
] ))
{
$tmp_file
=
$_FILES
[
'file_stu'
] [
'tmp_name'
];
$file_types
=
explode
(
"."
,
$_FILES
[
'file_stu'
] [
'name'
] );
$file_type
=
$file_types
[
count
(
$file_types
) - 1];
/*判别是不是.xls文件,判别是不是excel文件*/
if
(
strtolower
(
$file_type
) !=
"xls"
)
{
$this
->error (
'不是Excel文件,重新上传'
);
}
/*设置上传路径*/
$savePath
= SITE_PATH .
'/public/upfile/Excel/'
;
/*以时间来命名上传的文件*/
$str
=
date
(
'Ymdhis'
);
$file_name
=
$str
.
"."
.
$file_type
;
/*是否上传成功*/
if
(!
copy
(
$tmp_file
,
$savePath
.
$file_name
))
{
$this
->error (
'上传失败'
);
}
/*
*对上传的Excel数据进行处理生成编程数据,这个函数会在下面第三步的ExcelToArray类中
注意:这里调用执行了第三步类里面的read函数,把Excel转化为数组并返回给$res,再进行数据库写入
*/
$res
= Service (
'ExcelToArray'
)->read (
$savePath
.
$file_name
);
/*
重要代码 解决Thinkphp M、D方法不能调用的问题
如果在thinkphp中遇到M 、D方法失效时就加入下面一句代码
*/
//spl_autoload_register ( array ('Think', 'autoload' ) );
/*对生成的数组进行数据库的写入*/
foreach
(
$res
as
$k
=>
$v
)
{
if
(
$k
!= 0)
{
$data
[
'uid'
] =
$v
[0];
$data
[
'password'
] = sha1 (
'111111'
);
$data
[
'email'
] =
$v
[1];
$data
[
'uname'
] =
$v
[3];
$data
[
'institute'
] =
$v
[4];
$result
= M (
'user'
)->add (
$data
);
if
(!
$result
)
{
$this
->error (
'导入数据库失败'
);
}
}
}
}
|
第三:ExcelToArrary类,用来引用phpExcel并处理Excel数据的 此处注意:ExcelToArrary类建在根目录下的 addons /services/ExcelToArrary.class.php中 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
class
ExcelToArrary
extends
Service{
public
function
__construct() {
/*导入phpExcel核心类 注意 :你的路径跟我不一样就不能直接复制*/
include_once
(
'./Excel/PHPExcel.php'
);
}
/**
* 读取excel $filename 路径文件名 $encode 返回数据的编码 默认为utf8
*以下基本都不要修改
*/
public
function
read(
$filename
,
$encode
=
'utf-8'
){
$objReader
= PHPExcel_IOFactory::createReader(
'Excel5'
);
$objReader
->setReadDataOnly(true);
$objPHPExcel
=
$objReader
->load(
$filename
);
$objWorksheet
=
$objPHPExcel
->getActiveSheet();
$highestRow
=
$objWorksheet
->getHighestRow();
$highestColumn
=
$objWorksheet
->getHighestColumn();
$highestColumnIndex
= PHPExcel_Cell::columnIndexFromString(
$highestColumn
);
$excelData
=
array
();
for
(
$row
= 1;
$row
<=
$highestRow
;
$row
++) {
for
(
$col
= 0;
$col
<
$highestColumnIndex
;
$col
++) {
$excelData
[
$row
][] =(string)
$objWorksheet
->getCellByColumnAndRow(
$col
,
$row
)->getValue();
}
}
return
$excelData
;
}
}
|
第四,以上就是导入的全部内容,phpExcel包附在最后.
(二)Excel的导出(相对于导入简单多了) 。
第一,先查出数据库里面要生成Excel的数据,如:
1
2
3
|
$data
= M(
'User'
)->findAll();
//查出数据
$name
=
'Excelfile'
;
//生成的Excel文件文件名
$res
=service(
'ExcelToArrary'
)->push(
$data
,
$name
);
|
第二,ExcelToArrary类,用来引用phpExcel并处理数据的 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
class
ExcelToArrary
extends
Service{
public
function
__construct() {
/*导入phpExcel核心类 注意 :你的路径跟我不一样就不能直接复制*/
include_once
(
'./Excel/PHPExcel.php'
);
}
/* 导出excel函数*/
public
function
push(
$data
,
$name
=
'Excel'
){
error_reporting
(E_ALL);
date_default_timezone_set(
'Europe/London'
);
$objPHPExcel
=
new
PHPExcel();
/*以下是一些设置 ,什么作者 标题啊之类的*/
$objPHPExcel
->getProperties()->setCreator(
"转弯的阳光"
)
->setLastModifiedBy(
"转弯的阳光"
)
->setTitle(
"数据EXCEL导出"
)
->setSubject(
"数据EXCEL导出"
)
->setDescription(
"备份数据"
)
->setKeywords(
"excel"
)
->setCategory(
"result file"
);
/*以下就是对处理Excel里的数据, 横着取数据,主要是这一步,其他基本都不要改*/
foreach
(
$data
as
$k
=>
$v
){
$num
=
$k
+1;
$objPHPExcel
->setActiveSheetIndex(0)
//Excel的第A列,uid是你查出数组的键值,下面以此类推
->setCellValue(
'A'
.
$num
,
$v
[
'uid'
])
->setCellValue(
'B'
.
$num
,
$v
[
'email'
])
->setCellValue(
'C'
.
$num
,
$v
[
'password'
])
}
$objPHPExcel
->getActiveSheet()->setTitle(
'User'
);
$objPHPExcel
->setActiveSheetIndex(0);
header(
'Content-Type: application/vnd.ms-excel'
);
header(
'Content-Disposition: attachment;filename="'
.
$name
.
'.xls"'
);
header(
'Cache-Control: max-age=0'
);
$objWriter
= PHPExcel_IOFactory::createWriter(
$objPHPExcel
,
'Excel5'
);
$objWriter
->save(
'php://output'
);
exit
;
}
|
第三,以上就是导出的全部内容 。
希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助.
最后此篇关于ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例的文章就讲到这里了,如果你想了解更多关于ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
具体详细介绍请看下文: 在使用文件进行交互数据的应用来说,使用FTP服务器是一个很好的选择。本文使用Apache Jakarta Commons Net(commons-net-3.3.jar)
我在日志文件中收到这些警告: WARN 2013-01-15 00:08:15,550 org.eclipse.jetty.http.HttpParser- HttpParser Full for
我在使用特定网页时遇到问题。当我按下链接时,我收到应用程序错误(不是 http 错误等,而是应用程序级别错误)。 但是我打开了开发人员工具和网络控制台,我看到没有请求发送到服务器。 所以我双击并选择查
我没有组装经验,但这是我一直在做的。如果在通过程序集中的指针传递参数和调用函数时缺少任何基本方面,我希望输入。 例如,我想知道是否应该还原ecx,edx,esi,edi,。我读到它们是通用寄存器,但我
我没有组装经验,但这是我一直在做的。如果在通过程序集中的指针传递参数和调用函数时缺少任何基本方面,我希望输入。 例如,我想知道是否应该还原ecx,edx,esi,edi,。我读到它们是通用寄存器,但我
我正在尝试创建完整 uiscrollview 的快照,所有内容大小,我已经搜索了很多,并且我在 SO 上找到了一些东西,如下所示: Getting a screenshot of a UIScroll
我想复制一个包含以下结构的Vector,对我来说重要的是在修改复制的 vector 时保持原始Vector完整: public class objet_poid_n { public int
给定一个示例字符串 s = '嗨,我的名字是 Humpty-Dumpty,来自“爱丽丝,爱丽丝镜中奇遇记”',我想将其分成以下 block : # To Do: something like {l =
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以
我正在尝试创建一个正则表达式来查找文本中的 Linux 文件路径,但是正则表达式对我来说非常陌生。我有下面的代码片段,它将识别下面文件结构的开头。 .*(/bin/|/home/).* 完成正则表达式
我正在寻找远程托管的 JPG 的尺寸、宽度和高度。我已经了解了如何通过下载完整图像来执行此操作。 但是,如果我可以通过仅下载足以获取此信息的方式来做到这一点,那将是理想的。 典型的图像大小为 200K
有没有办法让下面的代码: import traceback def log(message): print "%s: %s" %(traceback.extract_stack()[0:-1]
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 3 年前。 Improve this qu
git show 显示了修订版中所做的所有更改。但是,它会打印出所有更改——而不仅仅是文件名。 git show --stat 只显示文件名,但它把它们截断了!有没有办法获得已更改文件名的完整列表?
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想要改善这个问题吗?更新问题,以便将其作为on-topi
当我在模板中调用我的模型 get_absolute_url 方法时,我想要一个绝对/完整的 url。在我的入门模型中,我有以下内容: def get_absolute_url(self): r
我正在使用 jQuery 1.5.1 这是我的代码: $('.cellcontent').animate({ left: '-=190'}, { easing: alert('start
我正在使用下面的方法删除条形图并使用新数据更新条形图,但这样做时出现了一个小故障/完整的图表消失 1 秒,直到加载新数据。但是是否可以通过仅增加/减少柱形而不实际消失图表来实现相同的目的。 d3.se
基于 this question 中的讨论,任何人都可以提供代码或代码链接,显示 NumericLiteralX 模块的完整实现(例如 this one )?我对 NumericLiteralX 模块
我的目标是检索网站的 html,并将其转换为可读的String。我下面的代码可以工作,但我遇到了一个技术问题:当我尝试检索 http://time.gov/HTML5 的 html 时,我在 andr
我是一名优秀的程序员,十分优秀!