关于php excel的问题

fozzainter 2012-05-28 04:38:18
excel 模板
A B C D
1 姓名 性别 年龄 入学时间
2
3
..

sql 中有表people 字段 name/sex/age/time

能不能通过php语言 将sql表中的内容 根据我查询的结果 写入excel吗?

就像php中通过 表格$row[]输出结果类似的样子

需要学习哪些东西? 有没有一些比较详细的例子?
...全文
195 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
fozzainter 2012-06-01
  • 打赏
  • 举报
回复
1号顶起

争取今天解决

不能拖延后面的学习进度了
fozzainter 2012-05-31
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]

查看 excel 时改下编码。
[/Quote]
求得一方法,但是报错 麻烦看下
line 44就是fputcsv($fp,array_map('zero_change',$row));这句

<b>Warning</b>: array_map() [<a href='function.array-map'>function.array-map</a>]: The first argument 'zero_change' should be either NULL or a valid callback in <b>C:\AppServ\www\BE\demo2.php</b> on line <b>44</b><br />

<b>Warning</b>: fputcsv() expects parameter 2 to be array null given in <b>C:\AppServ\www\BE\demo2.php</b> on line <b>44</b><br />

while($row = mysql_fetch_array($result,MYSQL_ASSOC)){
fputcsv($fp,array_map('zero_change', $row));
echo "<br>";
}

function zero_change($v) {
if (($v{0} == '0') && is_numeric($v)) {
//$v = '="' . $v . '"'; //第一种方式
$v = "\t{$v}"; //第二种方式
}
return $v;
}
fozzainter 2012-05-30
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]

1:先把header部分注释掉,输出到页面上看是否正常。
2:在代码中把那些html标签删掉就是了。
[/Quote]
你好,

header注释掉后 就自动跳转到 demo2.php的地址上显示csv了 这样就没法保存文件了吧?

不用excel打开的话,没法验证 按我代码里的弄的时候保存后 用excel打开是乱码 但是用notepad++打开就是正常的中文

但是我想让他弹出 提示框 用excel打开 保存 取消 的那个
一起混吧 2012-05-30
  • 打赏
  • 举报
回复
1:先把header部分注释掉,输出到页面上看是否正常。
2:在代码中把那些html标签删掉就是了。
fozzainter 2012-05-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

http://hi.baidu.com/boneguan/blog/item/e2d712125f0a0159f819b8df.html
[/Quote]

帮我看下10楼 这个有什么问题?

我看中文乱码 说是跟BOM头有关
fozzainter 2012-05-30
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

顶,写csv格式的就行了, jordan的其实就是csv格式了。

PHP code
<?php
header("Content-type:application/vnd.ms-excel");
header("Content-Disposition:filename=test.xls");

$list = array (
array('aaa',……
[/Quote]

根据http://cclinux.blog.51cto.com/1215045/790883 成功输出数据

但是遇到了一些问题
我的search.php(action到demo2.php) 用于提交查询日期 demo2.php 用于输出csv的处理
1.我用notepad++看 格式为无BOM的UTF-8 点击查询按钮后 弹出打开,保存,取消的对话框, 选择 能够输出 但是中文乱码
转化为普通的UTF-8编码后,直接将结果显示在了页面demo2.php 但是中文能正常显示了 什么原因? 还是想保留那种弹出对话框的方式
2.打开的时候保留着那些html标签,如何去掉 谢谢

demo2.php的代码
<?php 
header('Content-Type:application/vnd.ms-excel;charset=utf-8');
header('Content-Disposition: attachment;filename="shuju.csv"');
header('Cache-Control:max-age=0');
date_default_timezone_set (PRC);

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
</head>

<body>
<?php
$date1=$_POST['date1'];
$date2=$_POST['date2'];
@$con = mysql_connect("localhost","root","mysql");
mysql_query('set names utf8');
if (!$con){
die("数据库链接失败:".mysql_error());
exit;
}
$data = mysql_select_db("BERecord",$con);

if(!$data){
echo mysql_error();
mysql_close($con); //关闭数据库链接
exit;
}
else{

//$sql = "select * from record";
$sql = "select * from record where searchtime between '$date1' and '$date2'";

$result = mysql_query($sql,$con);

$fp = fopen("php://output","a");
$head = array("1","2");
foreach($head as $i => $v){
// $head[$i] = iconv('utf-8','gb2312',$v);
$head[$i] = mb_convert_encoding("$v","UTF-8","gb2312");
}
fputcsv($fp,$head);

while($row = mysql_fetch_array($result,MYSQL_ASSOC)){
fputcsv($fp,$row);
echo "<br>";
}
mysql_close($con);
}
?>
</body>
</html>

回忆那么久 2012-05-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

这个不难,phpexcel 这个类就能帮你做到了。
官网上有例子
[/Quote]
有没有读取excel的详细介绍呢, 学习~
回忆那么久 2012-05-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

这个不难,phpexcel 这个类就能帮你做到了。
官网上有例子
[/Quote] 这个详细的很,那有没有介绍读取excel的详细方法呢,学习~
fozzainter 2012-05-30
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]

查看 excel 时改下编码。
[/Quote]

在demo2.php这个页面

我看别人直接改的 mysql_query('set names gb2312'); 其他的用来取值的页面都是utf8

这样改了之后 用excel打开的结果是中文的了

但是我在mysql的字段里有mencode这个 人员编号的设置

字段结果 mencode varchar(8) utf8_general_ci 否
我存入的第一个mencode是 000001

导入成csv后,这里的0就没有了 要是保留的话 应该如何处理? 谢谢
一起混吧 2012-05-30
  • 打赏
  • 举报
回复
查看 excel 时改下编码。
fozzainter 2012-05-30
  • 打赏
  • 举报
回复
再补充下

我的页面和Mysql数据库 都是统一的utf-8
fish871002 2012-05-29
  • 打赏
  • 举报
回复
你那个方式太麻烦了,而且维护起来难度是在太大了
推荐我常用的一个方法,用header实现

首先按照你需要导出的报表样式,新建一个excel,弄完之后保存,这个时候保存为xml 2003格式的,保存好之后,用记事本打开,之后像组织网页一样,把数据组织进去

然后用以下的代码:

header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=$filename");
echo $excel_content;

上面的 $excel_content 就是你组织好的一串数据
qq120848369 2012-05-29
  • 打赏
  • 举报
回复
顶,写csv格式的就行了, jordan的其实就是csv格式了。

<?php
header("Content-type:application/vnd.ms-excel");
header("Content-Disposition:filename=test.xls");

$list = array (
array('aaa', 'bbb', 'ccc', 'dddd'),
array('123', '456', '789'),
array('"aaa"', '"bbb"')
);

$fp = fopen("data.txt", 'w+');

foreach ($list as $fields) {
fputcsv($fp, $fields, "\t");
}

fseek($fp, 0, SEEK_SET);
echo fread($fp, filesize('data.txt'));

fclose($fp);
?>
一起混吧 2012-05-29
  • 打赏
  • 举报
回复
何必搞那么麻烦。用header设置头信息就能实现简单excel了。看我发的连接中的第一种方法。
fozzainter 2012-05-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

说明你的对象没有构造好。
[/Quote]

这个看错误提示 知道了是调用的成员函数没有对象


主要是通过上面的那个网址 我没有看出来这个成员函数应该是什么
qq120848369 2012-05-29
  • 打赏
  • 举报
回复
说明你的对象没有构造好。
fozzainter 2012-05-29
  • 打赏
  • 举报
回复
麻烦大家帮着看下

http://blog.csdn.net/wlwqw/article/details/4103994

我用的是这个例子改写的 但是提示

Fatal error: Call to a member function getActiveSheet() on a non-object in C:\AppServ\www\exceldemo.php on line 40


这个成员函数应该是什么内容? 谢谢
o_owangdong 2012-05-28
  • 打赏
  • 举报
回复
恩,下个phpexcel,里面例子也挺多的,看了不懂再问吧
床上等您 2012-05-28
  • 打赏
  • 举报
回复
这个不难,phpexcel 这个类就能帮你做到了。
官网上有例子

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧