我有一些用于将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;
?>
除此之外,如何为这张桌子制作一些边框?
答案 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);
?>