Simple Excel로 다중 워크시트 Excel 파일 만들기

7793 단어 webdevtutorialphp
최근에 저는 프로젝트를 위해 대용량 데이터 내보내기를 만들어야 했습니다. 저는 Spatie의 Simple Excel 패키지를 사용하는 것을 좋아합니다. 이 패키지는 사용이 매우 간단하고 브라우저로 다운로드를 스트리밍할 수 있는 기능이 있는 CSV 또는 Excel 파일로 대량의 데이터를 내보낼 때 잘 작동하기 때문입니다. 하지만 이 특정 프로젝트에는 한 번에 여러 워크시트의 데이터를 내보내는 추가 요구 사항이 있었습니다. 운 좋게도 이 패키지를 사용하면 이 작업도 수행할 수 있습니다.

작가 개체



Simple Excel 패키지는 내부적으로 box/spout 패키지를 사용합니다. readme에는 ->getWriter() 를 사용하여 기본 작성자에 도달할 수 있다고 명시되어 있습니다.

$writer = SimpleExcelWriter::create($pathToCsv)->getWriter();


box/spout 패키지 문서로 이동하면 Playing with sheets 섹션이 있습니다. 문서는 현재 시트를 가져오는 방법, 현재 시트의 이름을 설정하는 방법 및 새 시트를 만드는 방법을 보여줍니다.

워크시트 이름 지정



워크시트의 이름을 지정하려면 getCurrentSheet()를 사용하여 작성자와 함께 현재 시트를 가져온 다음 setName()를 사용하여 이름을 설정할 수 있습니다.

$writer = SimpleExcelWriter::streamDownload('your-export.xlsx')->getWriter()
$nameSheet = $writer->getCurrentSheet();
$nameSheet->setName('Names');


새 워크시트 만들기



새 시트를 만들기 위해 addNewSheetAndMakeItCurrent()를 사용할 수 있고 그런 다음 setName()를 다시 사용하여 이 새 시트의 이름을 설정할 수 있습니다.

$addressSheet = $writer->addNewSheetAndMakeItCurrent();
$addressSheet->setName('Addresses');


모든 것을 하나로 모으기



이제 개별 작업을 수행하는 방법을 알고 모든 작업을 통합할 수 있습니다.
  • SimpleExcelWriter를 사용하여 streamDownload 만들기
  • 작가를 가져오고 현재 시트를 가져와 이름을 '이름'으로 지정합니다
  • '이름' 시트에 데이터 행 추가
  • 이름을 '주소'로 지정하기 전에 새 시트를 만들고 현재 시트로 만듭니다
  • 헤더 행을 '주소'에 추가합니다
  • .
  • '주소' 시트에 데이터 행 추가
  • 마지막으로 스트림을 브라우저로 반환합니다.

  • use Spatie\SimpleExcel\SimpleExcelWriter;
    
    $stream = SimpleExcelWriter::streamDownload('your-export.xlsx');
    
    $writer = $stream->getWriter();
    
    // Set the name of the current sheet to Names
    $nameSheet = $writer->getCurrentSheet();
    $nameSheet->setName('Names');
    
    // Add rows to the Names sheet
    $stream->addRows([
        ['first_name' => 'Boaty', 'last_name' => 'Mc Boatface'],
        ['first_name' => 'Dave', 'last_name' => 'Mc Dave'],
    ]);
    
    // Create a new sheet and set the name to Addresses
    $addressSheet = $writer->addNewSheetAndMakeItCurrent();
    $addressSheet->setName('Addresses');
    
    // Manually add header rows to the Addresses sheet
    $stream->addRow(['house_number', 'postcode']);
    
    // Add rows to the Addresses sheet
    $stream->addRows([
        ['house_number' => '1', 'postcode' => 'AB1 2BC'],
        ['house_number' => '2', 'postcode' => 'AB1 2BD'],
    ]);
    
    return $stream->toBrowser();
    


    Laravel에서 내보내기 생성에 대한 자세한 내용은 Using Laravel Resource Collections with exports을 확인하십시오.

    단일 워크시트를 생성할 때 Simple Excel 패키지는 일반적으로 헤더 행을 생성하지만 새 시트를 생성할 때는 데이터에 대한 새 헤더를 정의해야 하는 것 같습니다.

    다음은 출력된 Excel 파일의 몇 가지 스크린샷입니다.





    Photo Wilfred IvenStockSnap

    좋은 웹페이지 즐겨찾기