【发布时间】:2011-03-04 00:57:42
【问题描述】:
我想制作一个导入脚本,允许用户将他们的 excel 文件(扩展名不重要)上传到我的 php 应用程序。
应用程序应该重新整理一个项目列表(到目前为止一切都很好)。
本例的难点在于excel文件中包含图片...
我已经阅读了有关 phpexcel 库的信息,但它没有说明任何有关图像的信息。
任何人的想法?
【问题讨论】:
标签: php mysql codeigniter import phpexcel
我想制作一个导入脚本,允许用户将他们的 excel 文件(扩展名不重要)上传到我的 php 应用程序。
应用程序应该重新整理一个项目列表(到目前为止一切都很好)。
本例的难点在于excel文件中包含图片...
我已经阅读了有关 phpexcel 库的信息,但它没有说明任何有关图像的信息。
任何人的想法?
【问题讨论】:
标签: php mysql codeigniter import phpexcel
PHPExcel 确实支持图像,但还不支持图表
编辑
在 PHPExcel 1.7.7 版中添加了对 Excel 2007+ .xlsx 文件的图表阅读器支持
【讨论】:
您可以通过PHPExcel library访问图片。
对于导入图片:
$objPHPExcel = PHPExcel_IOFactory::load("MyExcelFile.xls");
foreach ($objPHPExcel->getSheetByName("My Sheet")->getDrawingCollection() as $drawing) {
if ($drawing instanceof PHPExcel_Worksheet_MemoryDrawing) {
ob_start();
call_user_func(
$drawing->getRenderingFunction(),
$drawing->getImageResource()
);
$imageContents = ob_get_contents();
ob_end_clean();
}
}
然后 $imageContents 将包含您可以输出或保存为文件等的图像数据。 你可以看到这个问题:PHPExcel: How to insert an image in the first page header and enlarge it to fit it's content?
访问图片:
活动工作表中所有图像对象的 ArrayObject 将通过以下方式返回:
$objPHPExcel->getActiveSheet()->getDrawingCollection() ;
这些对象将是PHPExcel_Worksheet_Drawing 或PHPExcel_Worksheet_MemoryDrawing 对象:您可以使用is_a() 识别哪个。然后,您可以使用适合该类的方法(如 API 中所述)从文件(对于 PHPExcel_Worksheet_Drawing 对象)或直接从 PHPExcel_Worksheet_MemoryDrawing 对象本身读取图像数据。 getName() 和 getDescription() 方法可用于从图像对象中检索相关值。
现在还可以将图像对象与打印标题相关联:
$objPHPExcel->getActiveSheet()->getHeaderFooter()->getImages()
可用于从页眉/页脚检索图像。这是一个 PHPExcel_Worksheet_HeaderFooterDrawing 对象数组。所有 PHPExcel_Worksheet_Drawing 方法都可用于从这些对象中提取图像文件。
【讨论】:
使用 MySQL 命令提示符下的 LOAD DATA 命令从 Excel(或任何其他可以生成文本文件的程序)导入数据非常简单。
1) 将 Excel 数据另存为 csv 文件(在 Excel 2007 中使用另存为) 使用记事本等文本编辑器检查保存的文件以查看其实际外观,即使用的分隔符等。
2) LOAD DATA LOCAL INFILE 'C:\temp\yourfile.csv' INTO TABLE database.table FIELDS TERMINATED BY ';' ENCLOSED BY '”' LINES TERMINATED BY '\r\n' (field1, field2);
3) 存储图片必须使用TO_BASE64
完成!
【讨论】: