public function setSelection(ZipArchive $xlsx)
 {
     $sheets = $this->bookUtil->makeSheetMap($xlsx);
     foreach ($sheets as $sheetName) {
         $this->cellSetter->set($xlsx, $sheetName, $this->firstCell);
     }
     $firstSheet = reset($sheets);
     $this->sheetSetter->set($xlsx, $firstSheet);
 }
 /**
  * @param string $xmlFixtureFile
  * @dataProvider provideData
  */
 public function test($xmlFixtureFile)
 {
     $bookXml = file_get_contents(__DIR__ . '/../../data/xml/' . $xmlFixtureFile);
     $sheetXml = file_get_contents(__DIR__ . '/../../data/xml/worksheet.xml');
     $zip = $this->getMockBuilder(ZipArchive::class)->disableOriginalConstructor()->getMock();
     $bookUtil = $this->getMock(BookUtil::class);
     $bookUtil->expects($this->atLeastOnce())->method('makeSheetMap')->with($zip)->will($this->returnValue([1 => 'シート1', 2 => 'シート2']));
     $bookUtil->expects($this->once())->method('makeSheetFileMap')->with($zip)->will($this->returnValue(['シート1' => 'xl/sheets/sheet1.xml', 'シート2' => 'xl/sheets/sheet2.xml']));
     $zip->expects($this->exactly(3))->method('getFromName')->with($this->logicalOr('xl/workbook.xml', 'xl/sheets/sheet1.xml', 'xl/sheets/sheet2.xml'))->will($this->returnCallback(function ($arg) use($bookXml, $sheetXml) {
         return $arg == 'xl/workbook.xml' ? $bookXml : $sheetXml;
     }));
     $zip->expects($this->exactly(3))->method('addFromString')->with($this->logicalOr('xl/workbook.xml', 'xl/sheets/sheet1.xml', 'xl/sheets/sheet2.xml'), $this->callback(function ($xml) {
         return strpos($xml, 'activeTab="1"') !== false || strpos($xml, 'tabSelected="1"') !== false || strpos($xml, 'tabSelected="0"') !== false;
     }));
     $setter = new SheetSelectionSetter($bookUtil);
     $setter->set($zip, 'シート2');
 }
 /**
  * @param ZipArchive $xlsx
  * @param ZipArchive|null $template
  */
 public function setSelection(ZipArchive $xlsx, ZipArchive $template = null)
 {
     if (!$template instanceof ZipArchive) {
         throw new \RuntimeException('Invalid template');
     }
     // テンプレートで選択されているシートを取得
     $selectedSheet = $this->sheetReader->read($template);
     // テンプレートの各シートで選択されているセルを取得
     $sheets = $this->bookUtil->makeSheetMap($template);
     $selectedCells = [];
     foreach ($sheets as $sheetId => $sheetName) {
         $selectedCells[$sheetName] = $this->cellReader->read($template, $sheetName);
     }
     // 選択シートを書き込む
     $this->sheetSetter->set($xlsx, $selectedSheet);
     // 各シートの選択セルを書き込む
     foreach ($selectedCells as $sheetName => $cellPosition) {
         $this->cellSetter->set($xlsx, $sheetName, $cellPosition);
     }
 }