2013-05-28 22 views
7

Tôi đã tìm mọi nơi về cách thực hiện điều này với hai tệp hiện có, có vẻ như tất cả tài liệu đều đang tạo tệp mới. Tôi muốn lấy một trong các tệp và thêm tệp thứ hai vào tệp đó dưới dạng trang tính mới, sau đó lưu nó vào máy chủ. Tôi đã cố gắng không có kết quả như sau:Kết hợp hai hoặc nhiều tệp xls dưới dạng bảng tính 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); 

Mọi trợ giúp sẽ được đánh giá cao. Rất mới với PHP.

Trả lời

17

Không ai từng đọc tài liệu trong những ngày này? Có toàn bộ tài liệu trong thư mục có tên là /Documentation về đọc tệp cho đối tượng PHPExcel (được gọi là PHPExcel User Documentation - Reading Spreadsheet Files), cùng với hàng tá ví dụ (thư mục /Documentation/Examples/Reader là một nơi tốt để xem) và không ai trong số chúng sử dụng new PHPExcel($file). Cũng không làm bất kỳ ví dụ nào hoặc bất kỳ tài liệu nào nói để sử dụng file_put_contents() khi lưu.

$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

Tôi thực sự sẵn sàng từ bỏ tài liệu bất cứ điều gì để làm với PHPExcel .... Tôi không thể làm cho nó rõ ràng hơn bất kỳ tài liệu đó là trong thư mục có tên '/ Tài liệu 'hoặc tài liệu về đọc tệp bảng tính có thể được gọi là' Đọc các tệp bảng tính ' –

+0

Hey! bạn là nhà phát triển cho điều này! Tôi nhận ra khuôn mặt của bạn từ github. Tôi đã thử tìm kiếm thông qua các tài liệu trên đó. Lấy làm tiếc. Tôi đã sử dụng file_put_contents() để lưu tệp vào đĩa. – user2430227

+0

BTW hoạt động tốt. cảm ơn bạn. – 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"; 
Các vấn đề liên quan