将MYSQL表导出为ex​​cel

时间:2010-11-27 07:48:37

标签: php mysql export-to-excel

我有一些用于将MYSQL表导出为Excel格式的PHP脚本,但是在导出表后我遇到了一些问题。从db获取的数据只显示一行。

以下脚本:

$dbc=mysql_connect(_SRV,_ACCID,_PWD) or die(_ERROR15.": ".mysql_error());
$db=mysql_select_db("qdbase",$dbc) or die(_ERROR17.": ".mysql_error());

$sQuery = "SELECT id, Line, Model,Lot_no,
                  COUNT( Serial_number ) AS Qty,
                  SUM(S), SUM(A), SUM(B), SUM(C),
                  (SUM(S) + SUM(A) + SUM(B)*0.4 + SUM(C)*0.1) / COUNT(Serial_number) AS QP,
                  ROUND((SUM(S) + SUM(A) + SUM(B)*0.4 + SUM(C)*0.1) / COUNT(Serial_number)*1000,2) AS PPM
            FROM  `inspection_report`";

$rResult = mysql_query( $sQuery) or die();
$count = mysql_num_fields($rResult);

// fetch table header
$header = '';
for ($i = 0; $i < $count; $i++){
       $header .= mysql_field_name($rResult, $i)."\t";
       }
// fetch data each row, store on tabular row data
while($row = mysql_fetch_row($rResult)){
       $line = '';
       foreach($row as $value){
              if(!isset($value) || $value == ""){
                     $value = "\t";
              }else{
                     $value = str_replace('"', '""', $value);
                     $value = '"' . $value . '"' . "\t";
                     }
              $line .= $value;
              }
       $data .= trim($line)."\n";
       $data = str_replace("\r", "", $data);

if ($data == "") {
       $data = "\nno matching records found\n";
       }

header("Content-type: application/vnd.ms-excel; name='excel'");
header("Content-Disposition: attachment; filename=exportfile.xls");
header("Pragma: no-cache");
header("Expires: 0");

// output data
echo $header."\n".$data;
?>

除此之外,如何为这张桌子制作一些边框?

3 个答案:

答案 0 :(得分:5)

  

如果我想这样做:echo&#34;&#34 ;;哪个是正确的地方   说它不能使我的脚本成为   错误?

如果你想把它做成一个html表格,那么我会输出你常常正确的表格...例如你可能会这样做:

$rResult = mysql_query( $sQuery) or die();
$count = mysql_num_fields($rResult);

$html = '<table border="1"><thead><tr>%s</tr><thead><tbody>%s</tbody></table>';
$thead = '';
$tbody = '';
$line = '<tr>%s</tr>';
for ($i = 0; $i < $count; $i++){      
  $thead .= sprintf('<th>%s</th>',mysql_field_name($rResult, $i));
}


while(false !== ($row = mysql_fetch_row($rResult))){
  $trow = '';

  foreach($row as $value){
   $trow .= sprintf('<td>%s</td>', $value);
  }

  $tbody .= sprintf($line, $trow);

}


header("Content-type: application/vnd.ms-excel; name='excel'");
header("Content-Disposition: attachment; filename=exportfile.xls");
header("Pragma: no-cache");
header("Expires: 0");

print sprintf($html, $thead, $tbody);
exit;

您只获得一行,因为您使用的是没有GROUP BY子句的聚合函数。尝试在与这些&#34;条目相关联的内容上添加GROUP BY&#34;到Lot_no之类的特定群组,或者您尝试报告的任何内容。

就边界而言,您无法使用CSV执行此操作,尽管Excel是readbale,但实际上并不是Excel格式文件,其中包含格式化边框等所有附加内容。要使用格式化等内容,您需要输出本机Excel或可以加载到Excel中的html表。如果您需要,请查看phpexcel

答案 1 :(得分:1)

你实际上并没有从表中提取任何其他内容。您只有一个查询,它正在提取标题信息。运行像“select * from tableName”这样的sql语句来获取其余部分,然后使用该查询执行while和for循环。 PHP /浏览器通常不能很好地运行编程语言,XML和CSV之外的项目。我会更倾向于其中任何一个。 XML可以被较新版本的excel读取(并且可以在Internet Explorer中以XML格式打开),而csv则被更广泛地用于在不同类型的数据库/电子表格之间共享。有关XML输出goto http://www.ibm.com/developerworks/opensource/library/os-phpexcel/index.html的示例,对于CSV输出,您必须在数组上使用fputcsv()函数。例如:

 $query = mysql_fetch_row($rResult);//the query of the table
             // use 'select * from table' to list everything
 $xls = fopen('file.csv', 'a'); //opens document for writing and attempts to create if file does not exist
 foreach ($list as $fields) {
      fputcsv($fp, $fields);
 }
 fclose($xls); //always close the file when done

两者都是肮脏的出口方式,但却有效。

答案 2 :(得分:1)

试试这段代码对我有用:

<?php
$db_name     = "db_name";
$db_password = "pass";
$db_link     = mysql_connect("localhost", "root", $db_password);
mysql_select_db($db_name, $db_link);
mysql_query("SET NAMES UTF8");
$table = "table_name";
function assoc_query_2D($sql, $id_name = false){
  $result = mysql_query($sql);
  $arr = array();
  $row = array();
  if($result){
    if($id_name == false){
      while($row = mysql_fetch_assoc($result))
        $arr[] = $row;
    }else{
      while($row = mysql_fetch_assoc($result)){
        $id = $row['id'];
        $arr[$id] = $row;
      }
    }
  }else return 0;

  return $arr;
}

function query_whole_table($table, $value = '*'){
    $sql = "SELECT $value FROM $table";
  return assoc_query_2D($sql);
}

$export_str = "";
$result = query_whole_table($table);

foreach($result as $record){
  $export_str .= implode(";",$record) . "\n";
}
// add time to fileName
$date = time(); 
file_put_contents($date.'_'.$table."_export.csv", $export_str);
?>