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); } }