之前帮客户开发一个小项目,需要实现的一个功能就是,上传一个软件导出的Excel文件到服务端上,然后再读取Excel里面的内容并且写入到数据库。
GOOGLE了半天找了了传说中的phpExcelReader – 一个可以用PHP读取Excel中的数据到数组中的类。
不过作者发布的时候有几处小问题,修改并且简单汉化了一下,扔到博客上来,以备不时之需。
使用的时候最好把reader.php中头部的require_once写成真实路径。
附上下载地址:
下载地址:phpExcelReader
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 50 51 52 53 54 55 56 57 58 59 60 | // 测试文档 require_once 'Excel/reader.php'; // Excel文件($filename, $encoding); $data = new Spreadsheet_Excel_Reader(); // 设置输入编码 UTF-8/GB2312/CP936等等 $data->setOutputEncoding('UTF-8'); /*** * 如果服务器不支持 iconv 添加下面的代码使用 mb_convert_encoding 编码 * $data->setUTFEncoder('mb'); * **/ /*** * 默认情况下行和列的技术从1开始 * 如果要修改起始数值,添加: * $data->setRowColOffset(0); * **/ /*** * 设置工作模式 * $data->setDefaultFormat('%.2f'); * setDefaultFormat - 最大兼容模式 * * $data->setColumnFormat(4, '%.3f'); * setColumnFormat - 列的格式设置(仅适用于数字字段) * **/ $data->read('jxlrwtest.xls'); /* $data->sheets[0]['numRows'] - 行数 $data->sheets[0]['numCols'] - 列数 $data->sheets[0]['cells'][$i][$j] - 行$i 列$j里的数据 $data->sheets[0]['cellsInfo'][$i][$j] - 文件的拓展信息 $data->sheets[0]['cellsInfo'][$i][$j]['type'] = "date" | "number" | "unknown" 当type为unknown时使用raw值,因为元素中包含'0.00'的格式。 $data->sheets[0]['cellsInfo'][$i][$j]['raw'] = 未被格式化的值 $data->sheets[0]['cellsInfo'][$i][$j]['colspan'] $data->sheets[0]['cellsInfo'][$i][$j]['rowspan'] */ 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"; } //print_r($data); //print_r($data->formatRecords); |
另附一段网上传的导出 csv 的代码
<?php // 输出Excel文件头,可把user.csv换成你要的文件名 header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="user.csv"'); header('Cache-Control: max-age=0'); include './Mysql.class.php';//mysql 用你自己的操作类就可以 $db = new mysql(); // 从数据库中获取数据,为了节省内存,不要把数据一次性读到内存,从句柄中一行一行读即可 $sql = 'select id,user_login from wp_users'; $stmt = $db->getAll($sql); // 打开PHP文件句柄,php://output 表示直接输出到浏览器 $fp = fopen('php://output', 'a'); // 输出Excel列名信息 $head = array("id", "姓名"); foreach ($head as $i => $v) { // CSV的Excel支持GBK编码,一定要转换,否则乱码 $head[$i] = iconv('utf-8', 'gbk', $v); } // 将数据通过fputcsv写到文件句柄 fputcsv($fp, $head); // 计数器 $cnt = 0; // 每隔$limit行,刷新一下输出buffer,不要太大,也不要太小 $limit = 100000; // 逐行取出数据,不浪费内存 $count = count($stmt); for($t=0;$t<$count;$t++) { $cnt ++; if ($limit == $cnt) { //刷新一下输出buffer,防止由于数据过多造成问题 ob_flush(); flush(); $cnt = 0; } $row = $stmt[$t]; foreach ($row as $i => $v) { $row[$i] = iconv('utf-8', 'gbk', $v); } fputcsv($fp, $row); } |
http://www.9958.pw/post/php_excel 可以参考参考
你好,我朋友参考这个做了一个应用,是读取查询excel的内容的,可是有个问题
放虚拟主机里可以运行,放本地phpnow里却不行(其他程序没问题)
能帮我看看吗,源码链接在http://www.kuaipan.cn/file/id_1242173261480274.html
有结果邮件告诉我[email protected]或QQ联系我719264310
虚拟主机可以运行说明代码没有问题,PHPNOW没配置好吧。
嗯?做好友链了?
做好了。欢迎常来。