求sp转换“一个将表数据导出execl格式的功能代码”附代码。
发布于:2022-01-17 09:50:54
#1 小双
$DB_Server = "localhost";
$DB_Username = "root";
$DB_Password = "root";
$DB_DBName = "test";
$DB_TBLName = "news";
$ntime = date('Ymd ',time());
$nowtime = (int)$ntime;
//echo $nowtime;
$Connect = @mysql_connect($DB_Server, $DB_Username, $DB_Password)
or die("Couldn't connect.");
$Db = @mysql_select_db($DB_DBName, $Connect)
or die("Couldn't select database.");
mysql_query("set names gbk");
$file_type = "vnd.ms-excel";
$file_ending = "xls";
header("Content-Type: application/$file_type");
header("Content-Disposition: attachment; filename=$DB_TBLName.$file_ending");
header("Pragma: no-cache");
header("Expires: 0");
date_default_timezone_set("Etc/GMT-8");//PHP5.1默认为格林威尔时间..时差8小时..此处设置为北京时间
$now_date = date('Y-m-d H:i');
$title = "数据库名:$DB_DBName,数据表:$DB_TBLName,备份日期:$now_date";
$sql = "Select * from $DB_TBLName where orderid like '%".$nowtime."%'";//查找当天日期的数据
$ALT_Db = @mysql_select_db($DB_DBName, $Connect)
or die("Couldn't select database");
$result = @mysql_query($sql,$Connect)
or die(mysql_error());
//echo("$title\n");
$sep = "\t"; //EXCEL中以\t分割,以\n换行
for ($i = 1; $i < mysql_num_fields($result)-1; $i++) { //去掉ID列和dealtime列
//echo mysql_field_name($result,$i) . "\t";
}
//print("\n");
$i = 0;
while($row = mysql_fetch_row($result))
{
$schema_insert = "";
for($j=1; $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 .= "\t";
//print(trim($schema_insert));
//print "\n";
$content = $schema_insert.chr(13).chr(10);
$fileopen = fopen("database.txt","a") or exit("error");
fwrite($fileopen,$content);
fclose($fileopen);
$i++;
}
return (true);
//导出数据库完成后返回上一页.并提示导出成功.
echo "";
求高人,帮我用sp的class来转换一下上面的代码,写出controller和template里面的代码,上面是一个导出表数据为execl格式的功能代码。先感谢下能热情帮助我的人!呵呵!如果能帮到我就能帮到我更详细的了解sp中做如何做插件。
2010-09-21 11:40:27
#2 小双
template里就不需要了,就一个连接!呵呵!
2010-09-21 11:56:49
#3 jake
主要是链接数据库这些都可以改成model,然后findSql就可以。循环用foreach
header保留,循环内容基本保留。
2010-09-21 12:38:01
#4 homexigua
我是这样弄的,不知道合不合你意
function query_3(){
header('Content-type: application/vnd.ms-excel');
header('Content-Disposition: filename=课程表.xls');
$this->menuname = '教室使用情况查询';
$db = spClass('lib_course');
$sql = "select * from c_course where 1=1";
$this->list = $db->findSql($sql);
}
模版页
课程名称 |
教师 |
星期 |
节次 |
学时 |
教室 |
周次 |
上课班级 |
学生人数 |
|
|
|
|
|
|
|
|
|
2010-09-21 14:41:06
#5 小双
晕,上楼的兄弟理解错了,那我知道,都弄了5、6个网站了,关键是jake说的,其实我是在尝试着,就是不知道什么时候可以搞出来。。。。。。,另外想知道规范的步骤,以后好按部就班!
2010-09-21 15:18:11
#6 小双
这是我改了以后的,老大在看下,帮忙优化下!
class export extends spController
{
public function index(){
$DB_TBLName = "news"; //数据表
$ntime = date('Ymd ',time());
$nowtime = (int)$ntime;
$gborder = spClass("lib_news");
mysql_query("set names gbk");
$file_type = "vnd.ms-excel";
$file_ending = "xls";
header("Content-Type: application/$file_type");
header("Content-Disposition: attachment; filename=$DB_TBLName.$file_ending");
header("Pragma: no-cache");
header("Expires: 0");
$now_date = date("Y-m-d H:i");
$title = "订单数据表:$DB_TBLName,备份日期:$now_date";
$sql = "Select * from news";//查找当天日期的数据
$query_sql = mysql_query($sql);
$result = $gborder->findAll();
echo("$title\n");
$sep = "\t";
//输出字段名
for ($i = 0; $i < mysql_num_fields($query_sql); $i++) {
echo mysql_field_name($query_sql,$i) . "\t";
}
print("\n");
//输出表数据
$i = 0;
while($row = mysql_fetch_row($query_sql))
{
$schema_insert = "";
for($j=0; $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 .= "\t";
print(trim($schema_insert));
print "\n";
$i++;
}
return (true);
}
}
2010-09-21 16:22:23
#7 jake
如果是想做成通用的excel导出类,可以制作一个“输入:一个数组”,“输出:直接生成excel或返回excel数据”的函数或者类就可以了。
而数据读取部分,就不是通用的部分。而且“输入:数组”这样的模式,就可以通用地配合任何的数据。
2010-09-22 22:40:01