2013-05-28 2 views
7

Я искал всюду о том, как это сделать с двумя существующими файлами, похоже, что вся документация связана с созданием новых файлов. Я хотел бы взять один из файлов и добавить второй файл к нему в качестве нового рабочего листа, а затем сохранить его на сервере. Я пытался с без толку, как это:Объедините два или более файла xls в виде рабочих листов 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); 

Любая помощь будет принята с благодарностью. Очень новый для PHP.

ответ

17

В настоящее время никто не читает документацию? В папке с именем /Documentation есть целый документ о чтении файлов в объекты PHPExcel (он называется PHPExcel User Documentation - Reading Spreadsheet Files), а также десятки примеров (папка /Documentation/Examples/Reader - хорошее место для поиска), и ни один из них не использует new PHPExcel($file). Ни один из примеров или каких-либо документов не говорит, что для сохранения файла file_put_contents().

$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

Я действительно готов отказаться от документирования ничего общего с PHPExcel .... Я не могу сделать это уже очевидно, что документация находится в папке '/ Documentation' или что документы о чтении файлов электронных таблиц можно назвать' Чтение файлов электронных таблиц' –

+0

Эй! вы разработчик для этого! Я узнаю ваше лицо от github. Я попытался найти в нем документы. Сожалею. Я использовал file_put_contents(), чтобы сохранить файл на диск. – user2430227

+0

BTW это отлично работает. Спасибо. – 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"; 
Смежные вопросы