求sp转换“一个将表数据导出execl格式的功能代码”附代码。

#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