函数将数据报表导出到php中的excel,并具有字段和行的动态编号
我正在尝试开发一个功能,用于将报告内容导出到xls文件,并为用户提供一个选项,让他们下载xls文件,以获得他们在网页上看到的结果。以下是我尝试过的代码:函数将数据报表导出到php中的excel,并具有字段和行的动态编号,php,Php,我正在尝试开发一个功能,用于将报告内容导出到xls文件,并为用户提供一个选项,让他们下载xls文件,以获得他们在网页上看到的结果。以下是我尝试过的代码: <?php class export { public function exportxls($cols,$values) { function xlsBOF() { echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0); } function xlsEOF() { e
<?php
class export
{
public function exportxls($cols,$values)
{
function xlsBOF() {
echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0);
}
function xlsEOF() {
echo pack("ss", 0x0A, 0x00);
}
function xlsWriteNumber($Row, $Col, $Value) {
echo pack("sssss", 0x203, 14, $Row, $Col, 0x0);
echo pack("d", $Value);
}
function xlsWriteLabel($Row, $Col, $Value) {
$L = strlen($Value);
echo pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L);
echo $Value;
}
// prepare headers information
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition: attachment; filename=\"export_".date("Y-m-d").".xls\"");
header("Content-Transfer-Encoding: binary");
header("Pragma: no-cache");
header("Expires: 0");
// start exporting
xlsBOF();
$j=1;
$ret = array_map (
function ($_) {return explode (',', $_);},
explode (';', $values)
);
$colarray=explode(',',$cols);
$number=count($colarray);
for($i=0;$i<$number;$i++)
{
xlsWriteLabel(0,$i,$colarray[$i]);
}
foreach($ret as $key->$value)
{
xlsWriteLabel($j,$key,$value[$key]);
$j=$j+1;
}
xlsEOF();
}
}
?>
下面是调用函数的索引文件:
<?php
include 'newxls.php';
$obj=new export();
$obj->exportxls("id,name,class","1,var,btech;2,man,mtech");
?>
请帮助我;我没有在excel文件中获得所需的输出。
提前感谢试试这个
$filename ="excelreport";
function exportexcel($fields = array(), $values = array()){
foreach($fields as $field){
$contents .= $field." \t";
}
$contents. = " \n";
foreach($values as $value){
$contents.= $value[0]. " \t";
$contents.= $value[1]. " \t";
$contents.= $value[2]. " \n";
}
return $contents;
}
header('Content-type: application/ms-excel');
header("Content-Disposition: attachment; filename=". $filename . date("Y-m-d-H-i") .".xls");
header("Cache-Control: no-cache, must-revalidate");
$contents = exportexcel(array("id,name,class"),array(array('1','test','btech'),array('2','man','mtech')));
echo $contents;
试试这个
$filename ="excelreport";
function exportexcel($fields = array(), $values = array()){
foreach($fields as $field){
$contents .= $field." \t";
}
$contents. = " \n";
foreach($values as $value){
$contents.= $value[0]. " \t";
$contents.= $value[1]. " \t";
$contents.= $value[2]. " \n";
}
return $contents;
}
header('Content-type: application/ms-excel');
header("Content-Disposition: attachment; filename=". $filename . date("Y-m-d-H-i") .".xls");
header("Cache-Control: no-cache, must-revalidate");
$contents = exportexcel(array("id,name,class"),array(array('1','test','btech'),array('2','man','mtech')));
echo $contents;
您的代码看起来不错,只需要很少的更改 更改此代码
foreach($ret as $key->$value)
{
xlsWriteLabel($j,$key,$value[$key]);
$j=$j+1;
}
换成这个
foreach ($ret as $key => $value) {
foreach($value as $k=>$v){
xlsWriteLabel($j, $k, $v);
}
$j = $j + 1;
}
所有剩余的代码看起来都很好。您的代码看起来很好,只需要很少的更改 更改此代码
foreach($ret as $key->$value)
{
xlsWriteLabel($j,$key,$value[$key]);
$j=$j+1;
}
换成这个
foreach ($ret as $key => $value) {
foreach($value as $k=>$v){
xlsWriteLabel($j, $k, $v);
}
$j = $j + 1;
}
所有剩余的代码看起来都很好。任何原因,当您实际发送CSV格式的纯文本(用制表符分隔的字段,用新行分隔的行)时,您为什么建议在标题中使用
application/ms excel
内容类型?@MakC当我尝试使用您给出的代码时,我发现语法错误为“分析错误:语法错误,意外的T_变量,第22行应为“')”“我还想将此功能用于具有不同列数的多个表,因此我无法将其设置为静态的3-4列。有什么原因吗?当您实际发送CSV格式的纯文本(用选项卡分隔的字段,用新行分隔的行)时,为什么建议在标题中使用application/ms excel
content type?”?@MakC当我尝试使用您给出的代码时,我在第22行遇到语法错误“Parse error:syntax error,unexpected T_VAR,expecting'),并且我想对多个表使用此函数,这些表的列数不同,因此我无法将其设置为3-4列的静态。有一个神奇的,非常好的隐藏和不知道几乎任何人的网站,称为!在整个互联网上,只有很少人知道它的存在。你可以尝试一下,搜索一下。它将在几秒钟内为您提供数百个有用的链接!在询问堆栈溢出之前,您是否尝试过使用这个神奇的站点?使用它比写一个长问题等待答案要快得多。有一个神奇的、隐藏得很好的、几乎所有人都不知道的网站,叫做!在整个互联网上,只有很少人知道它的存在。你可以尝试一下,搜索一下。它将在几秒钟内为您提供数百个有用的链接!在询问堆栈溢出之前,您是否尝试过使用这个神奇的站点?使用它比写一个长问题等待答案要快得多。