
Подскажите мне пожалуйста, как решить такую задачу:
На php формирую таблицу и вывожу в браузер.
Теперь хочу распечатать данную таблицу в формате Excel.
Скачала класс для формирования Excel документов (PHPExcel),
вывод документа осуществляется так:
Цитата |
// Redirect output to a client’s web browser (Excel5) header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="01simple.xls"'); header('Cache-Control: max-age=0'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output'); |
Цитата |
ответьте мне пожалуйста, в сессию можно передавать большие массивы или это в корне не правильно??? |
header ("Content-type:application/vnd.ms-excel");
echo '
<table>
<tr>
<td>1</td>
<td>2</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
</tr>
</table>';
print "<input type='button' name='pechat1' onClick=\"location.href='excel_file/dct_excel_1.php'\" value='Печать-Com'>";
$xls = new COM("Excel.Application"); // Создаем новый COM-объект
$xls->Application->Visible = 1; // Заставляем его отобразиться
$xls->Workbooks->Add(); // Добавляем новый документ
$rangeValue = $xls->Range("A1");
$rangeValue->Value = "В выделенном блоке текст будет жирный, подчеркнутый, наклонный";
$rangeValue = $xls->Range("A2");
$rangeValue->Value = "Шрифт будет иметь высоту 12";
$rangeValue = $xls->Range("A3");
$rangeValue->Value = "Имя шрифта - Times New Roman";
//1)отправляем в браузер через заголовки
// Redirect output to a client’s web browser (Excel5)
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="01simple.xls"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
//2)сохраняем
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
Цитата |
Берем информацию скажем из базы, формируем файлик Excel, предлогаем пользователю распечатать/сохранить, но при этом файлик не регистрируется на жестаке сервера |
Цитата |
//ЗДЕСЬ МНЕ НУЖЕН МОЙ МАССИВ $m_tab;//как мне его передать в файл dct_excel_v1.php??? |
//тут сформировался массив $m_tab
print_r( $m_tab);
print "<input type='button' name='pechat4' onClick=\"location.href='excel_file/dct_excel_v1.php'\" value='Печать'>";
//класс для работы с Excel
/** PHPExcel */
require_once 'Classes/PHPExcel.php';
//ЗДЕСЬ МНЕ НУЖЕН МОЙ МАССИВ
$m_tab;//как его передать в этот файл я не знаю(
//количество строк в массиве
$kt=count($m_tab);
// Create new PHPExcel object
$objPHPExcel = new PHPExcel();
// Set properties
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
->setLastModifiedBy("Maarten Balliauw")
->setTitle("Office 2007 XLSX Test Document")
->setSubject("Office 2007 XLSX Test Document")
->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
->setKeywords("office 2007 openxml php")
->setCategory("Test result file");
// Add some data
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', "Отчет");
$m_col_excel=array('A','B','C','D','E','F','G','H','I','J');
//активный лист
$aSheet = $objPHPExcel->getActiveSheet();
//устанавливаем ширину
$aSheet->getColumnDimension('A')->setWidth(5);
$aSheet->getColumnDimension('C')->setWidth(20);
$aSheet->getColumnDimension('E')->setWidth(15);
$aSheet->getColumnDimension('H')->setWidth(13);
$aSheet->getColumnDimension('I')->setWidth(15);
$aSheet->getColumnDimension('J')->setWidth(20);
//формат заголовка
$aSheet->getStyle('A1')->getFont()->setSize(12);
$aSheet->getStyle('A1')->getFont()->setBold(true);
$aSheet->getStyle('A1')->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE);
//подключаем класс стилей
$sharedStyle1 = new PHPExcel_Style();
//внутренняя рамка таблицы
$sharedStyle1->applyFromArray(
array(
'borders' => array(
'bottom' => array('style' => PHPExcel_Style_Border::BORDER_THIN),
'right' => array('style' => PHPExcel_Style_Border::BORDER_THIN)
)
));
//настройки для шрифтов
$boldFont = array(
'font'=>array(
//'name'=>'Arial Cyr',
'size'=>'10',
'bold'=>true
)
);
//и позиционирование
$center = array(
'alignment'=>array(
'horizontal'=>PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
'vertical'=>PHPExcel_Style_Alignment::VERTICAL_CENTER//VERTICAL_TOP
)
);
$center_v = array(
'alignment'=>array(
'horizontal'=>PHPExcel_Style_Alignment::HORIZONTAL_LEFT,
'vertical'=>PHPExcel_Style_Alignment::VERTICAL_TOP
)
);
//оформляем рамку таблицы
$aSheet->setSharedStyle($sharedStyle1, "A3:J".(3+$kt));
//массив по столбцам таблицы
foreach ($m_col_excel as $key=>$col)
{
//установим жирный шрифт для заголовков и заодно отцентрируем
$aSheet->getStyle($col.'3')->applyFromArray($boldFont)->applyFromArray($center);
//перенос строк
$aSheet->getStyle($col.'3')->getAlignment()->setWrapText(true);
//заполняем таблицу-----------------------
for($j=0; $j<$kt; $j++)
{
//начальная строка таблицы
$r=4+$j;
//отцентрируем
$aSheet->getStyle($col.$r)->applyFromArray($center_v);
//перенос строк
if($col!='B')
$aSheet->getStyle($col.$r)->getAlignment()->setWrapText(true);
if($col=='A') $aSheet->setCellValue('A'.$r, ($j+1) );
else $aSheet->setCellValue($col.$r, $m_tab[$j][$key-1]);
}
}
// Rename sheet
$aSheet->setTitle('Отчет');
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);
// Redirect output to a client’s web browser (Excel5)
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="doc_excel.xls"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
exit;
Цитата |
//ЗДЕСЬ МНЕ НУЖЕН МОЙ МАССИВ $m_tab[]; |
$m_tab;
<form method='POST' action='createTable.php'>а на странице createTable.php подключай класс, формируй таблицу и JS запуск на печать.
<!--вывод твоей таблицы (массива)-->
<input type='hidden' name='table' value='<?php массив; ?>'>
<input type button='submit' value='распечатать?'>
</form>
//тут сформировался массив $m_tab
print_r( $m_tab);
print "<input type='button' name='pechat4' onClick=\"location.href='excel_file/dct_excel_v1.php?m_tab=".$m_tab."'\" value='Печать'>";
Цитата |
//ЗДЕСЬ МНЕ НУЖЕН МОЙ МАССИВ $m_tab;//как его передать в этот файл я не знаю( |
print_r($m_tab);//тут отображается мой двумерный массив
// Преобразовываем полученный массив в строку с помощью функции serialize():
$str_m_tab = serialize($m_tab);
print "
<form method='POST' action='excel_file/dct_excel.php'>
<input type='hidden' name='m_tab' name='m_tab' value='".$str_m_tab."'>
<input type='submit' id='pechat' name='pechat' value='Печать-submit'>
</form>";
if(isset($_POST['m_tab']))
{
$m_tabp=$_POST['m_tab'];
// Распаковываем массив из строки, используя функцию unserialize()
$m_tab = unserialize($m_tabp);
print_r($m_tab);
print $m_tab[0][0];
}
Цитата (zvezda_t @ 27.04.2011 - 08:25) |
а что такое $_REQUEST? :rolleyes: |
Цитата |
//тут сформировался массив $m_tab |
print_r($m_tab);//тут отображается мой двумерный массив
// Преобразовываем полученный массив в строку с помощью функции serialize():
$str_m_tab = serialize($m_tab);
print "
<form method='POST' action='excel_file/dct_excel.php'>
<input type='hidden' name='m_tab' name='m_tab' value='".$str_m_tab."'>
<input type='submit' id='pechat' name='pechat' value='Печать-submit'>
</form>";
Цитата |
Ни одного упоминания про двумерный массив |
Цитата |
string(2) "8M" |
Цитата |
Notice: unserialize() [function.unserialize]: Error at offset 30 of 3573 bytes |
var_dump(ini_set('post_max_size', '32M'));
var_dump(ini_set('post_max_size', '32M'));
Цитата |
bool(false) |
<form name='form1' method='POST'>
//кнопки, изменяющие значения полей таблицы
<input type='submit' name=...>
<input type='submit' name=...>
<table>
//значения таблицы, которые нужно отправить на печать.
</table>
</form>
массив $tab содержит поля таблицы.
<form method='POST' action='excel_file/dct_excel_st.php'>
<input type='hidden' name='tab' name='tab' value='".$tab."'>
<input type='submit' id='pechat' name='pechat' value='Печать'>
</form>
Цитата |
Скажите пожалуйста, а можно как нибудь отправить значения таблицы на печать, методом POST, с перенаправлением на другую страницу, но не прописывать адрес в теги формы? |
Цитата |
А можно как нибудь объединить эти две формы, чтобы и кнопка Печать сработала и при нажатии кнопок из формы form1, не было выполнения dct_excel_st.php? |
Цитата |
value='".$tab."' |
Цитата |
ну по идее да, можно. На js |
Цитата |
я так понимаю, что здесь выводится сериализованный массив? Если да, то я кажется понял, в чем дело |
$tab = htmlspecialchars(serialize($data));
echo '<input type="hidden" name="tab" value="' . $tab . '" />'; // обрати внимание, аттрибуты заключены именно в кавычки, а не в апострофы
$data = unserialize(htmlspecialchars_decode($_POST['tab']));
Цитата |
8M - это какой объем данных? |
Цитата |
ты гений!!!) |
<script type="text/javascript">
window.onload = function() {
document.getElementById('pechat').onclick = function() {
// тут отправляем данные и редирект
}
}
</script>
<!-- html -->
<input type='button' id='pechat' name='pechat' value='Печать' />
<!-- html -->