PHPExcel类是一个功能强大的PHP对Excel格式进行操作的类,今天正好用到,研究了一下。
直接看代码吧,代码上有注释。
require 'PHPExcel.php'; //引入PHPExcel类文件 $objExcel = new PHPExcel(); // 创建一个处理对象实例 $objWriter = new PHPExcel_Writer_Excel2007($objExcel); //保存为Excel2007格式 $objExcel->setActiveSheetIndex(0); //缺省情况下,PHPExcel会自动创建第一个sheet被设置SheetIndex=0 $objActSheet = $objExcel->getActiveSheet(); //获取当前激活sheet的句柄 $objActSheet->setTitle('学生信息'); //设置当前激活sheet的sheet名称 $outputFileName = "students_teachers_info.xlsx"; $counter = 1; //设置单元格的值 $objActSheet->setCellValue('A' . $counter, '学号'); $objActSheet->setCellValue('B' . $counter , '姓名'); $objActSheet->setCellValue('C' . $counter, '性别'); $objActSheet->setCellValue('D' . $counter, '年龄'); $objActSheet->setCellValue('E' . $counter, '院系'); $objActSheet->setCellValue('F' . $counter, '班级'); //将mysql中的数据写到Excel表中 $link = mysql_connect ( 'localhost', 'root', '' ); mysql_select_db ( 'students', $link ); mysql_query('SET NAMES utf8', $link); $sql = "select * from students" ; $query = mysql_query($sql); $counter ++; while ($rows = mysql_fetch_assoc($query)) { $objActSheet->setCellValue('A'.$counter, $rows['student_no']); $objActSheet->setCellValue('B'.$counter, $rows['student_name']); $objActSheet->setCellValue('C'.$counter, $rows['student_sex']); $objActSheet->setCellValue('D'.$counter, $rows['student_age']); $objActSheet->setCellValue('E'.$counter, $rows['student_department']); $objActSheet->setCellValue('F'.$counter, $rows['student_class']); $objWriter->save($outputFileName); //写入到文件 $counter ++; } //创建一个新的sheet,用来保存教师信息 $objExcel->createSheet()->setTitle('教师信息'); //设置当前激活sheet的sheet名称 $objExcel->setActiveSheetIndex(1); $objActSheet = $objExcel->getActiveSheet(); $counter = 1; //设置单元格的值 $objActSheet->setCellValue('A' . $counter, '编号'); $objActSheet->setCellValue('B' . $counter , '姓名'); $objActSheet->setCellValue('C' . $counter, '性别'); $objActSheet->setCellValue('D' . $counter, '年龄'); $objActSheet->setCellValue('E' . $counter, '职称'); $objActSheet->setCellValue('F' . $counter, '院系'); //将mysql中的数据写到Excel表中 $sql = "select * from teachers" ; $query = mysql_query($sql); $counter ++; while ($rows = mysql_fetch_assoc($query)) { $objActSheet->setCellValue('A'.$counter, $rows['teacher_no']); $objActSheet->setCellValue('B'.$counter, $rows['teacher_name']); $objActSheet->setCellValue('C'.$counter, $rows['teacher_sex']); $objActSheet->setCellValue('D'.$counter, $rows['teacher_age']); $objActSheet->setCellValue('E'.$counter, $rows['teacher_title']); $objActSheet->setCellValue('F'.$counter, $rows['teacher_department']); $objWriter->save($outputFileName); //写入到文件 $counter ++; } 以上是工作中用到的从mysql中导出excel表的方法,下面是一些更详细的设置,没有做过验证。用到时可以试试 $objPHPExcel = new PHPExcel(); $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);//PHP类phpExcel保存excel—2007格式 $objWriter=new PHPExcel_Writer_Excel5($objPHPExcel);//非2007格式 $objWriter->save("xxx.xlsx"); //直接输出到浏览器 $objWriter = new PHPExcel_Writer_Excel5($objPHPExcel); 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/vnd.ms-execl"); header("Content-Type:application/octet-stream"); header("Content-Type:application/download"); header('Content-Disposition:attachment;filename="resume.xls" '); header("Content-Transfer-Encoding:binary"); $objWriter->save("php://output"); //设置表属性 $objPHPExcel->getProperties()->setCreator(”xiaoyu”);//创建人 $objPHPExcel->getProperties()->setLastModifiedBy(”xiaoyu”);//最后修改人 $objPHPExcel->getProperties()->setTitle(”Office 2007 XLSX Test Document”);//标题 $objPHPExcel->getProperties()->setSubject(”Office 2007 XLSX Test Document”);//题目 $objPHPExcel->getProperties()->setDescription(”Test document for Office 2007 XLSX, generated using PHP classes.”);//描述 $objPHPExcel->getProperties()->setKeywords(”office 2007 openxml php”);//关键字 $objPHPExcel->getProperties()->setCategory(”Test result file”);//种类 $objPHPExcel->setActiveSheetIndex(0);//PHP类phpExcel设置当前的sheet $objPHPExcel->getActiveSheet()->setTitle(’Simple’);//设置sheet的name //设置单元格的值 $objPHPExcel->getActiveSheet()->setCellValue(’A1′, ‘String’) $objPHPExcel->getActiveSheet()->setCellValue(’A2′, 12); $objPHPExcel->getActiveSheet()->setCellValue(’A3′, true); $objPHPExcel->getActiveSheet()->setCellValue(’C5′, ‘=SUM(C2:C4)’); $objPHPExcel->getActiveSheet()->setCellValue(’B8′, ‘=MIN(B2:C5)’); //合并单元格 $objPHPExcel->getActiveSheet()->mergeCells(’A18:E22′); //PHP类phpExcel分离单元格 $objPHPExcel->getActiveSheet()->unmergeCells(’A28:B28′); //保护cell $objPHPExcel->getActiveSheet()->getProtection()->setSheet(true); // Needs to be set to true in order to enable any worksheet protection! $objPHPExcel->getActiveSheet()->protectCells(’A3:E13′, ‘PHPExcel’); //设置格式 echo date(’H:i:s’) . ” Set cell number formatsn”; $objPHPExcel->getActiveSheet()->getStyle(’E4′)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE); $objPHPExcel->getActiveSheet()->duplicateStyle( $objPHPExcel->getActiveSheet()->getStyle(’E4′), ‘E5:E13′ ); //PHP类phpExcel设置宽width $objPHPExcel->getActiveSheet()->getColumnDimension(’B’)->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension(’D’)->setWidth(12); //设置font $objPHPExcel->getActiveSheet()->getStyle(’B1′)->getFont()->setName(’Candara’); $objPHPExcel->getActiveSheet()->getStyle(’B1′)->getFont()->setSize(20); $objPHPExcel->getActiveSheet()->getStyle(’B1′)->getFont()->setBold(true); $objPHPExcel->getActiveSheet()->getStyle(’B1′)->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE); $objPHPExcel->getActiveSheet()->getStyle(’B1′)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE); $objPHPExcel->getActiveSheet()->getStyle(’E1′)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE); $objPHPExcel->getActiveSheet()->getStyle(’D13′)->getFont()->setBold(true); $objPHPExcel->getActiveSheet()->getStyle(’E13′)->getFont()->setBold(true); //PHP类phpExcel设置align $objPHPExcel->getActiveSheet()->getStyle(’D11′)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT); $objPHPExcel->getActiveSheet()->getStyle(’D12′)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT); $objPHPExcel->getActiveSheet()->getStyle(’D13′)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT); $objPHPExcel->getActiveSheet()->getStyle(’A18′)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY); //垂直居中 $objPHPExcel->getActiveSheet()->getStyle(’A18′)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); //PHP类phpExcel设置column的border $objPHPExcel->getActiveSheet()->getStyle(’A4′)->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); $objPHPExcel->getActiveSheet()->getStyle(’B4′)->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); $objPHPExcel->getActiveSheet()->getStyle(’C4′)->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); $objPHPExcel->getActiveSheet()->getStyle(’D4′)->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); $objPHPExcel->getActiveSheet()->getStyle(’E4′)->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); //设置border的color $objPHPExcel->getActiveSheet()->getStyle(’D13′)->getBorders()->getLeft()->getColor()->setARGB(’FF993300′); $objPHPExcel->getActiveSheet()->getStyle(’D13′)->getBorders()->getTop()->getColor()->setARGB(’FF993300′); $objPHPExcel->getActiveSheet()->getStyle(’D13′)->getBorders()->getBottom()->getColor()->setARGB(’FF993300′); $objPHPExcel->getActiveSheet()->getStyle(’E13′)->getBorders()->getTop()->getColor()->setARGB(’FF993300′); $objPHPExcel->getActiveSheet()->getStyle(’E13′)->getBorders()->getBottom()->getColor()->setARGB(’FF993300′); $objPHPExcel->getActiveSheet()->getStyle(’E13′)->getBorders()->getRight()->getColor()->setARGB(’FF993300′); //设置填充颜色 $objPHPExcel->getActiveSheet()->getStyle(’A1′)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID); $objPHPExcel->getActiveSheet()->getStyle(’A1′)->getFill()->getStartColor()->setARGB(’FF808080′); $objPHPExcel->getActiveSheet()->getStyle(’B1′)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID); $objPHPExcel->getActiveSheet()->getStyle(’B1′)->getFill()->getStartColor()->setARGB(’FF808080′); //加图片 $objDrawing = new PHPExcel_Worksheet_Drawing(); $objDrawing->setName(’Logo’); $objDrawing->setDescription(’Logo’); $objDrawing->setPath(’./images/officelogo.jpg’); $objDrawing->setHeight(36); $objDrawing->setWorksheet($objPHPExcel->getActiveSheet()); $objDrawing = new PHPExcel_Worksheet_Drawing(); $objDrawing->setName(’Paid’); $objDrawing->setDescription(’Paid’); $objDrawing->setPath(’./images/paid.png’); $objDrawing->setCoordinates(’B15′); $objDrawing->setOffsetX(110); $objDrawing->setRotation(25); $objDrawing->getShadow()->setVisible(true); $objDrawing->getShadow()->setDirection(45); $objDrawing->setWorksheet($objPHPExcel->getActiveSheet());
今天项目中遇到个问题,要获取当天的天气信息。一开始打算调用google天气的接口,考虑到google随时可能被墙。所以改用了中国天气网(http://www.weather.com.cn/)的天气接口,据说这个比较准确。
中国天气网提供了几种可选的天气插件,可以参考:http://service.weather.com.cn/plugin/index.shtml
这些插件基本上能满足一般的需要,如果有特殊需要还可以自己定制插件。
这些插件使用也很简单,只要将你需要的插件的iframe代码嵌到你想要展示的网页位置即可。
下面介绍一下两个有用的天气数据接口:
第一个接口:http://m.weather.com.cn/data/101010100.html
其中101010100为城市id,附件中提供了所有的城市id。
这个接口返回一个城市未来七天(包括今天)的天气数据(json格式)。
可以使用PHP的json_decode将这个json串转换为数组,只需将json_decode的第二个参数设置为true
下面是我调用这个接口的代码:
$city_code = '101010100'; header("Content-Type: text/html; charset=UTF-8"); $weathe_url = 'http://m.weather.com.cn/data/' .$city_code. '.html'; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $weathe_url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $data = curl_exec($curl); $wather_array = json_decode($data, true); print_r($wather_array); 输出: Array ( [weatherinfo] => Array ( [city] => 北京 [city_en] => beijing [date_y] => 2012年3月11日 [date] => [week] => 星期日 [fchh] => 18 [cityid] => 101010100 [temp1] => -6℃~9℃ [temp2] => -3℃~13℃ [temp3] => 0℃~12℃ [temp4] => -2℃~9℃ [temp5] => 2℃~11℃ [temp6] => 2℃~9℃ [tempF1] => 21.2℉~48.2℉ [tempF2] => 26.6℉~55.4℉ [tempF3] => 32℉~53.6℉ [tempF4] => 28.4℉~48.2℉ [tempF5] => 35.6℉~51.8℉ [tempF6] => 35.6℉~48.2℉ [weather1] => 晴 [weather2] => 晴转多云 [weather3] => 晴 [weather4] => 多云 [weather5] => 阴 [weather6] => 多云 [img1] => 0 [img2] => 99 [img3] => 0 [img4] => 1 [img5] => 0 [img6] => 99 [img7] => 1 [img8] => 99 [img9] => 2 [img10] => 99 [img11] => 1 [img12] => 99 [img_single] => 0 [img_title1] => 晴 [img_title2] => 晴 [img_title3] => 晴 [img_title4] => 多云 [img_title5] => 晴 [img_title6] => 晴 [img_title7] => 多云 [img_title8] => 多云 [img_title9] => 阴 [img_title10] => 阴 [img_title11] => 多云 [img_title12] => 多云 [img_title_single] => 晴 [wind1] => 微风 [wind2] => 微风 [wind3] => 微风 [wind4] => 微风 [wind5] => 微风 [wind6] => 微风 [fx1] => 微风 [fx2] => 微风 [fl1] => 小于3级 [fl2] => 小于3级 [fl3] => 小于3级 [fl4] => 小于3级 [fl5] => 小于3级 [fl6] => 小于3级 [index] => 凉 [index_d] => 天气凉,建议着厚外套加毛衣等春秋服装。体弱者宜着大衣、呢外套。因昼夜温差较大,注意增减衣服。 [index48] => 凉 [index48_d] => 天气凉,建议着厚外套加毛衣等春秋服装。体弱者宜着大衣、呢外套。因昼夜温差较大,注意增减衣服。 [index_uv] => 中等 [index48_uv] => 弱 [index_xc] => 适宜 [index_tr] => 适宜 [index_co] => 较舒适 [st1] => 8 [st2] => -4 [st3] => 13 [st4] => -1 [st5] => 12 [st6] => 1 [index_cl] => 不宜 [index_ls] => 基本适宜 [index_ag] => 较易发 ) )
下面是应用这些数据的代码:
作为开发中应用最广泛的语言之一,PHP有着大量的粉丝,那么你是一名优秀的程序员吗?在进行自我修炼的同时,你是否想过面对各种各样的问题,我该如何突破自身的瓶颈,以便更好的发展呢?
PHP工程师面临成长瓶颈
先明确这里所指的PHP工程师,是指主要以PHP进行Web系统的开发,没有使用其的语言工作过。工作经验大概在3~4年,普通的Web系统(百万级访问,千成级数据以内或业务逻辑不是特别复杂)开发起基本得心应手,没有什么问题。但他们会这样的特点:
◆除了PHP不使用其它的语言,可能会点shell 脚本。
◆对PHP的掌握不精(很多PHP手册都没有看完,库除外)。
◆知识面比较窄(面对需求,除开使用PHP和mysql ,不知道其它的解决办法)。
◆PHP代码以过程为主,认为面向对象的实现太绕,看不懂。
这些PHPer在遇到需要高性能,处理高并发,大量数据的项目或业务逻辑比较复杂(系统需要解决多领域业务的问题)时,缺少思路。不能分析问题的本质,技术判断力比较差,对于问题较快能找出临时的解决办法,但常常在不断临时性的解决办法中,系统和自己一步步走向崩溃。那怎么提高自己呢?怎么可以挑战 难度更高的系统?
更高的挑战在那里?
结合我自己的经验,我列出一些具体挑战,让大家先有个感性的认识。
所谓值传递,就是说仅将对象的值传递给目标对象,就相当于copy;系统将为目标对象重新开辟一个完全相同的内存空间。
所谓引用,就是说将对象在内存中的地址传递给目标对象,就相当于使目标对象和原始对象对应同一个内存存储空间。此时,如果对目标对象进行修改,内存中的数据也会改变。
php的引用(就是在变量或者函数 、对象等前面加上&符号)
在PHP 中引用的意思是:不同的名字访问同一个变量内容.
与C语言中的指针是有差别的.C语言中的指针里面存储的是变量的内容在内存中存放的地址
变量的引用
PHP 的引用允许你用两个变量来指向同一个内容
$a="ABC"; $b =&$a; echo $a;//这里输出:ABC echo $b;//这里输出:ABC $b="EFG"; echo $a;//这里$a的值变为EFG 所以输出EFG echo $b;//这里输出EFG
函数的传址调用
传址调用我就不多说了 下面直接给出代码
function test(&$a) { $a=$a+100; } $b=1; echo $b;//输出1 test($b); //这里$b传递给函数的其实是$b的变量内容所处的内存地址, //通过在函数里改变$a的值 就可以改变$b的值了 echo "\n"; echo $b;//输出101
要注意的是,在这里test(1);的话就会出错,原因自己去想