Heim >Backend-Entwicklung >PHP-Tutorial >:PHPExcel无法加入图片

:PHPExcel无法加入图片

WBOY
WBOYOriginal
2016-06-23 13:55:311349Durchsuche

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn