如何从PHP导出到Excel(xlsx)

我想从PHP中的MSSQL查询导出到xlsx文件。 我无法访问我的网站托pipe的服务器,所以我不能使用任何尚未构build到PHP中的内容。 我使用PHP 5.4。 到目前为止,我已经创build了一个引用了一个应该从我的MSSQL数据库中提取数据的php页面的<a></a> 。 相反,它给了我一个空白的文件,以xls格式。 当我打开它时,它会抛出一个关于在下载文件夹中没有stylesheet.css文件的错误,然后打开一个空白的xls工作簿。 这是我的ExportToExcel.php文件:

 $tsql = "select ID, TableName, UpdateDate from pmdb.TableUpdates order by UpdateDate"; //echo $tsql . "<br>"; $getqueries = $conn->query($tsql); //echo "<BR>"; //var_dump($getqueries); $result = $getqueries->fetchALL(PDO::FETCH_ASSOC); $filename = "TableUpdates"; //var_dump($tsql); header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); header("Content-Disposition: attachment; filename=$filename.xls"); /*******Start of Formatting for Excel*******/ //define separators (defines columns in excel & tabs in word) $sep = "\t"; //tabbed character $br = "\r\n"; //line break //start of printing column names as names of SQL fields //$max = sqlsrv_num_fields($result); /* for ($i = 0; $i < $max; $i++) { echo sqlsrv_field_metadata($result,$i) . "\t"; } print("\n"); */ foreach( sqlsrv_field_metadata( $result ) as $fieldMetadata ) { foreach( $fieldMetadata as $name => $value) { echo "$value" . $sep; } } echo $br; //end of printing column names //start while loop to get data while($row = sqlsrv_fetch($result)) { $schema_insert = ""; for($j=0; $j<sqlsrv_num_fields($result);$j++) { if(!isset($row[$j])) $schema_insert .= "NULL".$sep; elseif ($row[$j] != "") $schema_insert .= "$row[$j]".$sep; else $schema_insert .= "".$sep; } $schema_insert = str_replace($sep."$", "", $schema_insert); $schema_insert = preg_replace("/\r\n|\n\r|\n|\r/", " ", $schema_insert); $schema_insert .= "\t"; print(trim($schema_insert)); print "\n"; } 

我从其他问题中得到了大部分的答案,但是他们都没有答案。

编辑

我已经进一步了。 我现在可以打印数据,但仍会抛出错误

文件格式和扩展名。 。 。 不匹配。 。 。

加载过程中的问题:缺less文件:C:\ Users \ username \ Downloads \ StyleSheet.css

,但所有东西打印在一列。 它是用逗号分隔的,但是所有的值都在同一列中。 以下是代码的新部分:

 //define separators (defines columns in excel & tabs in word) $sep = ","; //tabbed character $br = "<br>"; //line break $hsql = "select Headings from TableHeadings where TableName = 'TableUpdates' order by ID"; $getHeadings = $conn->query($hsql); $rHeadings = $getHeadings->fetchALL(PDO::FETCH_ASSOC); $headings = array($rHeadings[0]["Headings"],$rHeadings[1]["Headings"],$rHeadings[2]["Headings"]); //start of printing column names as names of SQL fields foreach($headings as $Heading => $value) { echo "$value" . $sep; } echo $br; for ($i = 0;$i < 3;$i++) { for($l = 0;$l < 3;$l++) { if ($l == 0) { echo $result[$i]["ID"] . $sep; } elseif ($l == 1) { echo $result[$i]["TableName"] . $sep; } else { echo $result[$i]["UpdateDate"]; } } echo $br; } 

我怎样才能得到这个回声每个值,然后移动到下一个单元格? 它有逗号,但看起来像这样:

 ID,TableName,UpdateDate, 1,pmdb.MaterialTracking,2016-07-08 13:45:05.963 2,pmdb.OSP_OPR_Report,2016-07-08 13:45:45.883 3,pmdb.COEI_OPR_Report,2016-07-08 13:45:47.920 

我已经修复了这个header以便Excel知道它是一个打开的csv文件。 我不再有任何错误。

 header("Content-Type: application/x-csv"); header("Content-Disposition: attachment; filename=$filename.csv"); 

我还没有其他库,所以不会有任何格式,只是一个CSV文件。