phpspreadsheet setCellValue не пишет - PullRequest
0 голосов
/ 08 июня 2018

Я загружаю файл Excel, читаю содержимое и записываю в новый файл Excel с помощью phpspreadsheet.

Я пытаюсь создать файл Excel.

Я пишу в ячейки, используяследующий код

$writesheet->setActiveSheetIndex(0)->setCellValue('A1','myemail@gmail.com');

эти строки

        echo 'valid';
        echo $cell;
        echo $toemail;

правильно выводят все значения.

Но эта строка кода не работает ..

Полный код:

<?php
include '../includes/common.php';
include "class.emailvalidator.php";






/////////////////////////////////////EXCEL READER ////////////////////////////////
if(!empty($_FILES)){
    require 'spreadsheet/vendor/autoload.php';
    $file = $_FILES['files']['tmp_name'];
    $file_name = $_FILES['files']['name'];
    $upload_path = 'files/'.$file_name;


    if(move_uploaded_file($file,$upload_path)){
        $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($upload_path);
        $worksheet = $spreadsheet->getActiveSheet();
        $highestRow = $worksheet->getHighestRow();

        for ($row = 1; $row <= $highestRow; ++$row) {
            $toemail = $worksheet->getCellByColumnAndRow(1, $row)->getValue();
            $fromemail = 'admin@myimsuite.com';

            $details = verifyEmail($fromemail,$toemail,true);

            $writesheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();

            $cell = 'A'.$row;
            if($details[0]== 'valid'){
            echo 'valid';
            echo $cell;
            echo $toemail;
                $writesheet->setActiveSheetIndex(0)->setCellValue($cell, $toemail);
            }elseif($details[0]== 'invalid'){

            }


        }
        if(file_exists($upload_path)){
            unlink($upload_path);
        }
        $writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($writesheet);

        $fxls ='excel-file_1.xlsx';
        $writer->save($fxls);        
        if(file_exists($fxls)){
            //force_download($fxls);        
        }

    }


die();

}

   function force_download($filename) {
    $filedata = @file_get_contents($filename);

    // SUCCESS
    if ($filedata)
    {
        // GET A NAME FOR THE FILE
        $basename = basename($filename);

        // THESE HEADERS ARE USED ON ALL BROWSERS
        header("Content-Type: application-x/force-download");
        header("Content-Disposition: attachment; filename=$basename");
        header("Content-length: " . (string)(strlen($filedata)));
        header("Expires: ".gmdate("D, d M Y H:i:s", mktime(date("H")+2, date("i"), date("s"), date("m"), date("d"), date("Y")))." GMT");
        header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");

        // THIS HEADER MUST BE OMITTED FOR IE 6+
        if (FALSE === strpos($_SERVER["HTTP_USER_AGENT"], 'MSIE '))
        {
            header("Cache-Control: no-cache, must-revalidate");
        }

        // THIS IS THE LAST HEADER
        header("Pragma: no-cache");

        // FLUSH THE HEADERS TO THE BROWSER
        flush();

        // CAPTURE THE FILE IN THE OUTPUT BUFFERS - WILL BE FLUSHED AT SCRIPT END
        ob_start();
        echo $filedata;
    }

    // FAILURE
    else
    {
        die("ERROR: UNABLE TO OPEN $filename");
    }
}

/////////////////////////////////////EXCEL READER ////////////////////////////////



////////////////////////Email Related//////////////////////////////
//var_dump($log);

////////////////////////End Email Related//////////////////////////////
$objSmarty->assign("page",'bannerindex');

$objSmarty->setTemplateDir("../templates");
$objSmarty->display("email_validator.tpl");
?>

1 Ответ

0 голосов
/ 04 сентября 2018

Попробуйте запустить $writer->setPreCalculateFormulas(false); - исправлено для меня

...