Home  >  Article  >  Backend Development  >  PHP如何将查询结束导出Excel

PHP如何将查询结束导出Excel

WBOY
WBOYOriginal
2016-06-23 14:16:471061browse

PHPexcel 导出 汇出

<form action="user.php" method="POST">	用户编号:<input type="text" name="u_num" size="12" value="<?php echo $_POST['u_num']; ?>" />  	用户名:<input type="text" name="u_name" size="20" value="<?php echo $_POST['u_name']; ?>" />  	<input type="submit" name="sub" value=" 查询 " />      	<input type="button" value="导出Excel" /></form><table>	<tr>		<td>用户编号</td>		<td>用户名</td>	</tr><?php	if(!empty($_POST["u_num"])){	$u_num = "where u_id='"."{$_POST['u_num']}"."'";}$sql = "select * from msd.dbo.user";$query = sqlsrv_query($conn,$sql);if( $query === false) {    die( print_r( sqlsrv_errors(), true) );}while($row = sqlsrv_fetch_array($query)) {	echo "<tr><td>$row[0]</td><td>$row[1]</td></tr>";}sqlsrv_free_stmt( $query);sqlsrv_close( $conn);?></table>

回复讨论(解决方案)

用phpexcel
http://www.jz123.cn/text/2319267.html

fputcsv()

header("Content-type:application/vnd.ms-excel");
header("Content-Disposition:attachment; filename="aaa.xls");

用phpexcel
http://www.jz123.cn/text/2319267.html
+1

header("Content-type:application/vnd.ms-excel");
header("Content-Disposition:attachment; filename="aaa.xls");
+1

其实是excel的功能强大..

$str="A1\tA2\tA3\n";$str.="B1\tB2\tB3\n";你把这些字符写入到文件中,后缀名改为.xls,excel直接就能读..

其实是excel的功能强大..

$str="A1\tA2\tA3\n";$str.="B1\tB2\tB3\n";你把这些字符写入到文件中,后缀名改为.xls,excel直接就能读..


但实际上不是真正的xls文件。


其实是excel的功能强大..

$str="A1\tA2\tA3\n";$str.="B1\tB2\tB3\n";你把这些字符写入到文件中,后缀名改为.xls,excel直接就能读..


但实际上不是真正的xls文件。
$query = sqlsrv_query($conn,$sql);if( $query === false) {    die( print_r( sqlsrv_errors(), true) );}while($row = sqlsrv_fetch_array($query)) { echo	$objPHPExcel->getActiveSheet()		->setCellValue('A2', convertUTF8($row[0]))		->setCellValue('B2', convertUTF8($row[1]))		->setCellValue('C2', convertUTF8($row[2]))		->setCellValue('D2', convertUTF8($row[3]))		->setCellValue('E2', convertUTF8($row[4]))		->setCellValue('F2', convertUTF8($row[5]))		->setCellValue('G2', convertUTF8($row[6]))		->setCellValue('H2', convertUTF8($row[7]))		->setCellValue('I2', convertUTF8($row[8]))		->setCellValue('J2', convertUTF8($row[9]))		->setCellValue('K2', convertUTF8($row[10]))		->setCellValue('L2', convertUTF8($row[11]));}
请问这段代码有问题吗?为什么在执行时报以下错误:

Catchable fatal error: Object of class PHPExcel_Worksheet could not be converted to string in D:\MarsdenWeb\Report\output_002.php on line 19

$objPHPExcel>getActiveSheet()
        ->setCellValue()操作的结果是返回 PHPExcel_Worksheet 对象,把前面的echo去掉吧

$objPHPExcel>getActiveSheet()
        ->setCellValue()操作的结果是返回 PHPExcel_Worksheet 对象,把前面的echo去掉吧
去掉echo后,是不报错了,但while循环好像就失效了,导出的结果就只有一条数据。


$objPHPExcel>getActiveSheet()
        ->setCellValue()操作的结果是返回 PHPExcel_Worksheet 对象,把前面的echo去掉吧
去掉echo后,是不报错了,但while循环好像就失效了,导出的结果就只有一条数据。

        ->setCellValue(' A2', convertUTF8($row[0]))
        ->setCellValue(' B2', convertUTF8($row[1]))
        ->setCellValue(' C2', convertUTF8($row[2]))
        ->setCellValue('D2', convertUTF8($row[3]))
        ->setCellValue('E2', convertUTF8($row[4]))
        ->setCellValue('F2', convertUTF8($row[5]))
        ->setCellValue('G2', convertUTF8($row[6]))
        ->setCellValue('H2', convertUTF8($row[7]))
        ->setCellValue('I2', convertUTF8($row[8]))
        ->setCellValue('J2', convertUTF8($row[9]))
        ->setCellValue('K2', convertUTF8($row[10]))
        ->setCellValue('L2', convertUTF8($row[11]));

标红的部分循环中没有更改,所以会覆盖之前单元格的值。



$objPHPExcel>getActiveSheet()
        ->setCellValue()操作的结果是返回 PHPExcel_Worksheet 对象,把前面的echo去掉吧
去掉echo后,是不报错了,但while循环好像就失效了,导出的结果就只有一条数据。

        ->setCellValue(' A2', convertUTF8($row[0]))
        ->setCellValue(' B2', convertUTF8($row[1]))
        ->setCellValue(' C2', convertUTF8($row[2]))
        ->setCellValue('D2', convertUTF8($row[3]))
        ->setCellValue('E2', convertUTF8($row[4]))
        ->setCellValue('F2', convertUTF8($row[5]))
        ->setCellValue('G2', convertUTF8($row[6]))
        ->setCellValue('H2', convertUTF8($row[7]))
        ->setCellValue('I2', convertUTF8($row[8]))
        ->setCellValue('J2', convertUTF8($row[9]))
        ->setCellValue('K2', convertUTF8($row[10]))
        ->setCellValue('L2', convertUTF8($row[11]));

标红的部分循环中没有更改,所以会覆盖之前单元格的值。
不太明白你的意思,那我应该怎么改呢?




$objPHPExcel>getActiveSheet()
        ->setCellValue()操作的结果是返回 PHPExcel_Worksheet 对象,把前面的echo去掉吧
去掉echo后,是不报错了,但while循环好像就失效了,导出的结果就只有一条数据。

        ->setCellValue(' A2', convertUTF8($row[0]))
        ->setCellValue(' B2', convertUTF8($row[1]))
        ->setCellValue(' C2', convertUTF8($row[2]))
        ->setCellValue('D2', convertUTF8($row[3]))
        ->setCellValue('E2', convertUTF8($row[4]))
        ->setCellValue('F2', convertUTF8($row[5]))
        ->setCellValue('G2', convertUTF8($row[6]))
        ->setCellValue('H2', convertUTF8($row[7]))
        ->setCellValue('I2', convertUTF8($row[8]))
        ->setCellValue('J2', convertUTF8($row[9]))
        ->setCellValue('K2', convertUTF8($row[10]))
        ->setCellValue('L2', convertUTF8($row[11]));

标红的部分循环中没有更改,所以会覆盖之前单元格的值。
不太明白你的意思,那我应该怎么改呢?

$i = 2;while($row = sqlsrv_fetch_array($query)) {		$objPHPExcel->getActiveSheet()        ->setCellValue('A'.$i, convertUTF8($row[0]))        ->setCellValue('B'.$i, convertUTF8($row[1]))        ->setCellValue('C'.$i, convertUTF8($row[2]))        ->setCellValue('D'.$i, convertUTF8($row[3]))        ->setCellValue('E'.$i, convertUTF8($row[4]))        ->setCellValue('F'.$i, convertUTF8($row[5]))        ->setCellValue('G'.$i, convertUTF8($row[6]))        ->setCellValue('H'.$i, convertUTF8($row[7]))        ->setCellValue('I'.$i, convertUTF8($row[8]))        ->setCellValue('J'.$i, convertUTF8($row[9]))        ->setCellValue('K'.$i, convertUTF8($row[10]))        ->setCellValue('L'.$i, convertUTF8($row[11]));		$i++;}





$objPHPExcel>getActiveSheet()
        ->setCellValue()操作的结果是返回 PHPExcel_Worksheet 对象,把前面的echo去掉吧
去掉echo后,是不报错了,但while循环好像就失效了,导出的结果就只有一条数据。

        ->setCellValue(' A2', convertUTF8($row[0]))
        ->setCellValue(' B2', convertUTF8($row[1]))
        ->setCellValue(' C2', convertUTF8($row[2]))
        ->setCellValue('D2', convertUTF8($row[3]))
        ->setCellValue('E2', convertUTF8($row[4]))
        ->setCellValue('F2', convertUTF8($row[5]))
        ->setCellValue('G2', convertUTF8($row[6]))
        ->setCellValue('H2', convertUTF8($row[7]))
        ->setCellValue('I2', convertUTF8($row[8]))
        ->setCellValue('J2', convertUTF8($row[9]))
        ->setCellValue('K2', convertUTF8($row[10]))
        ->setCellValue('L2', convertUTF8($row[11]));

标红的部分循环中没有更改,所以会覆盖之前单元格的值。
不太明白你的意思,那我应该怎么改呢?

$i = 2;while($row = sqlsrv_fetch_array($query)) {		$objPHPExcel->getActiveSheet()        ->setCellValue('A'.$i, convertUTF8($row[0]))        ->setCellValue('B'.$i, convertUTF8($row[1]))        ->setCellValue('C'.$i, convertUTF8($row[2]))        ->setCellValue('D'.$i, convertUTF8($row[3]))        ->setCellValue('E'.$i, convertUTF8($row[4]))        ->setCellValue('F'.$i, convertUTF8($row[5]))        ->setCellValue('G'.$i, convertUTF8($row[6]))        ->setCellValue('H'.$i, convertUTF8($row[7]))        ->setCellValue('I'.$i, convertUTF8($row[8]))        ->setCellValue('J'.$i, convertUTF8($row[9]))        ->setCellValue('K'.$i, convertUTF8($row[10]))        ->setCellValue('L'.$i, convertUTF8($row[11]));		$i++;}

谢谢您!终于解决了导出问题。。。
但现在是自动保存的,有没有办法可以自己另存为呢?






$objPHPExcel>getActiveSheet()
        ->setCellValue()操作的结果是返回 PHPExcel_Worksheet 对象,把前面的echo去掉吧
去掉echo后,是不报错了,但while循环好像就失效了,导出的结果就只有一条数据。

        ->setCellValue(' A2', convertUTF8($row[0]))
        ->setCellValue(' B2', convertUTF8($row[1]))
        ->setCellValue(' C2', convertUTF8($row[2]))
        ->setCellValue('D2', convertUTF8($row[3]))
        ->setCellValue('E2', convertUTF8($row[4]))
        ->setCellValue('F2', convertUTF8($row[5]))
        ->setCellValue('G2', convertUTF8($row[6]))
        ->setCellValue('H2', convertUTF8($row[7]))
        ->setCellValue('I2', convertUTF8($row[8]))
        ->setCellValue('J2', convertUTF8($row[9]))
        ->setCellValue('K2', convertUTF8($row[10]))
        ->setCellValue('L2', convertUTF8($row[11]));

标红的部分循环中没有更改,所以会覆盖之前单元格的值。
不太明白你的意思,那我应该怎么改呢?

$i = 2;while($row = sqlsrv_fetch_array($query)) {		$objPHPExcel->getActiveSheet()        ->setCellValue('A'.$i, convertUTF8($row[0]))        ->setCellValue('B'.$i, convertUTF8($row[1]))        ->setCellValue('C'.$i, convertUTF8($row[2]))        ->setCellValue('D'.$i, convertUTF8($row[3]))        ->setCellValue('E'.$i, convertUTF8($row[4]))        ->setCellValue('F'.$i, convertUTF8($row[5]))        ->setCellValue('G'.$i, convertUTF8($row[6]))        ->setCellValue('H'.$i, convertUTF8($row[7]))        ->setCellValue('I'.$i, convertUTF8($row[8]))        ->setCellValue('J'.$i, convertUTF8($row[9]))        ->setCellValue('K'.$i, convertUTF8($row[10]))        ->setCellValue('L'.$i, convertUTF8($row[11]));		$i++;}

谢谢您!终于解决了导出问题。。。
但现在是自动保存的,有没有办法可以自己另存为呢?

不看文档啊?
最后的->save()

改为:
header("Content-Type: application/force-download");  
header("Content-Type: application/octet-stream");  
header("Content-Type: application/download");  
header('Content-Disposition:inline;filename="'.$FileName.'"');  
header("Content-Transfer-Encoding: binary");  
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");  
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");  
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");  
header("Pragma: no-cache");  
$objWriter->save('php://output');


其实是excel的功能强大..

$str="A1\tA2\tA3\n";$str.="B1\tB2\tB3\n";你把这些字符写入到文件中,后缀名改为.xls,excel直接就能读..




但实际上不是真正的xls文件。


嗯,确实不是,而且中文在国外看还有乱码的可能性,后来改成html的,不仅能解决乱码,而且样式也能控制,不得不说这excel太强大了

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn