ホームページ >バックエンド開発 >PHPチュートリアル >:PHPExcel では画像を追加できません

:PHPExcel では画像を追加できません

WBOY
WBOYオリジナル
2016-06-23 13:55:311356ブラウズ

$objPHPExcel = 新しい PHPExcel();

$objDrawing = 新しい PHPExcel_Worksheet_Drawing();
$objDrawing->setPath('D:wwwrootuserupimg201460 dZeETjg_1.jpg' );
$ objDrawing ->setCoowned("A1");
$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());


エラーを返します: キャッチされない例外 'PHPExcel_Exception' とメッセージ 'A1PHPExcel_Worksheet はすでに存在しています図面は 1 つの PHPExcel_Worksheet にのみ存在できます。' in D:wwwrootuserupimgClassesPHPExcelWorksheetBaseDrawing.php:240 スタック トレース: #0 D:wwwrootuserupimgxls.php(71): PHPExcel_Worksheet_BaseDrawing->setWorksheet(Object(PHPExcel_Worksheet)) #1 { main} D:wwwrootuserupimgClassesPHPExcelWorksheetBaseDrawing.php の 240 行目にスローされます


ディスカッション (解決策) への返信

あなたは単なる断片です。この点だけからは問題を見ることはできません。

このコード スニペットには何も問題はないからです。

キャッチされない例外「例外」と「PHPExcel_Worksheet はすでに割り当てられています。図面は 1 つの PHPExcel_Worksheet にのみ存在できます。」
これは、1 つの PHPExcel_Worksheet_Drawing インスタンスは 1 つのセルにのみ存在できます

明らかに、A1 の後に $objDrawing を実行します。別の場所に置かれました

/** エラー報告 */
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
date_default_timezone_set('ヨーロッパ/ロンドン');

if (PHP_SAPI == 'cli')
die('この例は、Web ブラウザからのみ実行する必要があります');

/** PHPExcel を含める */
require_once ディレクトリ名(__FILE__) 。 '/Classes/PHPExcel.php';

$db = new mysqli('localhost','user.com','suMtOHQhPW','users');
mysqli_query($db, "set 文字セット 'utf8'");


// 新しい PHPExcel オブジェクトを作成します
$objPHPExcel = new PHPExcel();
//ドキュメントプロパティの設定
$ objphpexcel-> getProperties() - > setCreator( "fnsr")
- > setlastModifiedBy( "fnsr")
- > settle( "Office 2007 xlsx") >setSubject("Office 2007 XLSX ドキュメント")
->setDescription("Office 2007 XLSX のドキュメント、PHP クラスを使用して生成されました。")
->setKeywords("office 2007 openxml php")
->setCategory( 「結果ファイル」);


// データを追加します
$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', '状態态');
// その他のグリフ、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['身長'])
->setCellValue("D".$k, $row['バスト'])
->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:wwwrootuserupimg201460dZeETjg_1.jpg');
$objDrawing->setCoowned("G1");
$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());
}
/*if(file_exists($row['nameid'].'_2.jpg')){
$objDrawing->setPath($row['nameid'].'_2.jpg');
$objDrawing->setCoowned("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->setCoowned("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);
// ワークシートの名前を変更します
$objPHPExcel->getActiveSheet()->setTitle('联系表');


//アクティブなシートのインデックスを最初のシートに設定すると、Excel はこれを最初のシートとして開きます
$objPHPExcel->setActiveSheetIndex(0);


// 出力をクライアントの Web ブラウザ(Excel5)にリダイレクトします
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="报名人员表.xls");
header('Cache-Control: max-age=0');
// IE 9 にサービスを提供している場合は、次のものが必要になる場合があります
header('Cache-Control: max-age=1');

// SSL 経由で IE にサービスを提供している場合は、次の ヘッダー ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); が必要になる場合があります。 // 過去の日付
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // 常に変更される
ヘッダー ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
ヘッダー ('Pragma: public'); // HTTP/1.0

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

对呀!

你的 $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]->setCoowned("G".$k);
$objDrawing[$k]->setWorksheet($objPHPExcel->getActiveSheet());
}

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。