Tentei salvar uma planilha específica de um XLSX como CSV. Primeiro, tentei usar setActiveSheetIndexByName()
a função para definir a planilha ativa e chamar o método writer de \PhpOffice\PhpSpreadsheet\Writer\Csv
, mas sem sorte. De alguma forma, o writer salvou a primeira planilha. Tentei indexar por nome, por número, mas não foi uma pequena diferença.
Agora, há um código que estou experimentando:
$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);
}
A saída do console é como eu esperava: a lista de nomes de planilhas. A saída do sistema de arquivos é quase como eu esperava: muitos arquivos CSV com nomes próprios. No entanto, o conteúdo é o mesmo. Quero dizer, pouco a pouco, o mesmo conteúdo da primeira planilha. Não importa se eu altero a planilha ativa.
Minha pergunta é: como posso salvar um arquivo CSV com base em uma planilha específica?
ATUALIZAÇÃO: Se eu reordenar as planilhas na pasta de trabalho, obtenho o CSV que preciso. Mas isso é apenas um hack instantâneo e não funcionará quando eu precisar trabalhar com mais planilhas.