日期:2014-05-17  浏览次数:20496 次

php输出excel格式的问题
PHP code
<?php
@$con = mysql_connect("localhost","root","mysql");
mysql_query('set names gb2312');
if (!$con){
    die("数据库链接失败:".mysql_error());
    exit;
}
$data = mysql_select_db("berecord",$con);

//include('conn.php');
//mysql_query('set names gb2312');
if(!$data){
    echo mysql_error();
    mysql_close($con); //关闭数据库链接
    exit;
}

else if($name=="" && $carnumber=="" && $do=="" &&  $usercode==""){
    //当四项数据全为空时
$sql = "select * from record;  
$result = mysql_query($sql,$con);

$fp = fopen("php://output","a");

$head = array("年","月","日","周","姓名","年龄","班级","学号","上/下学时间","学习记录","体育成绩","学习汇报","学习总结")";
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,array_map('zero_change',$row));
    fputcsv($fp,$row);
    //echo "<br>"; 没有必要 在$row输出时就实现了
}


mysql_close($con);
}
?>



我现在是这样导出csv文件的,这里导出的话是13列,但是每列的宽度都是一样的,这里我想将每列设成我想要的宽度,应该怎么调整?
还有就是学好的问题,比如我在数据库中的学号是0015132的话,mysql里的整理是utf8_general_ci,导出到csv的话,就把前面的0都给去掉了,要如何解决,谢谢

------解决方案--------------------
csv文件,不含排版信息。所以要“每列设成我想要的宽度”是不大可能的。
或许你可用空格来充填宽度

把前面的0都给去掉了 的是 excel,他把纯数字串解释成了数值
通常可在前面加单撇号
------解决方案--------------------
不要用csv格式,用Excel的XML格式

<?php
header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=test.xls;");
?>
<table border="1">
<tr><td align="right">100</td><td>This is an example</td></tr>
<tr><td align="right">50</td><td>Do you understand?</td></tr>
</table>
------解决方案--------------------
给学号td加样式:<td style='vnd.ms-excel.numberformat:@'>******</td> 可解决少0问题