PHP создает электронную таблицу Excel, а затем посылает ее по электронной почте в виде вложения

Я использую следующий код:

<?php $data = $_REQUEST['datatodisplay']; header("Content-Type: application/vnd.ms-excel"); header("Content-Disposition: attachment; filename=Data.xls"); header("Pragma: no-cache"); header("Expires: 0"); echo $data; ?> 

Это то, что я вызываю, когда пользователь нажимает кнопку отправки. Но я заинтересован в отправке электронной таблицы Excel в виде вложения электронной почты. Поэтому в этом файле ниже я подключаюсь к БД, выбираю результаты и создаю электронную таблицу, а затем отправляю ее как вложение. Возможно ли это с помощью настройки кода ниже (я могу сделать mysql, но не просто создать excel)

Вам понадобится библиотека для создания фактического документа Excel, если только CSV не является приемлемым. CSV откроется в виде таблицы в Excel, но вы не сможете использовать ни один из продвинутых элементов, таких как форматирование или формулы.

Я использую библиотеку PHPExcel (http://phpexcel.codeplex.com/). Он позволяет использовать полные функциональные возможности Excel, включая диаграммы и формулы. Для этого требуется немного, и код довольно подробный. НО, как только вы его настроите, он работает как шарм.

Вот фрагмент кода, связанного с моей реализацией PHPExcel. Я создаю сводку платежей Paypal, полученных через API сайта. Я включаю это только для того, чтобы дать вам представление о количестве и характере задействованного кода. Как вы можете видеть, это все OO. Это только первая ЧАСТЬ кода, где я настраиваю метки столбцов и тому подобное. Это происходит через петли, чтобы поместить данные на место, а затем еще один раздел для нижнего колонтитула. Это делает ОЧЕНЬ длинный файл!

 // Create new PHPExcel object $objPHPExcel = new PHPExcel(); // Set properties $objPHPExcel->getProperties()->setCreator("----- Web Server"); $objPHPExcel->getProperties()->setLastModifiedBy("-----Web Server"); $objPHPExcel->getProperties()->setTitle("Paypal payment reconciliation report"); $objPHPExcel->getProperties()->setSubject("Paypal payment reconciliation report"); $objPHPExcel->getProperties()->setDescription("Paypal payment reconciliation report"); $objPHPExcel->getProperties()->setKeywords("paypal reconcile"); $objPHPExcel->getProperties()->setCategory("Reconciliation report"); // Create a first sheet, representing sales data $objPHPExcel->setActiveSheetIndex(0); // format the heading $objPHPExcel->getActiveSheet()->setCellValue('A1', 'Paypal Reconciliation - ran on '.date('m/d/y', time())); $objPHPExcel->getActiveSheet()->mergeCells('A1:C1'); $objPHPExcel->getActiveSheet()->setCellValue('E1', 'Date Range: '.date('m/d/Y', $oldest_transaction).' to '.date('m/d/Y', $newest_transaction)); $objPHPExcel->getActiveSheet()->mergeCells('E1:J1'); $objPHPExcel->getActiveSheet()->duplicateStyleArray( array( 'font' => array( 'size' => '12', 'bold' => true ) ), 'A1:I1' ); // add column labels $objPHPExcel->getActiveSheet()->setCellValue('A2', '#'); $objPHPExcel->getActiveSheet()->setCellValue('B2', 'Date'); $objPHPExcel->getActiveSheet()->setCellValue('C2', 'Name'); $objPHPExcel->getActiveSheet()->setCellValue('D2', 'Gross'); $objPHPExcel->getActiveSheet()->setCellValue('E2', 'Fee'); $objPHPExcel->getActiveSheet()->setCellValue('F2', 'Net'); $objPHPExcel->getActiveSheet()->setCellValue('G2', 'Balance'); $objPHPExcel->getActiveSheet()->setCellValue('H2', 'Class'); $objPHPExcel->getActiveSheet()->setCellValue('I2', 'Item Title'); $objPHPExcel->getActiveSheet()->setCellValue('J2', ''); $objPHPExcel->getActiveSheet()->setCellValue('K2', '#'); $objPHPExcel->getActiveSheet()->setCellValue('L2', 'Time'); $objPHPExcel->getActiveSheet()->setCellValue('M2', 'Type'); $objPHPExcel->getActiveSheet()->setCellValue('N2', 'Status'); $objPHPExcel->getActiveSheet()->setCellValue('O2', 'Transaction ID'); $objPHPExcel->getActiveSheet()->setCellValue('P2', 'Paypal Receipt ID'); $objPHPExcel->getActiveSheet()->setCellValue('Q2', '--- #'); $objPHPExcel->getActiveSheet()->setCellValue('R2', 'Counterparty'); $objPHPExcel->getActiveSheet()->setCellValue('S2', 'Reference Txn ID'); $objPHPExcel->getActiveSheet()->setCellValue('T2', 'Inv #'); 

РЕДАКТИРОВАТЬ

По запросу здесь приведен код для фактического вывода документа Excel, который я создал выше:

  include 'PHPExcel/IOFactory.php'; $file_name = date('md-Y', $oldest_transaction).'_THRU_'.date('md-Y', $newest_transaction); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('/usr/web/cache/temp/'.$file_name.'.xls'); header ("location:http://www.domain.com/cache/temp/".$file_name.".xls"); 

Я действительно хотел сделать это, не используя библиотеку, поэтому я нашел хорошую ссылку на этой странице. PHP Отправить письмо с вложением PDF без создания файла? а затем изменил его, чтобы создать файл Excel, используя строку с разделителями табуляции (\ t).

Таким образом, вы можете захватить данные из БД для создания строки, а затем использовать этот метод ниже, чтобы отправить электронное письмо с вложением Excel

 <?php $attachment = "testdata1 \t testdata2 \t testdata3 \t \n testdata1 \t testdata2 \t testdata3 \t "; $to = '[email protected]'; $subject = 'Test email with attachment'; //create a boundary string. It must be unique //so we use the MD5 algorithm to generate a random hash $random_hash = md5(date('r', time())); $headers = "From: [email protected]"; //add boundary string and mime type specification $headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\""; //define the body of the message. ob_start(); //Turn on output buffering ?> --PHP-mixed-<?php echo $random_hash; ?> Content-Type: multipart/alternative; boundary="PHP-alt-<?php echo $random_hash; ?>" --PHP-alt-<?php echo $random_hash; ?> Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Email Text here --PHP-mixed-<?php echo $random_hash; ?> Content-Type: application/ms-excel; name="test.xls" Content-Disposition: attachment <?php echo $attachment; //copy current buffer contents into $message variable and delete current output buffer $message = ob_get_clean(); //send the email $mail_sent = @mail( $to, $subject, $message, $headers ); //if the message is sent successfully print "Mail sent". Otherwise print "Mail failed" echo $mail_sent ? "Mail sent" : "Mail failed"; ?> 
 **Code to create excel in php:** $dtime=date('Ymd Hi-s'); $dtimeFile=date('YmdHi-s'); $headerTab ="Col1 \t Col2\t Col3\n"; $rowRecords=''; $rowRecords .=preg_replace("/\r|\n|\t/"," ",$Col1)."\t".preg_replace("/\r|\n|\t/", " ",$Col2)."\t".preg_replace("/\r|\n|\t/", " ",Col3). "\t\n"; date_default_timezone_set('America/Los_Angeles'); $filename="Your File Name-".$dtimeFile.".xls"; $path='/pathOfFile/'; $csv_handler = fopen ($path.$filename,'w'); fwrite ($csv_handler,$headerTab); fwrite ($csv_handler,$rowRecords); fclose ($csv_handler); **Code to send html email with attached excel in php:** $file = $path.$filename; $file_size = filesize($file); $handle = fopen($file, "r"); $content = fread($handle, $file_size); fclose($handle); $content = chunk_split(base64_encode($content)); $uid = md5(uniqid(time())); $headers = "From: [email protected]"."\r\n"; $headers.= "Bcc: [email protected]"."\r\n"; $headers.= "MIME-Version: 1.0\r\n"; $headers.= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n"; $headers .= "This is a multi-part message in MIME format.\r\n"; $headers .= "--".$uid."\r\n"; $headers .= "Content-type:text/html; charset=iso-8859-1\r\n"; $headers .= "Content-Transfer-Encoding: 7bit\r\n\r\n"; $headers .= $msg."\r\n\r\n"; $headers .= "--".$uid."\r\n"; $headers .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n"; $headers .= "Content-Transfer-Encoding: base64\r\n"; $headers .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n"; $headers .= $content."\r\n\r\n"; $headers .= "--".$uid."--"; $date=date("Ymd"); if(mail($to,"Mail heading--".$date,$msg,$headers)){ echo "Mailed successfully"; } else { echo "Mailed couldn't be sent"; } 
  • Отправка файла CSV с помощью PHP
  • Загрузите и вставьте файл xls в mysql?
  • Laravel / PHP Excel получает строки до тех пор, пока не вернет пустой массив
  • Дата Excel изменена на другую дату в mysql
  • Экспорт HTML в Excel с использованием общей функции, отображаемой на странице просмотра и экспорта данных
  • Нажмите кнопку, чтобы загрузить файл и экспортировать в Excel.
  • Экспорт Excel не поддерживал арабский язык, используя php
  • csv в mysql по php
  • phpexcel не читает лист правильно
  • PHPExcel - Как изменить цвет, границу и фон диаграммы с помощью библиотеки phpexcel?
  • Проверка достоверности данных с помощью excel ячейки для включения ячеек с другого листа
  • Давайте будем гением компьютера.