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);的话就会出错,原因自己去想