热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php导入导出excel

看到这篇文章的时候,很是惊讶原作者的耐心,虽然我们在平时用的也有一些,但没有作者列出来的全,写excel的时候,我用过pear的库,也用过pack压包的头,同样那些利用smarty

看到这篇文章的时候,很是惊讶原作者的耐心,虽然我们在平时用的也有一些,但没有作者列出来的全,写excel的时候,我用过pear的库,也用过pack压包的头,同样那些利用smarty等作的简单替换xml的也用过,csv的就更不用谈了。呵呵。(COM方式不讲了,这种可读的太多了,我也写过利用wps等进行word等的生成之类的文章

但是在读的时候,只用过一种,具体是什么忘了,要回去翻代码了。因为采用的是拿来主义,记不住。
原文地址:http://xinsync.xju.edu.cn/index.php/archives/3858
原文内容:

最近因项目需要,需要开发一个模块,把系统中的一些数据导出成Excel,修改后再导回系统。就趁机对这个研究了一番,下面进行一些总结。
基本上导出的文件分为两种:
1:类Excel格式,这个其实不是传统意义上的Excel文件,只是因为Excel的兼容能力强,能够正确打开而已。修改这种文件后再保存,通常会提示你是否要转换成Excel文件。
优点:简单。
缺点:难以生成格式,如果用来导入需要自己分别编写相应的程序。
2:Excel格式,与类Excel相对应,这种方法生成的文件更接近于真正的Excel格式。

如果导出中文时出现乱码,可以尝试将字符串转换成gb2312,例如下面就把$yourStr从utf-8转换成了gb2312:
$yourStr =
mb_convert_encoding(”gb2312″, “UTF-8″, $yourStr);

下面详细列举几种方法。
一、PHP导出Excel

1:第一推荐无比风骚的PHPExcel,官方网站: http://www.codeplex.com/PHPExcel
导入导出都成,可以导出office2007格式,同时兼容2003。
下载下来的包中有文档和例子,大家可以自行研究。
抄段例子出来:


PHP代码
/**  
*
PHPExcel  
*  
* Copyright (C) 2006 - 2007
PHPExcel  
*  
* This library is free software; you
can redistribute it and/or  
* modify it under the terms of the GNU
Lesser General Public  
* License as published by the Free Software
Foundation; either  
* version 2.1 of the License, or (at your
option) any later version.  
*  
* This library is
distributed in the hope that it will be useful,  
* but WITHOUT ANY
WARRANTY; without even the implied warranty of  
* MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU  
* Lesser
General Public License for more details.  
*  
* You
should have received a copy of the GNU Lesser General Public  
*
License along with this library; if not, write to the Free
Software  
* Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA  02110-1301  USA  
*  
*
@category   PHPExcel  
* @package   
PHPExcel  
* @copyright  Copyright (c) 2006 - 2007 PHPExcel
( http://www.codeplex.com/PHPExcel)  
*
@license    http://www.gnu.org/licenses/lgpl.txt   
LGPL  
* @version    1.5.0,
2007-10-23  
*/   
   
/**
Error reporting
*/   
error_reporting(E_ALL);   
   
/**
Include path **/   
set_include_path(get_include_path() .
PATH_SEPARATOR . ‘../Classes/’);   
   
/**
PHPExcel */   
include
‘PHPExcel.php’;   
   
/**
PHPExcel_Writer_Excel2007 */   
include
‘PHPExcel/Writer/Excel2007.php’;   
   
//
Create new PHPExcel object   
echo date(’H:i:s’) . ” Create
new PHPExcel object\n”;   
$objPHPExcel = new
PHPExcel();   
   
// Set
properties   
echo date(’H:i:s’) . ” Set
properties\n”;   
$objPHPExcel->getProperties()->setCreator(”Maarten
Balliauw”);   
$objPHPExcel->getProperties()->setLastModifiedBy(”Maarten
Balliauw”);   
$objPHPExcel->getProperties()->setTitle(”Office
2007 XLSX Test
Document”);   
$objPHPExcel->getProperties()->setSubject(”Office
2007 XLSX Test
Document”);   
$objPHPExcel->getProperties()->setDescrīption(”Test
document for Office 2007 XLSX, generated using PHP
classes.”);   
$objPHPExcel->getProperties()->setKeywords(”office
2007 openxml
php”);   
$objPHPExcel->getProperties()->setCategory(”Test
result file”);   
   
// Add some
data   
echo date(’H:i:s’) . ” Add some
data\n”;   
$objPHPExcel->setActiveSheetIndex(0);   
$objPHPExcel->getActiveSheet()->setCellValue(’A1′,
‘Hello’);   
$objPHPExcel->getActiveSheet()->setCellValue(’B2′,
‘world!’);   
$objPHPExcel->getActiveSheet()->setCellValue(’C1′,
‘Hello’);   
$objPHPExcel->getActiveSheet()->setCellValue(’D2′,
‘world!’);   
   
// Rename
sheet   
echo date(’H:i:s’) . ” Rename
sheet\n”;   
$objPHPExcel->getActiveSheet()->setTitle(’Simple’);   
   
//
Set active sheet index to the first sheet, so Excel opens this as the first
sheet   
$objPHPExcel->setActiveSheetIndex(0);   
   
//
Save Excel 2007 file   
echo date(’H:i:s’) . ” Write to
Excel2007 format\n”;   
$objWriter = new
PHPExcel_Writer_Excel2007($objPHPExcel);   
$objWriter->save(str_replace(’.php’,
‘.xlsx’, __FILE__));   
   
// Echo
done   
echo date(’H:i:s’) . ” Done writing
file.\r\n”;  

 

2、使用pear的Spreadsheet_Excel_Writer类
下载地址: http://pear.php.net/package/Spreadsheet_Excel_Writer
此类依赖于OLE,下载地址:http://pear.php.net/package/OLE
需要注意的是导出的Excel文件格式比较老,修改后保存会提示是否转换成更新的格式。
不过可以设定格式,很强大。


PHP代码
require_once
‘Spreadsheet/Excel/Writer.php’;   
   
//
Creating a workbook   
$workbook = new
Spreadsheet_Excel_Writer();   
   
//
sending HTTP
headers   
$workbook->send(’test.xls’);   
   
//
Creating a worksheet   
$worksheet =&
$workbook->addWorksheet(’My first
worksheet’);   
   
// The actual
data   
$worksheet->write(0, 0,
‘Name’);   
$worksheet->write(0, 1,
‘Age’);   
$worksheet->write(1, 0, ‘John
Smith’);   
$worksheet->write(1, 1,
30);   
$worksheet->write(2, 0, ‘Johann
Schmidt’);   
$worksheet->write(2, 1,
31);   
$worksheet->write(3, 0, ‘Juan
Herrera’);   
$worksheet->write(3, 1,
32);   
   
// Let’s send the
file   
$workbook->close();   
?>  


3:利用smarty,生成符合Excel规范的XML或HTML文件
支持格式,非常完美的导出方案。不过导出来的的本质上还是XML文件,如果用来导入就需要另外处理了。
详细内容请见rardge大侠的帖子:http://bbs.chinaunix.net/viewthread.php?tid=745757

需要注意的是如果导出的表格行数不确定时,最好在模板中把”ss:ExpandedColumnCount=”5″
ss:ExpandedRowCount=”21″”之类的东西删掉。

4、利用pack函数打印出模拟Excel格式的断句符号,这种更接近于Excel标准格式,用office2003修改后保存,还不会弹出提示,推荐用这种方法。
缺点是无格式。


PHP代码
// Send
Header   
header(”Pragma:
public”);   
header(”Expires:
0″);   
header(”Cache-Control: must-revalidate, post-check=0,
pre-check=0″);   
header(”Content-Type:
application/force-download”);   
header(”Content-Type:
application/octet-stream”);   
header(”Content-Type:
application/download”);;   
header(”Content-Disposition:
attachment;filename=test.xls
“);   
header(”Content-Transfer-Encoding: binary
“);   
// XLS Data
Cell   
   
xlsBOF();   
xlsWriteLabel(1,0,”My
excel line one”);   
xlsWriteLabel(2,0,”My excel line two :
“);   
xlsWriteLabel(2,1,”Hello
everybody”);   
   
xlsEOF();   
   
function
xlsBOF() {   
echo pack(”ssssss”, 0×809, 0×8, 0×0, 0×10, 0×0,
0×0);   
return;   
}   
function
xlsEOF() {   
echo pack(”ss”, 0×0A,
0×00);   
return;   
}   
function
xlsWriteNumber($Row, $Col, $Value) {   
echo pack(”sssss”,
0×203, 14, $Row, $Col, 0×0);   
echo pack(”d”,
$Value);   
return;   
}   
function
xlsWriteLabel($Row, $Col, $Value ) {   
$L =
strlen($Value);   
echo pack(”ssssss”, 0×204, 8 + $L, $Row,
$Col, 0×0, $L);   
echo
$Value;   
return;   
}   
?>   
不过笔者在64位linux系统中使用时失败了,断句符号全部变成了乱码。   
   
5、使用制表符、换行符的方法   
制表符”\t”用户分割同一行中的列,换行符”\t\n”可以开启下一行。   
header(”Content-Type:
application/vnd.ms-execl”);   
header(”Content-Disposition:
attachment; filename=myExcel.xls”);   
header(”Pragma:
no-cache”);   
header(”Expires:
0″);   
/*first line*/   
echo
“hello”.”\t”;   
echo “world”.”\t”;   
echo
“\t\n”;   
   
/*start of second
line*/   
echo “this is second
line”.”\t”;   
echo “Hi,pretty
girl”.”\t”;   
echo
“\t\n”;   
?>  


6、使用com
如果你的PHP可以开启com模块,就可以用它来导出Excel文件


PHP代码
$filename =
“c:/spreadhseet/test.xls”;   
$sheet1 =
1;   
$sheet2 = “sheet2″;   
$excel_app =
new COM(”Excel.application”) or Die (”Did not
connect”);   
print “Application name:
{$excel_app->Application->value}\n” ;   
print “Loaded
version:
{$excel_app->Application->version}\n”;   
$Workbook =
$excel_app->Workbooks->Open(”$filename”) or Die(”Did not open $filename
$Workbook”);   
$Worksheet =
$Workbook->Worksheets($sheet1);   
$Worksheet->activate;   
$excel_cell
=
$Worksheet->Range(”C4″);   
$excel_cell->activate;   
$excel_result
= $excel_cell->value;   
print
“$excel_result\n”;   
$Worksheet =
$Workbook->Worksheets($sheet2);   
$Worksheet->activate;   
$excel_cell
=
$Worksheet->Range(”C4″);   
$excel_cell->activate;   
$excel_result
= $excel_cell->value;   
print
“$excel_result\n”;   
#To close all instances of
excel:   
$Workbook->Close;   
unset($Worksheet);   
unset($Workbook);   
$excel_app->Workbooks->Close();   
$excel_app->Quit();   
unset($excel_app);   
?>  

一个更好的例子: http://blog.chinaunix.net/u/16928/showart_387171.html

一、PHP导入Excel

1:还是用PHPExcel,官方网站: http://www.codeplex.com/PHPExcel。

2:使用PHP-ExcelReader,下载地址: http://sourceforge.net/projects/phpexcelreader
举例:


PHP代码
require_once
‘Excel/reader.php’;   
   
//
ExcelFile($filename, $encoding);   
$data = new
Spreadsheet_Excel_Reader();   
   
// Set
output
Encoding.   
$data->setOutputEncoding(’utf8′);   
   
$data->read(’
jxlrwtest.xls’);   
   
error_reporting(E_ALL
^ E_NOTICE);   
   
for ($i = 1; $i <=
$data->sheets[0][‘numRows‘]; $i++) {   
for ($j = 1; $j
<= $data->sheets[0][‘numCols‘]; $j++) {   
echo
“\”".$data->sheets[0][‘cells‘][$i][$j].”\”,”;   
}   
echo
“\n”;   
}   
   
?>
 

php导入导出excel,布布扣,bubuko.com


推荐阅读
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • Day2列表、字典、集合操作详解
    本文详细介绍了列表、字典、集合的操作方法,包括定义列表、访问列表元素、字符串操作、字典操作、集合操作、文件操作、字符编码与转码等内容。内容详实,适合初学者参考。 ... [详细]
  • 移动端常用单位——rem的使用方法和注意事项
    本文介绍了移动端常用的单位rem的使用方法和注意事项,包括px、%、em、vw、vh等其他常用单位的比较。同时还介绍了如何通过JS获取视口宽度并动态调整rem的值,以适应不同设备的屏幕大小。此外,还提到了rem目前在移动端的主流地位。 ... [详细]
  • 本文内容为asp.net微信公众平台开发的目录汇总,包括数据库设计、多层架构框架搭建和入口实现、微信消息封装及反射赋值、关注事件、用户记录、回复文本消息、图文消息、服务搭建(接入)、自定义菜单等。同时提供了示例代码和相关的后台管理功能。内容涵盖了多个方面,适合综合运用。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文讲述了作者通过点火测试男友的性格和承受能力,以考验婚姻问题。作者故意不安慰男友并再次点火,观察他的反应。这个行为是善意的玩人,旨在了解男友的性格和避免婚姻问题。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 延迟注入工具(python)的SQL脚本
    本文介绍了一个延迟注入工具(python)的SQL脚本,包括使用urllib2、time、socket、threading、requests等模块实现延迟注入的方法。该工具可以通过构造特定的URL来进行注入测试,并通过延迟时间来判断注入是否成功。 ... [详细]
author-avatar
邹飞邹飞邹飞
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有