PHPExcel – Erstellen mehrerer Blätter durch Iteration
Lesezeit: 5 Minuten
Ich versuche, mehrere Blätter durch Iteration in phpexcel zu erstellen:
$i=0;
while ($i < 10) {
// Add new sheet
$objWorkSheet = $objPHPExcel->createSheet();
// Attach the newly-cloned sheet to the $objPHPExcel workbook
$objPHPExcel->addSheet($objWorkSheet);
// Add some data
$objPHPExcel->setActiveSheetIndex($i);
$sheet = $objPHPExcel->getActiveSheet();
$sheet->setCellValue('A1', 'Hello'.$i)
->setCellValue('B2', 'world!')
->setCellValue('C1', 'Hello')
->setCellValue('D2', 'world!');
// Rename sheet
$sheet->setTitle($i);
$i++;
}
Leider funktioniert das nicht. Ich bekomme nur einige Blätter dieser Iteration mit Daten gefüllt und umbenannt und etwa die Hälfte ist leer.
Das ist also das Ergebnis (Blatttitel):
0, 2, 4, 6, 8, 9 und 5 leere Blätter
Ich kann nicht herausfinden, warum nur gerade Zahlen (und Blatt 9) im Ergebnis korrekt sind.
Safarow
Sie brauchen keinen Anruf addSheet() Methode. Nach dem Erstellen des Blattes wird es bereits zu Excel hinzugefügt. Hier habe ich einige Codes behoben:
//First sheet
$sheet = $objPHPExcel->getActiveSheet();
//Start adding next sheets
$i=0;
while ($i < 10) {
// Add new sheet
$objWorkSheet = $objPHPExcel->createSheet($i); //Setting index when creating
//Write cells
$objWorkSheet->setCellValue('A1', 'Hello'.$i)
->setCellValue('B2', 'world!')
->setCellValue('C1', 'Hello')
->setCellValue('D2', 'world!');
// Rename sheet
$objWorkSheet->setTitle("$i");
$i++;
}
“Uncaught Error: Call to undefined method PHPExcel_Worksheet::createSheet()” erhalten
– Rajesh Vishwakarma
20. Juli 2017 um 9:50 Uhr
Ergänzend zum Kommentar von @Mark Baker.
Gehen Sie wie folgt vor:
$titles = array('title 1', 'title 2');
$sheet = 0;
foreach($array as $value){
if($sheet > 0){
$objPHPExcel->createSheet();
$sheet = $objPHPExcel->setActiveSheetIndex($sheet);
$sheet->setTitle("$value");
//Do you want something more here
}else{
$objPHPExcel->setActiveSheetIndex(0)->setTitle("$value");
}
$sheet++;
}
Das hat bei mir funktioniert. Und hoffen, dass es für diejenigen funktioniert, die es brauchen! 🙂
createSheet() gibt das erstellte Blatt zurück, sodass Sie es direkt $sheet zuweisen können, ohne setActiveSheetIndex() zu verwenden
– Björn Weinbrenner
18. Oktober 2017 um 9:37 Uhr
Wenn Sie $objPHPExcel zum ersten Mal instanziieren, hat es bereits ein einzelnes Blatt (Blatt 0); Sie fügen dann ein neues Blatt hinzu (das zu Blatt 1 wird), setzen aber das aktive Blatt auf Blatt $i (wenn $i 0 ist) … also benennen Sie das ursprüngliche Arbeitsblatt um und füllen es aus, das erstellt wurde, als Sie $objPHPExcel instanziierten und nicht der, den Sie gerade hinzugefügt haben … das ist Ihr Titel “0”.
Sie verwenden auch die createSheet () -Methode, die sowohl ein neues Arbeitsblatt erstellt als auch der Arbeitsmappe hinzufügt … aber Sie fügen es auch selbst wieder hinzu, wodurch das Blatt effektiv an zwei Positionen hinzugefügt wird.
In der ersten Iteration haben Sie also bereits sheet0, fügen ein neues Blatt an beiden Indexen 1 und 2 hinzu und bearbeiten/betiteln Blatt 0. In der zweiten Iteration fügen Sie ein neues Blatt an beiden Indexen 3 und 4 hinzu und bearbeiten/betiteln Blatt 1, aber Da Sie dasselbe Blatt an den Indizes 1 und 2 haben, schreibt dies effektiv auf das Blatt an Index 2. In der dritten Iteration fügen Sie ein neues Blatt an den Indizes 5 und 6 hinzu und bearbeiten/betiteln Blatt 2, wodurch Ihre frühere Bearbeitung/Betitelung des Blatts überschrieben wird 1, die stattdessen gegen Blatt 2 vorgegangen ist … und so weiter
Falls Sie zu keinem Ergebnis gekommen sind … Ich habe Henriques Antwort genommen und eine bessere logische Lösung gegeben. Dies ist vollständig kompatibel mit PHPSpreadSheet, falls jemand PHPSpreadSheet oder PHPExcel verwendet.
$spreadOrPhpExcel = new SpreadSheet(); // or new PHPExcel();
print_in_sheet($spreadOrPhpExcel);
function print_in_sheet($spread)
{
$sheet = 0;
foreach( getData() as $report => $value ){
# If number of sheet is 0 then no new worksheets are created
if( $sheet > 0 ){
$spread->createSheet();
}
# Index for the worksheet is setted and a title is assigned
$wSheet = $spread->setActiveSheetIndex($sheet)->setTitle($report);
# Printing data
$wSheet->setCellValue("A1", "Hello World!");
# Index number is incremented for the next worksheet
$sheet++;
}
return $spread;
}
ABDUL JAMAL
Sie können verschiedene Blätter wie folgt schreiben
$objPHPExcel = new PHPExcel();
$objPHPExcel->getProperties()->setCreator("creater");
$objPHPExcel->getProperties()->setLastModifiedBy("Middle field");
$objPHPExcel->getProperties()->setSubject("Subject");
$objWorkSheet = $objPHPExcel->createSheet();
$work_sheet_count=3;//number of sheets you want to create
$work_sheet=0;
while($work_sheet<=$work_sheet_count){
if($work_sheet==0){
$objWorkSheet->setTitle("Worksheet$work_sheet");
$objPHPExcel->setActiveSheetIndex($work_sheet)->setCellValue('A1', 'SR No. In sheet 1')->getStyle('A1')->getFont()->setBold(true);
$objPHPExcel->setActiveSheetIndex($work_sheet)->setCellValueByColumnAndRow($col++, $row++, $i++);//setting value by column and row indexes if needed
}
if($work_sheet==1){
$objWorkSheet->setTitle("Worksheet$work_sheet");
$objPHPExcel->setActiveSheetIndex($work_sheet)->setCellValue('A1', 'SR No. In sheet 2')->getStyle('A1')->getFont()->setBold(true);
$objPHPExcel->setActiveSheetIndex($work_sheet)->setCellValueByColumnAndRow($col++, $row++, $i++);//setting value by column and row indexes if needed
}
if($work_sheet==2){
$objWorkSheet = $objPHPExcel->createSheet($work_sheet_count);
$objWorkSheet->setTitle("Worksheet$work_sheet");
$objPHPExcel->setActiveSheetIndex($work_sheet)->setCellValue('A1', 'SR No. In sheet 3')->getStyle('A1')->getFont()->setBold(true);
$objPHPExcel->setActiveSheetIndex($work_sheet)->setCellValueByColumnAndRow($col++, $row++, $i++);//setting value by column and row indexes if needed
}
$work_sheet++;
}
$filename="file-name".'.xls'; //save our workbook as this file name
header('Content-Type: application/vnd.ms-excel'); //mime type
header('Content-Disposition: attachment;filename="'.$filename.'"'); //tell browser what's the file name
header('Cache-Control: max-age=0'); //no cach
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
11951400cookie-checkPHPExcel – Erstellen mehrerer Blätter durch Iterationyes