本文目录一览:
利用php导入excel文件
【步骤1】在前台html页面进行上传文件
form method="post" action="php文件" enctype="multipart/form-data"
h3导入Excel表:/h3input type="file" name="file_stu" /
input type="submit" value="导入" /
/form
【步骤2】在对应的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 (! 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 ( '导入数据库失败' ); } } }
}
【步骤3】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;
}
}
php 上传excel 表格 PHPExcel类,出现错
ZipArchive library is not enabled:出现这个错误说明是程序在调用'ZipArchive' 这个类的时候没有成功,原因是由于在安装php的时候没有增加php zip的支持(非zlib)。
请在php.ini找到extension=php_zip.dll并把前面的分号去掉(如果没有,请添加extension=php_zip.dll此行并确保php_zip.dll文件存在相应的目录),保存后重启php即可。
在Unix/Linux下的解决办法:
1、在Linux下没有php_zip.dll这个文件(有也不会起作用的),所以需要重新编译一下php的zip模块。具体安装方法如下:
cd /usr/src
wget
tar -zxvf zip
cd zip-1.x.x
phpize
./configure
make
sudo make instal
其中, 在最后使用make install命令的时候,可能需要用到root的权限,所以建议使用sudo来运行。安装完之后,屏幕上会提示zip.so的位置。然后将其记录下来,如:/usr/local/lib/php/extensions/zip.so。
2、使用root权限修改php.ini(通常可能会在/usr/local/lib/文件夹下,不过视当初安装php而定,可以通过phpinfo()来查看):
增加extension = /usr/local/lib/php/extensions/zip.so,然后同样在php.ini文件中,将 zlib.output_compression = Off 改为 zlib.output_compression = On ;
3、最后别忘了重启一下Apache:apachectl restart;
这个针对php的zip模块就安装完成了,能够在php中使用ZipArchive类了。
求PHP上传文件夹的三种解决方案
1 压缩上传(用户把文件夹压缩后上传),
2 input里加这个属性webkitdirectory就是默认可以上传文件夹了。谷歌浏览器可以。其他浏览器好像不行
3 业务上进行优化 如:(上传时还是上传文件,但是需要填写文件夹得名称,上传之后,后台根据文件夹名称,自动创建文件夹)
php导入xls格式的文件,需要注意什么?
1. 以.csv格式读取
将.xls转换成.csv的文本格式,然后再用PHP分析这个文件,和PHP分析文本没有什么区别。
优点:跨平台,效率比较高、可以读写。
缺点:只能直接使用.csv的文件,如果经常接受.xls二进制文件的话需要手工转换,不能自动化。一个文件只有一个SHEET。
PHP有自带的分析.csv函数:fgetcsv
2. ODBC链接数据源
优点:支持多种格式,cvs, xls等。支持读写,使用标准SQL语言,和SQLSERVER、MYSQL数据库几乎完全一样。
缺点:值支持windows服务器
3. PHP自定义类
优点:跨平台。某些类支持写操作。支持.xls二进制文件
常用的类有phpExcelReader、PHPExcel。其中后者支持读写,但是需要php5.2以上版本。
phpExcelReader是专门用来读取文件的。返回一个数组,包含表格的所有内容。