设为首页 收藏本站
查看: 1121|回复: 0

[经验分享] PHPExcel处理导入导出图片,链接

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-3-16 10:14:09 | 显示全部楼层 |阅读模式
PHPExcel是一个非常强大的PHP表格处理模块,提供一组PHP编程语言,它允许您编写和读取不同的电子表格文件格式,如Excel(纸)。 xls,Excel 2007(OfficeOpenXML)。 xlsx、CSV、自由/ OpenOffice Calc。ods, Gnumeric、PDF、HTML、… 这个项目是建立在微软的OpenXML标准

下载地址:http://phpexcel.codeplex.com/ 解压后在Examples目录下有很多的例子,Documentation目录下是相关文档(如果懂英文在里面的API目录下有更细的文档页面)


大部分情况下我们只用到了这个插件的字符导入导出功能。很多时候我们要导入导出链接,图片等。

PHPExcel中图片与文本是分开的,也就是在操作时间图片与文本各自独立添加到表格中去的,解析时同样要分两次把图片与文本读出来再合并,图片的也是有坐标的,其坐标是以图片的左上角为准。


导入解析:

PHPExcel的导入解析功能非常强大,所支持的表格文件可以在PHPExcel/Reader/目录下查看,由于支持的表格文件多,所以在导入时很方便:

<?php
$excel=PHPExcel_IOFactory::load("file.xlsx");//把导入的文件目录传入,系统会自动找到对应的解析类
$sheet=$excel->getSheet(0);//选择第几个表,如下面图片,默认有三个表
$data=$sheet->toArray();//把表格的数据转换为数组,注意:这里转换是以行号为数组的外层下标,列号会转成数字为数组内层下标,坐标对应的值只会取字符串保留在这里,图片或链接不会出现在这里。
/*取图片*/
$imgData=array();
$imageFilePath='/images/'.date('Y/m/d').'/';//图片保存目录
foreach($sheet->getDrawingCollection() as $img){
    list ($startColumn, $startRow) = PHPExcel_Cell::coordinateFromString($img->getCoordinates());//获取列与行号
    $imageFileName=$img->getCoordinates().mt_rand(100,999);
    /*表格解析后图片会以资源形式保存在对象中,可以通过getImageResource函数直接获取图片资源然后写入本地文件中*/
    switch ($img->getMimeType()){//处理图片格式
        case 'image/jpg':
        case 'image/jpeg':
            $imageFileName.='.jpg';
            imagejpeg($img->getImageResource(),$imageFilePath.$imageFileName);
            break;
        case 'image/gif':
            $imageFileName.='.gif';
            imagegif($img->getImageResource(),$imageFilePath.$imageFileName);
            break;
        case 'image/png':
            $imageFileName.='.png';
            imagepng($img->getImageResource(),$imageFilePath.$imageFileName);
            break;
    }
    $imgData[$startRow][$startColumn]=$imageFileName;//追加到数组中去
}
?>

wKioL1SU8grwBayBAAA5o7vzA_g402.jpg

上面是基本的导入解析功能,实际在图片处理上要简单的多,因为没有太多的附带属性,那在文本导出上就没有那么方便了,主要是表格在创建时存在着很多的格式,比如日期,在表格中写入日期系统会默认自动的修改当前格的格式为日期,在解析表格时就得注意了,因为这个数据并不是文本,如果按文本方式解析就会解析成5位数字,而非日期,这里就得用到设置解析格式,从而还原想要的数据。


导出生成:

PHPExcel的导出生成与导入解析是可逆的,可以说导入有哪些导出就有哪些

   
<?php
$excel=new PHPExcel();//创建PHPExcel对象
/*写入文档所有权属性*/
$excel->getProperties()
    ->setCreator("Maarten Balliauw")//设置创建人
    ->setLastModifiedBy("Maarten Balliauw")//设置修改人
    ->setTitle("Office 2007 XLSX Test Document")//设置标题
    ->setSubject("Office 2007 XLSX Test Document")//设置题目
    ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")//设置描述
    ->setKeywords("office 2007 openxml php")//设置关键字
    ->setCategory("Test result file");//设置种类
     
     
/*设置默认字体与大小*/
$excel->getDefaultStyle()
    ->getFont()//获取字体对象
    ->setName('Arial')//设置字体
    ->setSize(10);//设置字体大小
     
     
/*设置当前的sheet*/
$excel->setActiveSheetIndex(0);

/*设置sheet的name*/
$excel->getActiveSheet()->setTitle('表格1');

/*写入常规文本*/
$excel->getActiveSheet()
    ->setCellValue('A1', 'String')
    ->setCellValue('B1', 'Simple')
    ->setCellValue('C1', 'PHPExcel');
     
     
/*写入自定义样式文本*/
$objRichText = new PHPExcel_RichText();
$objRichText->createText('你好 ');
$objPayable = $objRichText->createTextRun('你 好 吗?');
$objPayable->getFont()
    ->setBold(true);
$objPayable->getFont()
    ->setItalic(true);
$objPayable->getFont()
    ->setColor( new PHPExcel_Style_Color( PHPExcel_Style_Color::COLOR_DARKGREEN ) );
$objRichText->createText(', unless specified otherwise on the invoice.');
$excel->getActiveSheet()
    ->setCellValue('A13', 'Rich Text')
    ->setCellValue('C13', $objRichText);
     
     
/*写入有链接的文本*/
$excel->getCell('A2')
    ->setValue('web中的php')
    ->getHyperlink()
    ->setUrl('http://php2012web.blog.iyunv.com/');

/*写入图片*/
//使用另一个表格图片对象添加图片
/*
    $img=new PHPExcel_Worksheet_MemoryDrawing();
    $img->setImageResource($images->getImageResource());
    $img->setMimeType($images->getMimeType());
    $img->setName($images->getName());
    $img->setDescription($images->getDescription());
*/
//使用本地图片
$img=new PHPExcel_Worksheet_Drawing();
$img->setPath('/img/text.jpg');//写入图片路径
$img->setHeight(100);//写入图片高度
$img->setWidth(100);//写入图片宽度
$img->setOffsetX(1);//写入图片在指定格中的X坐标值
$img->setOffsetY(1);//写入图片在指定格中的Y坐标值
$img->setRotation(1);//设置旋转角度
$img->getShadow()->setVisible(true);//
$img->getShadow()->setDirection(50);//
$img->setCoordinates('B2');//设置图片所在表格位置
$img->setWorksheet($excel->getActiveSheet());//把图片写到当前的表格中


/*生成文件*/

$objWriter = PHPExcel_IOFactory::createWriter($excel, 'Excel2007');//创建写文件生成器
$objWriter->save('excel.xlsx');//生成文件
?>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-47241-1-1.html 上篇帖子: 编译php 5.3 make时错误处理 下篇帖子: php查找文件内容关键字实例代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表