Сначала я попытался использовать функцию setActiveSheetIndexByName(), чтобы установить активный лист и вызвать метод записи \PhpOffice\PhpSpreadsheet\Writer\ CsV, но безуспешно. Каким-то образом писатель сохранил первый рабочий лист. Я пробовал индексировать по имени, по номеру, но разница немаленькая.
Теперь есть код, с которым я экспериментирую:
Код: Выделить всё
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader("Xlsx");
$reader->setReadDataOnly(true);
$spreadsheet = $reader->load('infile.xlsx');
foreach($spreadsheet->getAllSheets() as $sheet)
{
$spreadsheet->setActiveSheetIndexByName($sheet->getTitle());
$activeSheet = $spreadsheet->getActiveSheet();
$title = $activeSheetgetTitle();
echo $title . PHP_EOL;
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Csv($spreadsheet);
$writer->save($title . '.csv', 2);
}
Вывод файловой системы почти такой, как я ожидал: множество файлов CSV с собственными именами.
/>Однако содержание то же самое. Я имею в виду постепенно то же содержание, что и первый рабочий лист. Независимо от того, изменю ли я активный лист.
Мой вопрос: как сохранить файл CSV на основе определенного листа?
ОБНОВЛЕНИЕ:
Если я изменю порядок листов в книге, я получу нужный мне CSV-файл. Но это всего лишь мгновенный прием, и он не сработает, когда мне придется работать с дополнительными листами.
Подробнее здесь: https://stackoverflow.com/questions/792 ... eet-as-csv
Мобильная версия