How to format excel file with styles, fonts, colors, tables etc with pure PHP?

I need a way to write an excel file with format through Pure PHP. WARNING:Please, this Q not about the libs, plugins and so on- do not disturb. I've googled a lot and didn`t find the Answer, but in some article on StackOverflow, some guy mentioned the HTML/CSS format way HTML format solutions that didn't work and I've tried to do this, but in file which was saved columns where filled with tags and nothing happens. May be there are some professionals who can help me with pure code writing an Excel through PHP, HTML, CSS or something.

And again with example, I've already used concept like this wich didn't help:

    // headers for excel
$headers .= "<div style='font:bold 14px Times;'>Журнал остатков и инкассаций</div>\n";
$headers .= "Начало периода\t ".date('d.m.Y')."0:00 \n";
$headers .= "Начало периода\t ".date('d.m.Y')."23:59 \n\n";

$headers .= "Терминал\t";
$headers .= "Место расположения\t";
$headers .= "Дата\t";
$headers .= "Время\t";
$headers .= "Сумма инкассации\t";
$headers .= "Банкноты\t";

// excel content with overloaded terminals
if (mssql_num_rows($resCollection)>0) {
  while ($rowCollection = mssql_fetch_object($resCollection)) {

    $data .= $rowCollection->Name."\t".$rowCollection->Address."\t"
            .$rowCollection->TerminalNotes."\t".$rowCollection->TerminalAmount
            ."\t".$rowCollection->DayAmountAll."\t"
            .$rowCollection->LastPaymentTime."\n";

  }
}

$fileName = 'collection'.date('d_m_Y_H_i_s').'.xls';


header("Content-type: application/vnd.ms-excel");// application/excel had also been used
header("Content-Disposition: attachment; filename=$fileName");
echo iconv('utf-8', 'cp1251', "$headers\n$data"); 

I've used not only divs and tables too - it didn't work though.

Answers


The following example would probably help you:

  1 <?php
  2 header('Content-type: application/excel');                                  
  3 header('Content-Disposition: attachment; filename="test.xls"');
  4 ?>
  5 
  6 <table>
  7 <tr><th>Column 1</th><th>Column 2</th></tr>
  8 <tr><td style="font-size:200%">Answer 1</td><td style="color:#f00">Answer 2<    /td></tr>
  9 <tr><td colspan="2" style="font-weight:bold">Answer 3 with 2 columns</td></t    r>
 10 </table>

Save this as a .php file on your server.

What it does is: add headers to force the browser thing you're delivering an Excel file. And then returning a table inside of it. My Excel picks this up perfectly.

Note: the sample HTML comes from the answer that you had already found. I have just added the headers to the beginning.

Note: You just changed your question and added an example. Your example does NOT use html! You are delivering a TAB-delimited file where each line ends with a newline.

The proper way to do this is to really generate HTML, ie, use a <table> at the beginning, use <tr> and </tr> for each row, and put the fields in <td> tags, and then finish with the closing </table>, so basically:

$data='<table>';
// excel content with overloaded terminals
if (mssql_num_rows($resCollection)>0) {
  while ($rowCollection = mssql_fetch_object($resCollection)) {
    $data.='<tr>';
    $data .= '<td>'.$rowCollection->Name."</td><td>".$rowCollection->Address."</td><td>"
            .$rowCollection->TerminalNotes."</td><td>".$rowCollection->TerminalAmount
            ."</td><td>".$rowCollection->DayAmountAll."</td><td>"
            .$rowCollection->LastPaymentTime."</td>";
    $data.='</tr>';

  }
}
$data.='</table>';

Then change your last line to:

echo iconv('utf-8', 'cp1251', "$data"); 

If that works I suggest you change the output to have <th> tags around your table headers, instead of the div that is in your example.


Need Your Help

redirecting from IIS to tomcat?

iis java-ee tomcat dns hosting

i have a hosting space in vps. where numerous domains are parked. my domain name is mywebsite.com it is present in c:\uname\mywebsite.com inside the folder there is default.aspx file. when I type i...

Issues with attaching on click function through Jquery

jquery html jsf-1.2

I have some disabled check boxes when the screen loads and change of one of the textbox the check box get automatically checked and i want the checkbox value to be submitted to my backing bean dur...