php输出excel php生成excel
2014-09-10来源:易贤网

php输出excel,在本站之前采用table的形式,以header代码打开网页为excel进行保存,但是在header方法中生成的excel不是标准的,有的时候不能被微软的excel识别,传送也不好传送。

现在采用<cell>的形式进行输出。类来源于网络,做了部分解释

class Excel_XML

{

private $header = "<?xml version=\"1.0\" encoding=\"%s\"?\>\n<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\" xmlns:x=\"urn:schemas-microsoft-com:office:excel\" xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\" xmlns:html=\"http://www.w3.org/TR/REC-html40\">";

private $footer = "</Workbook>";

private $lines = array();

private $sEncoding;

private $bConvertTypes;

private $sWorksheetTitle;

public function __construct($sEncoding = 'UTF-8', $bConvertTypes = false, $sWorksheetTitle = 'Table1')

{

$this->bConvertTypes = $bConvertTypes;

$this->setEncoding($sEncoding);

$this->setWorksheetTitle($sWorksheetTitle);

}

public function setEncoding($sEncoding)

{

$this->sEncoding = $sEncoding;

}

public function setWorksheetTitle ($title)

{

// $title = preg_replace ("/[\\\|:|\/|\?|\*|\[|\]]/", "", $title);//如果有特殊字符则表示替换

$title = substr ($title, 0, 31);

$this->sWorksheetTitle = $title;

}

private function addRow ($array)

{

$cells = "";

foreach ($array as $k => $v):

$type = 'String';

if ($this->bConvertTypes === true && is_numeric($v)):

$type = ‘Number’;

endif;

$v = htmlentities($v, ENT_COMPAT, $this->sEncoding);

$cells .= "<Cell><Data ss:Type=\"$type\">" . $v . "</Data></Cell>\n";

endforeach;

$this->lines[] = "<Row>\n" . $cells . "</Row>\n";

}

public function addArray ($array)

{

foreach ($array as $k => $v)

$this->addRow ($v);

}

public function generateXML ($filename = 'excel-export')

{

// correct/validate filename

// $filename = preg_replace('/[^aA-zZ0-9\_\-]/', '', $filename);//这里用来替换了非字母数字为空

// deliver header (as recommended in php manual)

header("Content-Type: application/vnd.ms-excel; charset=" . $this->sEncoding);

header("Content-Disposition: inline; filename=\"" . $filename . ".xls\"");

// print out document to the browser

// need to use stripslashes for the damn ">"

echo stripslashes (sprintf($this->header, $this->sEncoding));

echo "\n<Worksheet ss:Name=\"" . $this->sWorksheetTitle . "\">\n<Table>\n";

foreach ($this->lines as $line)

echo $line;

echo "</Table>\n</Worksheet>\n";

echo $this->footer;

}

}

生成代码:

include("excelclass.php");

$data = array(

array ('空格','','空格测试'),//第一行数据

array('Schwarz', '中文测试'),//第二行数据

array('√', '特殊字符测试')

);

$xls = new Excel_XML('UTF-8', false, 'php输出Excel第一个sheet的名称');

$xls->addArray($data);

$xls->generateXML('php生成Excel的名称');

运行试试,应该没有错,我已经做过测试

更多信息请查看IT技术专栏

2026公务员·事业单位培训课程试听报名

  • 报班类型
  • 姓名
  • 手机号
  • 验证码
推荐信息