• 每天进步一点点!

文章分类

推荐网站

常用手册

PHPExcel类使用【原创】

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());

 

类别:PHP | 浏览(134) | 评论(0) | 阅读全文>>

中国天气预报网天气接口【原创】

今天项目中遇到个问题,要获取当天的天气信息。一开始打算调用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 | 浏览(170) | 评论(0) | 阅读全文>>

PHP工程师面临的成长瓶颈【转载】

作为开发中应用最广泛的语言之一,PHP有着大量的粉丝,那么你是一名优秀的程序员吗?在进行自我修炼的同时,你是否想过面对各种各样的问题,我该如何突破自身的瓶颈,以便更好的发展呢?

PHP工程师面临成长瓶颈

先明确这里所指的PHP工程师,是指主要以PHP进行Web系统的开发,没有使用其的语言工作过。工作经验大概在3~4年,普通的Web系统(百万级访问,千成级数据以内或业务逻辑不是特别复杂)开发起基本得心应手,没有什么问题。但他们会这样的特点:

 

◆除了PHP不使用其它的语言,可能会点shell 脚本。

◆对PHP的掌握不精(很多PHP手册都没有看完,库除外)。

◆知识面比较窄(面对需求,除开使用PHP和mysql ,不知道其它的解决办法)。

◆PHP代码以过程为主,认为面向对象的实现太绕,看不懂。

 

这些PHPer在遇到需要高性能,处理高并发,大量数据的项目或业务逻辑比较复杂(系统需要解决多领域业务的问题)时,缺少思路。不能分析问题的本质,技术判断力比较差,对于问题较快能找出临时的解决办法,但常常在不断临时性的解决办法中,系统和自己一步步走向崩溃。那怎么提高自己呢?怎么可以挑战 难度更高的系统?

 

更高的挑战在那里?

结合我自己的经验,我列出一些具体挑战,让大家先有个感性的认识。

类别:PHP | 浏览(68) | 评论(0) | 阅读全文>>

PHP中引用传值详解【转载】

    所谓值传递,就是说仅将对象的值传递给目标对象,就相当于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);的话就会出错,原因自己去想  

类别:PHP | 浏览(79) | 评论(1) | 阅读全文>>