2015-06-25 45 views
0

Excel文件是使用與所有數據一起保存在文件夾中的phpexcel創建的。相同的文件不能作爲郵件中的附件發送。我也想上傳表格中的excel來進行更改。 請指教。這是代碼。發送附件時PHPExecel文件爲空

<?php 

    //include PHPExcel library 
    require_once "Classes/PHPExcel.php"; 
    require_once "Classes/PHPExcel/IOFactory.php"; 

    if (!empty($_POST['submit'])) { 
    //give a filename 
    $dtime  = date('Y-m-d H-i-s'); 
    $dtimeFile = date('Y-m-d-H-i-s'); 
    date_default_timezone_set('Asia/Singapore'); 
    $filename = 'myexcel'.$dtimeFile.'.xls'; 
    $path  = __DIR__; 

    //set headers to download file 
    header('Content-Type: application/vnd.ms-excel'); 
    header('Content-Disposition: attachment;filename='.$filename); 

    // create new PHPExcel object 
    $objTpl = new PHPExcel; 
    // set default font 
    $objTpl->getDefaultStyle()->getFont()->setName('Calibri'); 
    // set default font size 
    $objTpl->getDefaultStyle()->getFont()->setSize(8); 
    // create the writer 
    $objWriter = PHPExcel_IOFactory::createWriter($objTpl, "Excel5"); 

    // writer already created the first sheet for us, let's get it 
    $objSheet = $objTpl->getActiveSheet(); 
    // rename the sheet 
    $objSheet->setTitle('My Personal Details'); 

    // let's bold and size the header font and write the header 
    // as you can see, we can specify a range of cells, like here: cells from A1 to A4 
    $objSheet->getStyle('A1:C1')->getFont()->setBold(true)->setSize(12); 
    $objSheet->getStyle('A2:C2')->getFont()->setSize(12); 

    // write header 
    $objSheet->getCell('A1')->setValue('Name'); 
$objSheet->getCell('B1')->setValue('Email'); 
$objSheet->getCell('C1')->setValue('Location'); 

// we could get this data from database, but for simplicty, let's just write it 
$objSheet->getCell('A2')->setValue(stripslashes($_POST['name'])); 
$objSheet->getCell('B2')->setValue(stripslashes($_POST['email'])); 
$objSheet->getCell('C2')->setValue(stripslashes($_POST['location'])); 

// // autosize the columns 
// $objSheet->getColumnDimension('A')->setAutoSize(true); 
// $objSheet->getColumnDimension('B')->setAutoSize(true); 
// $objSheet->getColumnDimension('C')->setAutoSize(true); 
// $objSheet->getColumnDimension('D')->setAutoSize(true); 

$objWriter->save('php://output'); 

$to  = "[email protected]"; 
$subject = $filename; 
$from = "[email protected]"; 
$headers = "From: $from\r\n"; 
$headers .= "MIME-Version: 1.0\r\n" 
."Content-Type: multipart/mixed; boundary=\"1a2a3a\""; 

$message .= "If you can see this MIME than your client doesn't accept MIME types!\r\n" 
."--1a2a3a\r\n"; 

$message .= "Content-Type: text/html; charset=\"iso-8859-1\"\r\n" 
."Content-Transfer-Encoding: 7bit\r\n\r\n" 
."Attached is the file number \"".$filename."\"\r\n\r\n" 
."--1a2a3a\r\n"; 

$file  = $path.$filename; 
$file_size = filesize($file); 
$handle = fopen($file, "r"); 
$content = fread($handle, $file_size); 
fclose($handle); 

$message .= "Content-Type: application/vnd.ms-excel; name=\"".$filename."\"\r\n" 
."Content-Transfer-Encoding: base64\r\n" 
."Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n" 
."\r\n" 
.chunk_split(base64_encode($content)) 
."--1a2a3a--"; 

// Send email 
// 
$success = mail($to, $subject, $message, $headers); 
if (!$success) { 
    echo "Mail to ".$to." failed ."; 
} else { 
    echo "Success : Mail was send to ".$to; 
} 

} 
    //*************** upload file ***************// 
    if (!empty($_POST['btn-upload'])) { 
    $file = 'file'; 
    $Reader = PHPExcel_IOFactory::createReaderForFile($file); 
    $Reader->setReadDataOnly(true);// set this, to not read all excel properties, just data 
    $objXLS = $Reader->load($file); 
    $value = $objXLS->getSheet(0)->getCell('A1')->getValue(); 
    $objXLS->disconnectWorksheets(); 
    unset($objXLS); 
    } 

?> 
+0

你能更具體到你想要做什麼? – bowlturner

+0

在excel表格中保存標籤和字段輸入時會創建一個html表單。該Excel表格也作爲郵件的附件發送。 Excel表格欄位輸入也可以上傳以進行更改。 –

回答

2

我不熟悉PHP Excel,並且很長一段時間沒有使用PHP,但是在您的代碼中有一些東西對我來說非常重要。

你初始化變量爲文件名

$filename = 'myexcel'.$dtimeFile.'.xls'; 

,並試圖讀取該文件的這樣

$file  = $path.$filename; 
$file_size = filesize($file); 
$handle = fopen($file, "r"); 
$content = fread($handle, $file_size); 
fclose($handle); 

內容,但你似乎沒有真正的Excel工作表保存到該文件。相反,您似乎將它寫入當前PHP頁面的輸出流。

$objWriter->save('php://output'); 

設置內容部署頭

header('Content-Disposition: attachment;filename='.$filename); 

告訴瀏覽器打開這個PHP頁面做什麼由PHP頁面返回的數據,但不將文件保存到本地服務器,以便它可以附加到該服務器上的電子郵件。

在將Excel文件附加到電子郵件之前,您需要將Excel文件保存到本地服務器上的某個位置。