Home > Backend Development > PHP Tutorial > :PHPExcel无法加入图片

:PHPExcel无法加入图片

WBOY
Release: 2016-06-23 13:55:31
Original
1348 people have browsed it

$objPHPExcel = new PHPExcel();

$objDrawing = new PHPExcel_Worksheet_Drawing(); 
$objPHPExcel->setActiveSheetIndex(0);
$objDrawing->setPath('D:\wwwroot\user\upimg\201460dZeETjg_1.jpg');
$objDrawing->setCoordinates("A1");
$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());


返回错误:Fatal error: Uncaught exception 'PHPExcel_Exception' with message 'A PHPExcel_Worksheet has already been assigned. Drawings can only exist on one PHPExcel_Worksheet.' in D:\wwwroot\user\upimg\Classes\PHPExcel\Worksheet\BaseDrawing.php:240 Stack trace: #0 D:\wwwroot\user\upimg\xls.php(71): PHPExcel_Worksheet_BaseDrawing->setWorksheet(Object(PHPExcel_Worksheet)) #1 {main} thrown in D:\wwwroot\user\upimg\Classes\PHPExcel\Worksheet\BaseDrawing.php on line 240


回复讨论(解决方案)

你这只是片段,仅从这点是看不到问题的!
因为这个代码片段并没有错!

Uncaught exception 'Exception' with message 'A PHPExcel_Worksheet has already been assigned. Drawings can only exist on one PHPExcel_Worksheet.'
是说:一个 PHPExcel_Worksheet_Drawing 实例只能在一个单元格中存在

显然你把 $objDrawing 放到 A1 后,又放到了别处

/** Error reporting */
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
date_default_timezone_set('Europe/London');

if (PHP_SAPI == 'cli')
die('This example should only be run from a Web Browser');

/** Include PHPExcel */
require_once dirname(__FILE__) . '/Classes/PHPExcel.php';

$db = new mysqli('localhost','user.com','suMtOHQhPW','users');
mysqli_query($db, "set character set 'utf8'");


// Create new PHPExcel object
$objPHPExcel = new PHPExcel();

// Set document properties
$objPHPExcel->getProperties()->setCreator("fnsr")
 ->setLastModifiedBy("fnsr")
 ->setTitle("Office 2007 XLSX Document")
 ->setSubject("Office 2007 XLSX Document")
 ->setDescription("document for Office 2007 XLSX, generated using PHP classes.")
 ->setKeywords("office 2007 openxml php")
 ->setCategory("result file");


// Add some data
$objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('A1', '微信号')
            ->setCellValue('B1', '名字')
            ->setCellValue('C1', '身高')
->setCellValue('D1', '三围')
->setCellValue('E1', '电话')
->setCellValue('F1', '简介')
->setCellValue('G1', '大头')
->setCellValue('H1', '半身')
->setCellValue('I1', '全身')
->setCellValue('J1', '推荐人')
->setCellValue('K1', '状态');
// Miscellaneous glyphs, UTF-8
$query = "SELECT * FROM enroll";
$result = $db->query($query);
$num_results = $result->num_rows;
$k=2;
$objDrawing = new PHPExcel_Worksheet_Drawing(); 
for($i=0;$i $row = $result->fetch_assoc();
$objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue("A".$k, $row['nameid'])
->setCellValue("B".$k, $row['pname'])
->setCellValue("C".$k, $row['stature'])
->setCellValue("D".$k, $row['bust'])
->setCellValue("E".$k, $row['stel'])
->setCellValue("F".$k, $row['tips'])
//->setCellValue("G".$k, )
//->setCellValue("H".$k, '../upimg/'.$row['nameid'].'_2.jpg')
//->setCellValue("I".$k, '../upimg/'.$row['nameid'].'_3.jpg')
->setCellValue("J".$k, $row['refs'])
            ->setCellValue("K".$k, $row['state']);

//$pa=$_SERVER['DOCUMENT_ROOT'].'\\mweb\\tjnsr\\upimg\\';
//$pa='../upimg/';
if(file_exists($row['nameid'].'_1.jpg')){
$objPHPExcel->setActiveSheetIndex(0);
$objDrawing->setPath('D:\wwwroot\user\upimg\201460dZeETjg_1.jpg');
$objDrawing->setCoordinates("G1");
$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());
}
/*if(file_exists($row['nameid'].'_2.jpg')){
$objDrawing->setPath($row['nameid'].'_2.jpg');
$objDrawing->setCoordinates("H".$k);
$objPHPExcel->setActiveSheetIndex(0)
           ->setCellValue("H".$k, $row['nameid'].'_2.jpg');
//$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());
}
if(file_exists($row['nameid'].'_3.jpg')){
$objDrawing->setPath($row['nameid'].'_3.jpg');
$objDrawing->setCoordinates("I".$k);
$objPHPExcel->setActiveSheetIndex(0)
           ->setCellValue("I".$k, $row['nameid'].'_3.jpg');
//$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());
}*/
$k++;
}
$result->free();
$db->close();

//$objPHPExcel->setActiveSheetIndex(0)
 //           ->setCellValue('A5', $pa);
// Rename worksheet
$objPHPExcel->getActiveSheet()->setTitle('联系表');


// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);


// Redirect output to a client’s web browser (Excel5)
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="报名人员表.xls"');
header('Cache-Control: max-age=0');
// If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');

// If you're serving to IE over SSL, then the following may be needed
header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header ('Pragma: public'); // HTTP/1.0

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
exit;

对呀!
你的 $objDrawing = new PHPExcel_Worksheet_Drawing();  在循环外面
而 $objDrawing->setWorksheet($objPHPExcel->getActiveSheet()); 在循环里面
你如何能保证 $objDrawing = new PHPExcel_Worksheet_Drawing(); 只被这行一次呢?
虽然是套在条件分支中的,你有如何能保证条件只成立一次呢?

你只需把 $objDrawing = new PHPExcel_Worksheet_Drawing(); 放到循环里面,一切都解决了

多谢,问题找到,但是xls文档打不开
代码修改:            if(file_exists($row['nameid'].'_1.jpg')){
$objDrawing[$k] = new PHPExcel_Worksheet_Drawing(); 
$objDrawing[$k]->setPath($row['nameid'].'_1.jpg');
$objDrawing[$k]->setCoordinates("G".$k);
$objDrawing[$k]->setWorksheet($objPHPExcel->getActiveSheet());
}

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template