当前位置:首页 » 操作系统 » php导入excel源码

php导入excel源码

发布时间: 2023-03-12 09:09:48

php如何导入导出Excel

最近在PHP培训学习过程中,需要开发一个模块,把系统中的一些数据导出成Excel,修改后再导回系统。就趁机对这个研究了一番,下面进行一些总结。虽然我们在平时用的也有一些,但没有作者列出来的全,写excel的时候,我用过pear的库,也用过pack压包的头,同样那些利用smarty等作的简单替换xml的也用过,csv的就更不用谈了。但是在读的时候,只用过一种,具体是什么忘了,要回去翻代码了。
基本上导出的文件分为两种:
1:类Excel格式,这个其实不是传统意义上的Excel文件,只是因为Excel的兼容能力强,能够正确打开而已。修改这种文件后再保存,通常会提示你是否要转换成Excel文件。优点:简单。缺点:难以生成格式,如果用来导入需要自己分别编写相应的程序。2:Excel格式,与类Excel相对应,这种方法生成的文件更接近于真正的Excel格式。
如果导出中文时出现乱码,可以尝试将字符串转换成gb2312,例如下面就把$yourStr从utf-8转换成了gb2312:$yourStr = mb_convert_encoding(”gb2312″, “UTF-8″, $yourStr);
下面详细列举几种方法。
1:利用smarty,生成符合Excel规范的XML或HTML文件支持格式,非常完美的导出方案。不过导出来的的本质上还是XML文件,如果用来导入就需要另外处理了。详细内容请见rardge大侠的帖子:http://bbs.chinaunix.net/viewthread.php?tid=745757
需要注意的是如果导出的表格行数不确定时,最好在模板中把”ss:ExpandedColumnCount=”5″ ss:ExpandedRowCount=”21″”之类的东西删掉。

2、利用pack函数打印出模拟Excel格式的断句符号,这种更接近于Excel标准格式,用office2003修改后保存,还不会弹出提示,推荐用这种方法。缺点是无格式。
PHP代码<?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系统中使用时失败了,断句符号全部变成了乱码。
3、使用制表符、换行符的方法 制表符”\t”用户分割同一行中的列,换行符”\t\n”可以开启下一行。 <?php 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”;

⑵ 如何用php实现上传excel

第一,在前台html页面进行上传文件:如:
复制代码代码如下:

<form method="post" action="php文件"enctype="multipart/form-data">
<h3>导入Excel表:</h3><input type="file" name="file_stu" />
<input type="submit" value="导入"/>
</form>

第二,在对应的php文件进行文件的处理
复制代码代码如下:

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 (! ( $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数据的
复制代码代码如下:

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;
}
}

⑶ 如何利用ThinkPHP框架实现Excel数据导入和导出

首先,将PHPExcel文件放入到vendor目录下面:

备注:ThinkPHP3.1的路径是:./ThinkPHP/Extend/Vendor/;ThinkPHP3.2的路径是:./ThinkPHP/Library/Vendor/;

数据导出功能的实现:

编写导出为Excel的函数exportExcel:

public function exportExcel($expTitle,$expCellName,$expTableData){
$xlsTitle = iconv('utf-8', 'gb2312', $expTitle);//文件名称
$fileName = $_SESSION['account'].date('_YmdHis');//文件输出的文件名
$cellNum = count($expCellName);
$dataNum = count($expTableData);

vendor("PHPExcel.PHPExcel");
$objPHPExcel = new PHPExcel();//ThinkPHP3.1的写法

$objPHPExcel = new \PHPExcel();//ThinkPHP3.2的写法,有命名空间的概念

$cellName =
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');

$objPHPExcel->getActiveSheet(0)->mergeCells('A1:'.$cellName[$cellNum-1].'1');//合并单元格

//
$objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1',
$expTitle.' Export time:'.date('Y-m-d H:i:s'));
for($i=0;$i<$cellNum;$i++){
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i].'2', $expCellName[$i][1]);
}
// Miscellaneous glyphs, UTF-8
for($i=0;$i<$dataNum;$i++){
for($j=0;$j<$cellNum;$j++){

$objPHPExcel->getActiveSheet(0)->setCellValue($cellName[$j].($i+3),
$expTableData[$i][$expCellName[$j][0]]);
}
}

header('pragma:public');
header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$xlsTitle.'.xls"');
header("Content-Disposition:attachment;filename=$fileName.xls");//attachment新窗口打印inline本窗口打印
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');//ThinkPHP3.1的写法

$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');//ThinkPHP3.2的写法,有命名空间的概念
$objWriter->save('php://output');
exit;
}

3.读取数据,调用数据调用数据导出函数exportExcel:

function expUser(){//导出Excel
$xlsName = "User";
$xlsCell = array( //设置字段名和列名的映射
array('id','账号序列'),
array('truename','名字'),
array('sex','性别'),
array('res_id','院系'),
array('sp_id','专业'),
array('class','班级'),
array('year','毕业时间'),
array('city','所在地'),
array('company','单位'),
array('cheng','职称'),
array('wu','职务'),
array('jibie','级别'),
array('tel','电话'),
array('qq','qq'),
array('email','邮箱'),
array('honor','荣誉'),
array('remark','备注')
);
$xlsModel = M('Member');

$xlsData =
$xlsModel->Field('id,truename,sex,res_id,sp_id,class,year,city,company,cheng,wu,jibie,tel,qq,email,honor,remark')->select();

//将sex字段中1和0分贝装换为“男”和“女”

foreach ($xlsData as $k => $v)
{
$xlsData[$k]['sex']=$v['sex']==1?'男':'女';
}
$this->exportExcel($xlsName,$xlsCell,$xlsData);

}

⑷ 基于php中使用excel的简单介绍

在工作中需要处理多语言的翻译问题,翻译都是写在excel表格里面。为了处理方便我就保留中文和英文两列。
这样需要将这些数据从excel中取出来,然乎保存在excel的数组中,通过使用循环数组将相应的数据放入到数据库中。
所以工作的第一步就是要将数据从excel中取出来。这里我使用到了一个开源php处理excel类:phpexcel.
该项目的详细信息
http://phpexcel.codeplex.com/

我目前使用的是phpexcel1.7.3版本,
压缩后里面有一个PHPExcel和PHPExcel.php文件。
我们主要使用那个PHP文件。见下图文件目录结构
这个版本据说是可以支持excel2007,但是我使用2007编辑的xlsx是无法获得该库的支持。于是乎我就将它转化为2003。感觉支持地很好。
下面介绍一下具体的使用:
复制代码
代码如下:
require_once('./phpexcel1.7.3/PHPExcel.php');
$php_excel_obj
=
new
PHPExcel();
$php_reader
=
newPHPExcel_Reader_Excel2007();
if(!$php_reader->canRead($file_name)){

$php_reader=
new
PHPExcel_Reader_Excel5();

if(!$php_reader->canRead($file_name)){

echo'NO
Excel!'

}
}
$php_excel_obj
=
$php_reader->load($file_name);
$current_sheet
=$php_excel_obj->getSheet(0);
上面的主要功能是初始化相关的excel类,并装载excel第一个sheet
复制代码
代码如下:
$all_column
=$current_sheet->getHighestColumn();
$all_row
=$current_sheet->getHighestRow();
以上分别获得该表格的最大列值(字母表示如:‘G'),和最大的行数(数值表示)
下面将使用循环来讲excel里面的数据读到excel中:
复制代码
代码如下:
$all_arr
=
array();
$c_arr
=
array();
//字符对照表
for($r_i
=
1;
$r_i<=$all_row;
$r_i++){

$c_arr=
array();

for($c_i=
'A'
$c_i<=
'B'
$c_i++){

$adr=
$c_i
.
$r_i;

$value=
$current_sheet->getCell($adr)->getValue();

if($c_i==
'A'
&&
empty($value)
)
break;

if(is_object($value))
$value=
$value->__toString();

$c_arr[$c_i]=
$value;

}

$c_arr&&
$all_arr[]
=
$c_arr;
}
下面简单地介绍一下phpexcel的写操作,这个操作经常用于将数据库中的数据导入到excel中,便于展示和做成更美观的效果。
复制代码
代码如下:
require_once('./phpexcel1.7.3/PHPExcel.php');
$excel_obj
=
new
PHPExcel();
$objWriter
=
newPHPExcel_Writer_Excel5($excel_obj);
$excel_obj->setActiveSheetIndex(0);
$act_sheet_obj=$excel_obj->getActiveSheet();
$act_sheet_obj->setTitle('sheet');
$act_sheet_obj->setCellValue('A1',
'字符串内容');
$act_sheet_obj->setCellValue('A2',
26);
$file_name
=
"output.xls";
$objWriter->save($file_name);
代码很简单,
首先初始化相关的excel写类,然后写入数据,最后保存为xls文件。
输出的效果见图

⑸ 怎么使用php把表格中的数据导入到excel中

下面是我写的一个PHP导出数据到CSV问价的函数,你到时候直接调用就行了

/**
*导出CSV文件
*@paramstring$fileName 文件名字
*@paramstring|array$data导出数据,csv格式的字符串|数值数组
*@paramstring$to_encoding目标转换编码
*@paramstring$from_encoding当前编码
*/
functionexportCSV($fileName='',$data='',$to_encoding='gb2312',$from_encoding='utf-8'){
$fileName=empty($fileName)?date('YmdHis'):$fileName;
//文件标签
Header("Content-type:application/octet-stream");
header("Content-type:application/vnd.ms-excel;charset=$from_encoding");
Header("Content-Disposition:attachment;filename=$fileName.csv");

$str='';
if($data){
if(is_array($data)){
foreach($dataas$v){
if(is_array($v)){
foreach($vas$vo){
$str.=(is_numeric($vo)?"'".$vo:$vo."").",";
}
$str=trim($str,",")." ";
}else{
$str.=(is_numeric($v)?"'".$v:$v).",";
}
}
$str=trim($str,",")." ";
}else{
$str=$data;
}
}

echomb_convert_encoding($str,"gb2312","utf-8");
exit;
}
热点内容
编译正确运行后没有输出就结束了 发布:2025-08-23 03:12:26 浏览:889
fanuc存储卡 发布:2025-08-23 03:12:19 浏览:384
侠盗飞车安卓哪里下 发布:2025-08-23 03:02:24 浏览:753
沈阳java培训 发布:2025-08-23 02:56:03 浏览:972
安卓2千以下买什么备用机好 发布:2025-08-23 02:54:38 浏览:144
ftp文件共享软件 发布:2025-08-23 02:34:13 浏览:583
php图片等比缩放 发布:2025-08-23 02:32:40 浏览:646
数据库配置文件jsp 发布:2025-08-23 02:21:22 浏览:454
接口地址和服务器地址是一个么 发布:2025-08-23 02:21:21 浏览:767
iphone的证书在哪个文件夹 发布:2025-08-23 02:21:13 浏览:540