2013-05-28 19 views
7

Ich habe überall auf wie man dies mit zwei vorhandenen Dateien zu tun, sieht aus wie alle Dokumentation auf neue Dateien erstellen. Ich möchte eine der Dateien nehmen und die zweite Datei als neues Arbeitsblatt hinzufügen und dann auf dem Server speichern. Ich habe mit vergeblich wie diese versuchen:Kombinieren Sie zwei oder mehr xls-Dateien als Arbeitsblätter PHPExcel

$file="test.xls"; 
$file2="test2.xls"; 
$outputFile = "final.xls"; 
$phpExcel = new PHPExcel($file); 
$phpExcel->getActiveSheet(); 
$phpExcel->setActiveSheetIndex(0); 
$phpExcel->addSheet($file2); 
header("Content-Type: application/vnd.ms-excel"); 
header("Content-Disposition: attachment; filename=$outputFile"); 
header("Cache-Control: max-age=0"); 
$objWriter = PHPExcel_IOFactory::createWriter($phpExcel, "Excel5"); 
file_put_contents($outputFile, $objWriter); 

Jede Hilfe wäre sehr dankbar. Sehr neu in PHP.

Antwort

17

Liest niemand heutzutage Dokumentation? Es gibt ein ganzes Dokument im Ordner /Documentation über das Lesen von Dateien zu PHPExcel-Objekten (es heißt PHPExcel User Documentation - Reading Spreadsheet Files), zusammen mit Dutzenden von Beispielen (die /Documentation/Examples/Reader Ordner ist ein guter Ort, um zu sehen), und keiner von ihnen new PHPExcel($file) verwenden. Keines der Beispiele oder Dokumente gibt an, file_put_contents() beim Speichern zu verwenden.

$file1="test.xls"; 
$file2="test2.xls"; 
$outputFile = "final.xls"; 

// Files are loaded to PHPExcel using the IOFactory load() method 
$objPHPExcel1 = PHPExcel_IOFactory::load($file1); 
$objPHPExcel2 = PHPExcel_IOFactory::load($file2); 

// Copy worksheets from $objPHPExcel2 to $objPHPExcel1 
foreach($objPHPExcel2->getAllSheets() as $sheet) { 
    $objPHPExcel1->addExternalSheet($sheet) 
} 

// Save $objPHPExcel1 to browser as an .xls file 
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel1, "Excel5"); 
header("Content-Type: application/vnd.ms-excel"); 
header("Content-Disposition: attachment; filename=$outputFile"); 
header("Cache-Control: max-age=0"); 
$objWriter->save('php://output'); 
+0

ich wirklich bereit bin zu geben alles mit PHPExcel zu tun dokumentieren .... Ich kann es nicht mehr offensichtlich, dass Dokumentation machen, ist in dem Ordner mit dem Namen '/ Documentation' oder Dokumente zum Lesen von Tabellendateien heißen' Tabellendateien lesen' –

+0

Hey! du bist der Entwickler dafür! Ich erkenne dein Gesicht von Github. Ich habe versucht, die Dokumente darauf zu durchsuchen. Es tut uns leid. Ich habe file_put_contents() verwendet, um die Datei auf dem Datenträger zu speichern. – user2430227

+0

BTW das funktioniert super. Danke. – user2430227

3
// update from office site 

    $filenames = array('doc1.xlsx', 'doc2.xlsx'); 

    $bigExcel = new PHPExcel(); 
    $bigExcel->removeSheetByIndex(0); 

    $reader = PHPExcel_IOFactory::createReader($input_file_type); 

    foreach ($filenames as $filename) { 
     $excel = $reader->load($filename); 

     foreach ($excel->getAllSheets() as $sheet) { 
      $bigExcel->addExternalSheet($sheet); 
     } 

     foreach ($excel->getNamedRanges() as $namedRange) { 
      $bigExcel->addNamedRange($namedRange); 
     } 
    } 

    $writer = PHPExcel_IOFactory::createWriter($bigExcel, 'Excel5'); 

    $file_creation_date = date("Y-m-d"); 

    // name of file, which needs to be attached during email sending 
    $saving_name = "Report_Name" . $file_creation_date . '.xls'; 


    // save file at some random location  
    $writer->save($file_path_location . $saving_name); 

    // More Detail : with different object: 
Merge multiple xls file into single one is explained here: 
I'm going to describe a bit different: 

http://rosevinod.wordpress.com/2014/03/15/combine-two-or-more-xls-files-as-worksheets-phpexcel/

0
// Combine all .csv files into one .xls file, 
$cache_dir = "/home/user_name/public_html/"; 
$book1 = $cache_dir . "book1.csv"; 
$book2 = $cache_dir . "book2.csv";  
$outputFile = $cache_dir . "combined.xls"; 
$inputFileType = 'CSV'; 
$inputFileNames = array($book1,$book2); 

$objReader = new PHPExcel_Reader_CSV(); 

/** Extract the first named file from the array list **/ 
$inputFileName = array_shift($inputFileNames); 
/** Load the initial file to the first worksheet in a PHPExcel Object **/ 
$objPHPExcel = $objReader->load($inputFileName); 
/** Set the worksheet title (to the filename that we've loaded) **/ 
$objPHPExcel->getActiveSheet() 
      ->setTitle(pathinfo($inputFileName,PATHINFO_BASENAME)); 

/** Loop through all the remaining files in the list **/ 
foreach($inputFileNames as $sheet => $inputFileName) { 
    /** Increment the worksheet index pointer for the Reader **/ 
    $objReader->setSheetIndex($sheet+1); 
    /** Load the current file into a new worksheet in PHPExcel **/ 
    $objReader->loadIntoExisting($inputFileName,$objPHPExcel); 
    /** Set the worksheet title (to the filename that we've loaded) **/ 
    $objPHPExcel->getActiveSheet()->setTitle(pathinfo($inputFileName,PATHINFO_BASENAME)); 

} 

$objWriter = new PHPExcel_Writer_Excel5($objPHPExcel); 
$objWriter->save($outputFile); 

$objPHPExcel->disconnectWorksheets(); 
unset($objPHPExcel); 

echo "DONE"; 
Verwandte Themen