0

i want to show the xlsx file as html, but it always return the first sheet of the file. What i want is to get the writer to show the one active sheet only if there are multiple sheets (name and order of sheet are random). here is my code :

public function view_excel($path){
        $file = realpath(FCPATH)."/uploads/PKB/".$path;
        $reader = IOFactory::createReader('Xlsx');
        $spreadsheet = $reader->load($file);
        // $spreadsheet = $spreadsheet->getActiveSheet();
        $writer = IOFactory::createWriter($spreadsheet, 'Html');
        $message = $writer->save('php://output');
    }

is there a way to do this ? Thanks

highcal
  • 73
  • 1
  • 11

2 Answers2

0

i managed to do this :

public function view_excel($path){
        $file = realpath(FCPATH)."/uploads/PKB/".$path;
        $reader = IOFactory::createReader('Xlsx');
        $spreadsheet = $reader->load($file);
        $active_sheet = $spreadsheet->getActiveSheet()->getTitle();
        $reader->setLoadSheetsOnly($active_sheet); //only load active sheet
        $worksheet = $reader->load($file);
        $writer = IOFactory::createWriter($worksheet, 'Html');
        $message = $writer->save('php://output');
    }

had to load the file twice

highcal
  • 73
  • 1
  • 11
0

Here you go!

public function view_excel($path){
    $file = realpath(FCPATH)."/uploads/PKB/".$path;
    $reader = IOFactory::createReader('Xlsx');
    $spreadsheet = $reader->load($file);
    $writer = IOFactory::createWriter($spreadsheet, 'Html');

 -> $writer->setSheetIndex($spreadsheet->getActiveSheetIndex());

    $message = $writer->save('php://output');
}