Перейти к содержимому


Как сформировать файл excel и отправить его почтой

excel email

Сообщений в теме: 2

#1 olgawww

    Новичок

  • Пользователи
  • Pip
  • 9 сообщений

Отправлено 04 Сентябрь 2017 - 11:48

Добрый день.
Хочу сформировать файл excel, сохранить его в базу и отправить полученный файл почтой.
Создаю доп.действие. Делаю тестовый пример.
Файл создается, в базе сохраняется, но в письме нет вложения. Подскажите, что делаю не так?
Ниже код:
require_once "include/excel/PHPExcel.php";
$pExcel = new PHPExcel();
$pExcel->setActiveSheetIndex(0);
$aSheet = $pExcel->getActiveSheet();
$pExcel->createSheet();
//ширина колонок
$aSheet->getColumnDimension('A')->setWidth(20); //ширина колонки А

// Записываем данные в ячейку
$date = date('d-m-Y');
$aSheet->setCellValue('A1',$date);

//сохраняем файл
$objWriter = PHPExcel_IOFactory::createWriter($pExcel, 'Excel5');
/* Если хотим выдать файл пользователю для сохранения на ПК
//header('Content-Type:application/vnd.ms-excel');
//header('Content-Disposition:attachment;filename="test.xls"');
//$objWriter->save('php://output');
//------или сохраняем файл в базу (см.ниже)
*/
$Xls_file = $objWriter->save('test.xls'); //Save file
$file_name = 'test.xls';
$need_line_id = $line['ID']; //ID записи, куда пишем файл (то есть в текущую запись)
$need_field_id = 4911;// номер поля, куда пишем файл
//$line['Файл'] = $file_name;
save_data_file($need_field_id,$need_line_id,$file_name,$Xls_file);

//отправляем письмо
$file['name'] = "test.xls";
$file['disp'] = "attachment";
$file['type'] = "application/xls";
$attach_files[] = $line['f4911']; //здесь должен быть сохраненный файл xls
$mailto="admin@firma.ru"; //адрес получателя
$mailfrom="admin@firma.ru"; //адрес отправителя
$html2="тест: отправка сформированного файла эксель";
$out=sendmail("test create excel",$html2,$mailto,$mailfrom,"КБ","","text/html","utf-8","",$attach_files,-1,1,0,0);
echo "письмо отправлено";


#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 05 Сентябрь 2017 - 09:36

Неправильно заполняете массив файлов. Почитайте документацию по функции: https://code-stock.c...able=50&line=21

#3 olgawww

    Новичок

  • Пользователи
  • Pip
  • 9 сообщений

Отправлено 05 Сентябрь 2017 - 13:15

Спасибо. Выкладываю измененный код, возможно кому-то пригодится.
require_once "include/excel/PHPExcel.php";
$pExcel = new PHPExcel();
$pExcel->setActiveSheetIndex(0);
$aSheet = $pExcel->getActiveSheet();
$pExcel->createSheet();
//ширина колонок
$aSheet->getColumnDimension('A')->setWidth(20); //ширина колонки А
$aSheet->getRowDimension('1')->setRowHeight(20);
// Записываем данные в ячейку
$date = date('d-m-Y');
$aSheet->setCellValue('A1',$date);

//сохраняем файл
$objWriter = PHPExcel_IOFactory::createWriter($pExcel, 'Excel5');
//Если хотим выдать файл пользователю для сохранения на ПК
//header('Content-Type:application/vnd.ms-excel');
//header('Content-Disposition:attachment;filename="test.xls"');
//$objWriter->save('php://output');
//или сохраняем файл в базу (см.ниже)
$objWriter->save('test.xls');
$XlsFile = file_get_contents('test.xls'); //Save file
$need_line_id = $line['ID']; //ID записи, куда пишем файл
$need_field_id = 4911;// поле, куда пишем файл
$line['Файл'] = 'test.xls'; //=f4911 в моем случае
save_data_file($need_field_id,$need_line_id,'test.xls',$XlsFile);
echo "<br/>save";

//отправляем письмо

//Если нужно отправить уже сохраненный в базе файл (например из поля f4931)
//$XlsFile = file_get_contents(get_file_path(4931,$line['ID'],$line['f4931']));

//но у нас уже есть строковое содержимое файла
$file['content'] = $XlsFile; //здесь файл xls
$file['name'] = "test.xls";
$file['disp'] = "attachment";
$file['type'] = "application/xls";
$attach_files[] = $file;

$mailto="admin@firma.ru"; //адрес получателя
$mailfrom="admin@firma.ru"; //адрес отправителя
$html2="Описание: отправка сформированного файла эксель";
$tema="test create excel";
$out=sendmail($tema,$html2,$mailto,$mailfrom,"КБ","","text/html","utf-8","",$attach_files,-1,1,0,0);
echo "<br/>письмо отправлено";

Сообщение отредактировал olgawww: 05 Сентябрь 2017 - 13:16






Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных