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());
MySQL提供标准的SQL模式匹配,以及一种基于象Unix实用程序如vi、grep和sed的扩展正则表达式模式匹配的格式。
SQL模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零字符)。在 MySQL中,SQL的模式默认是忽略大小写的。下面给出一些例子。注意使用SQL模式时,不能使用=或!=;而应使用LIKE或NOT LIKE比较操作符。
要想找出以“b”开头的名字:
mysql> SELECT * FROM pet WHERE name LIKE 'b%';
+--------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+------------+
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+
要想找出以“fy”结尾的名字:
mysql> SELECT * FROM pet WHERE name LIKE '%fy';
+--------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+-------+
netstat -tnl查看所有被占用的端口
.png)
netstat -pan 查看所用被占用端口的详细信息,最后一行是被占用的端口的pid
.png)
获得pid后就可以用kill命令杀死该进程了
今天项目中遇到个问题,要获取当天的天气信息。一开始打算调用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] => 较易发
)
)
下面是应用这些数据的代码:
1 减少HTTP请求数量 (Minimize HTTP Requests)
tag:content
80%的用户响应时间被花费在前端,而这其中的绝大多数时间是用于下载页面中的图片、样式表、脚本以及Flash这些组件。减少这些组件的数量就可以减少展示页面所需的请求数,而这是提高网页响应速度的关键。
朴素的页面设计当然是减少组件的一种途径,但有没有能兼顾丰富的页面内容和快速的响应速度的方法呢?下面就是一些不错的技巧,能在提供丰富的页面展现的同时,减少Http请求数量:
合并文件,通过把所有脚本置于一个脚本文件里或者把所有样式表放于一个样式表文件中,从而减少Http请求的数量。当不同页面需要应用不同的脚本或样式时,合并这些文件会是一个很大的挑战,不过在发布网站时进行这种合并,将是提高网站响应速度的重要一步。
CSS Sprites是减少图片请求的首选方案。把所有的背景图片合并到一张图中,使用CSS的background-image 和background-position 属性去控制展现恰当的图片区域。
Image maps把多张图片组合成为一张图片。图片的总大小是不变的,但减少Http请求数会提高页面的响应速度。Image maps只能用于图片在网页中相邻的情况,比如导航条。制定image maps中的图片坐标是个很麻烦的过程,而且容易出错。同时给导航使用image maps也并不易读,所以并不推荐使用。