Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从PHP导出到Excel(xlsx)_Php_Sql Server_Excel - Fatal编程技术网

如何从PHP导出到Excel(xlsx)

如何从PHP导出到Excel(xlsx),php,sql-server,excel,Php,Sql Server,Excel,我正在尝试从PHP中的MSSQL查询导出到xlsx文件。我无法访问我的网站所在的服务器,因此我无法使用任何尚未内置到PHP中的内容。我使用的是PHP5.4。到目前为止,我已经创建了一个,它引用了一个应该从我的MSSQL数据库中提取数据的php页面。相反,它给了我一个xls格式的空白文件。当我打开它时,它会抛出一个关于下载文件夹中没有stylesheet.css文件的错误,然后打开一个空白的xls工作簿。这是我的ExportToExcel.php文件: $tsql = "select ID, Ta

我正在尝试从PHP中的MSSQL查询导出到xlsx文件。我无法访问我的网站所在的服务器,因此我无法使用任何尚未内置到PHP中的内容。我使用的是PHP5.4。到目前为止,我已经创建了一个
,它引用了一个应该从我的MSSQL数据库中提取数据的php页面。相反,它给了我一个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";
}

我已经修复了
标题
,以便Excel知道它正在打开的是一个csv文件。我不再犯这两个错误

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

我仍然没有任何其他库,因此不会有任何格式,只有一个csv文件。

我已修复了
标题,以便Excel知道它正在打开的是一个csv文件。我不再犯这两个错误

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

我仍然没有任何其他库,因此不会有任何格式,只有一个csv文件。

您没有创建xls文件
.xls
是一种复合ole格式。您正在生成一个.csv文件,并将其类型告诉excel。这就是Excel告诉您格式不匹配的原因。您无法绕过这一点,因为Excel知道您在撒谎。要么使用合适的excel库,要么以合适的方式告诉excel这是一个csv文件。@MarcB我认为这是合适的库
标题(“内容类型:application/vnd.openxmlformats officedocument.spreadsheetml.sheet”)
。如果不是,那么什么是csv或如何将其更改为csv?如果我是新的,我早就做了。那不是图书馆。这只是告诉客户“我正在向您发送这种类型的文件”。然后你发送一个完全不同的数据type@MarcB我不知道。我以为那是图书馆。那么在哪里指定库呢?我应该将标题更改为什么,以便它可以看到我正在发送csv?您没有创建xls文件
.xls
是一种复合ole格式。您正在生成一个.csv文件,并将其类型告诉excel。这就是Excel告诉您格式不匹配的原因。您无法绕过这一点,因为Excel知道您在撒谎。要么使用合适的excel库,要么以合适的方式告诉excel这是一个csv文件。@MarcB我认为这是合适的库
标题(“内容类型:application/vnd.openxmlformats officedocument.spreadsheetml.sheet”)
。如果不是,那么什么是csv或如何将其更改为csv?如果我是新的,我早就做了。那不是图书馆。这只是告诉客户“我正在向您发送这种类型的文件”。然后你发送一个完全不同的数据type@MarcB我不知道。我以为那是图书馆。那么在哪里指定库呢?我应该将标题更改为什么,以便它看到我正在发送csv?
header("Content-Type: application/x-csv");
header("Content-Disposition: attachment; filename=$filename.csv");