ddeboer / data-import

Import data from and export data to a range of different file formats and media
MIT License
566 stars 123 forks source link

ExcelWriter taking SplFileObject as argument and deleting it - unlink issue #265

Open tmilos opened 8 years ago

tmilos commented 8 years ago

ExcelWriter takes \SplFileObject as argument in constructor, but use it only to take filename. By default it uses Excel2007 type, which if file exists, unlinks it before reopening it, which results in error since SplFileObject created the file and opened handle on it.

Suggested solution, change ExcelWriter::__constructor to take argument string filename, rathen then\SplFileObject $file``

$filename = sprintf('%s/%s.xls', sys_get_temp_dir(), sha1(strtotime('now')));
$file = new \SplFileObject($name, 'w');
$result = $workflow
    ->addWriter(new ExcelWriter($fileObject, null, 'Excel2007'))
    ->process();

Warning: unlink(C:\Temp/7344836b29cf1d3e8f20a2b4e8aa889ebef69766.xls): Permission denied
in vendor/phpoffice/phpexcel/Classes/PHPExcel/Writer/Excel2007.php at line 229
lib version
ddeboer/data-import 0.18.0
phpoffice/phpexcel 1.8.1
php 5.5.19 win32
Baachi commented 8 years ago

Feel free to open a PR!

PH-Lars commented 8 years ago

The following works for me:

   $writer
            ->prepare()
            ->writeItem(array('first', 'last'));

        unset($file);

        $writer->finish();
Marou023 commented 8 years ago

How does you resolve that problem of export file in excel: Warning : unlink(D:\test\data.xlsx): Permission denied in in vendor\phpoffice\phpexcel\Classes\PHPExcel\Writer\Excel2007.php at line 236 .

`$workflow = new Workflow($reader);

        $file = new \SplFileObject('D:\test\data.xlsx', 'w');
        $writer = new ExcelWriter($file);

      $workflow->addWriter($writer);
        $workflow->process();`