2016-05-24 18 views
0

複数のシートでExcelファイルを作成するためにPHP Excelライブラリを使用しています。 複数のHTMLページコンテンツを複数のシートに読み込む必要があります。 強力なテキストがHTMLからの動的データを含む1枚のシートを正常に実装しました。 2枚目のシートを追加すると、最新のシートが追加された状態でExcelに戻ります。PHPExcel:異なるHTMLファイルから複数のシートを作成

Below is code 

     <?php 
       require_once './PHPExcel/Classes/PHPExcel.php'; 
       require_once './PHPExcel/Classes/PHPExcel/IOFactory.php'; 
        // Create new PHPExcel object 
        $objPHPExcel = new PHPExcel(); 
        //Create a first sheet, representing sales data 
        $objReader = PHPExcel_IOFactory::createReader('HTML'); 


        $objPHPExcel->setActiveSheetIndex(0); 
        //$objPHPExcel->getActiveSheet()->setCellValue('A1', 'aaaaaaa'); 
        $objPHPExcel= $objReader->load('./report_html/report1.html'); 
        // Rename sheet 
        $objPHPExcel->getActiveSheet()->setTitle('Sheet1 '); 

        //---------------------------------------- 

        $objWorkSheet=$objPHPExcel->createSheet(1); 

        // Add some data to the second sheet, resembling some different data types 
        $objPHPExcel->setActiveSheetIndex(1); 
        // Rename 2nd sheet 
        //$objPHPExcel->getActiveSheet()->setCellValue('A1','bbbbbbb '); 
        $objPHPExcel= $objReader->load('./report_html/report2.html'); 
        $objPHPExcel->getActiveSheet()->setTitle('sheet2'); 

        //$objWorkSheet->setTitle('Second sheet'); 

        header('Content-Type: application/vnd.ms-excel'); 
        header('Content-Disposition: attachment;filename="report.xls"'); 
        header('Cache-Control: max-age=0'); 

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

       ?> 

答えて

0

load()方法は、既存のPHPExcelオブジェクトに新しいシートをロードしない、新しいPHPExcelオブジェクトにファイル全体をロードするように設計されているので、あなたはそれをもう一度呼び出すとき、あなたはを交換していますあなたは既に最初の負荷から得たものを追加しません。

2番目のファイルを2番目のPHPExcelオブジェクトにロードしてからaddExternalSheet()メソッドを使用してワークシートを最初のPHPExcelオブジェクトに転送すると、2番目のワークシートとして追加されます.....これメカニズムは、スタイルに矛盾がないこと、そして新しいシートが既存のすべてのスタイリングを保持することを確実にするために具体的に書かれています。

代わりに、ReaderのloadIntoExisting()メソッドを使用し、HTMLドキュメントを読み込んでいるときにスタイルの衝突が発生しないようにする必要があります。

+0

ありがとうございました。 addExternalSheetを使用してsheet2のコードを更新しました。 <?php $ objPHPExcel2-> setActiveSheetIndex(0); \t $ objPHPExcel2 = $ objReader-> load( './ report_html/report2.html'); \t $ objWorkSheet = $ objPHPExcel2-> createSheet(0); \t \t \t $ objPHPExcel-> addExternalSheet($ objWorkSheet); \t \t $ objWorkSheet-> setTitle( 'Second sheet'); \t?> シートを作成しますが、データは追加されません – wdwtest

+0

'$ objWorkSheet = $ objPHPExcel2-> createSheet(0);'は '$ objPHPExcel2'に新しい空のシートを作成してからその新しい空のシートを '$ objPHPExcel'に追加してください.....なぜ新しい空のシートを作成していますか?私はあなたが既存のシートをコピーしたいと思った –

+0

ありがとう!私はあなたが言っているwhtを得た..Gr8の助け!!このようなコードを更新しました 'code' $ objPHPExcel2-> setActiveSheetIndex(0); \t $ objPHPExcel2 = $ objReader-> load( './ report_html/report_3CB_24.html'); \t $ objWorkSheet = $ objPHPExcel2-> getActiveSheet() - > setTitle( 'sheet2'); \t \t $ objPHPExcel-> addExternalSheet($ objWorkSheet); これはhtmlで2番目のシートを添付しています。しかし、今ではいくつかのゴミに直面してhtmlからExcelに出てくることもありますか? – wdwtest

関連する問題