2017-01-26 41 views
0

複数のExcelファイル(file1.xls; file2.xls)を結合したいと思います。両方とも同じ数の列と同じタイプの列ヘッダーを持ちます。PHPExcel:複数のファイル(またはワークシート)をスタイルで1つのワークシートに結合

データを結合するソリューションが見つかりました(enter link description here)。しかし、私はスタイルをコピーしたい(私は異なるファイルの背景が異なる)。

 $tempXlsFiles = [ 
      storage_path('exports') . "/file1.xls", 
      storage_path('exports') . "/file2.xls" 
     ]; 

     $objPHPExcel1 = PHPExcel_IOFactory::load($tempXlsFiles[0]); 

     for($i=1;$i < sizeof($tempXlsFiles); $i++){ 
      $objPHPExcelToCopy = PHPExcel_IOFactory::load($tempXlsFiles[$i]); 

      // Find the last cell in the second spreadsheet 
      $findEndDataRow = $objPHPExcelToCopy->getActiveSheet()->getHighestRow(); 
      $findEndDataColumn = $objPHPExcelToCopy->getActiveSheet()->getHighestColumn(); 
      $findEndData = $findEndDataColumn . $findEndDataRow; 

      $beeData = $objPHPExcelToCopy->getActiveSheet()->rangeToArray('A2:' . $findEndData); 

      // Identify the row in the first spreadsheet where we want to start 
      // adding merged bee data without overwriting any bird data 
      $appendStartRow = $objPHPExcel1->getActiveSheet()->getHighestRow() + 1; 
      // Add bee data from the PHP array into the bird data 
      $objPHPExcel1->getActiveSheet()->fromArray($beeData, null, 'A' . $appendStartRow); 


      // How can i to add the style ? 

     } 
     // Save the spreadsheet with the merged data 
     $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel1, 'Excel2007'); 
     $objWriter->save(storage_path('exports').'/'.$outputFile); 

PS:私はLaravelExcelとPhpExcelを使用します。

EDIT:

  • file1.xlsは10行があります。この行には背景REDがあります
  • file2.xlsには5行あります。背景BLUE

私が望む: file_merge.xls:15行を持っています。 0〜10:背景RED WITHファイル1のデータ。10〜15:青色背景のファイル2のデータ。

答えて

0

このスタイルをループ内に追加し、必要に応じてセル(A1、A2 ...、B1、B2 ...)を追加することができます。 >でgetStyle(。 'A' $ I '') - - > getBorders() - > getAllBorders() - > setBorderStyle(PHPExcel_Style_Border BORDER_THIN $ objPHPExcel-> GetActiveSheet関数():ボーダースタイル://サンプルスタイル

:: BORDER_THIN);

希望すると便利です。

+0

ありがとうございますが、私は同じスタイルのfile1.xlsとfile2.xlsでスタイルを設定したいと思います。私は –

0

コードでは、1つのブックからシートデータ値の配列を読み取り、その値を別のブックに設定するだけです。スタイルをコピーすることはありません。

PHPExcelには特別な方法(addExternalSheet())があり、正確にはan example of using it (43mergeWorkbooks.php in /Examples)を提供しています。

$objPHPExcel1 = PHPExcel_IOFactory::load("templates/43mergeBook1.xlsx"); 

$objPHPExcel2 = PHPExcel_IOFactory::load("templates/43mergeBook2.xlsx"); 

foreach($objPHPExcel2->getSheetNames() as $sheetName) { 
    $sheet = $objPHPExcel2->getSheetByName($sheetName); 
    $sheet->setTitle($sheet->getTitle() . ' copied'); 
    $objPHPExcel1->addExternalSheet($sheet); 
} 
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel1, 'Excel2007'); 
$objWriter->save("merged_with_styles.xlsx"); 
+0

を説明するために投稿を編集しました申し訳ありませんが、同じシートにすべてのファイルを含めたいと思います。私は1ファイル= 1枚は欲しくない。 –

+0

次に、自分自身でスタイル情報をコピーするコードロジックを記述する必要があります。 PHPExcelにはその特定の要件を満たすための魔法はありません –

+0

スタイルIDがファイル間で異なる可能性があるため、すべてのデータとスタイルを1つのブックに同期させるために、複数のワークシート)を作成し、duplicateStyle()を使用して2つ目のステップとしてデータとスタイルを1つのワークシートにマージして、同期したスタイルをコピーして、すべて1つのワークブック内に存在するようにします –

関連する問題