<?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都给去掉了,要如何解决,谢谢

解决方案 »

  1.   

    csv文件,不含排版信息。所以要“每列设成我想要的宽度”是不大可能的。
    或许你可用空格来充填宽度把前面的0都给去掉了 的是 excel,他把纯数字串解释成了数值
    通常可在前面加单撇号
      

  2.   


    谢谢解惑。还有些疑惑那是不是,
    如果想满足条件一,那就只有利用PHPEXCEL这样的模板,才能设置宽度?条件二的话,比如学号这样的,都是利用php页面,插入数据库信息这样的,然后这里是从数据库直接读取出数据的,这样,是不是不太好办啊?
      

  3.   

    不要用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>
      

  4.   

    感谢回复,
    这样是根据行的内容,自动扩宽的,
    有一些非常详细的内容,会占据很大的版面,这里可不可以用<td>标签的style属性设置宽度?
    还有就是前面的0 应该不受影响了吧?谢谢
      

  5.   

    刚才做了一下简单的验证<?php
    header("Content-Type: application/vnd.ms-excel");
    header("Content-Disposition: attachment; filename=test.xls;");
    ?>
    <?php
    $con = mysql_connect("localhost","root","mysql") or die("无法连接到数据库");
    mysql_select_db('berecord');
    mysql_query('set names utf8');
    $sql = "select * from record where  searchtime between '$date1' and '$date2' ";  
    //$row = mysql_fetch_array($result,MYSQL_ASSOC);
    $result=mysql_query($sql ,$con);
    $row=mysql_fetch_assoc($result) ;
    ?>
    <table border="1">
    <tr>
    <td align="right" style="width:20px;">年</td>
    <td align="right" style="width:10px;">月</td>
    <td align="right" style="width:10px;">日</td>
    <td align="right" style="width:10px;">周</td>
    <td align="right" style="width:20px;">学号</td>
    </tr>
    <tr>
    <td><?php echo $row['nian']; ?></td>
    <td><?php echo $row['yue']; ?></td>
    <td><?php echo $row['ri']; ?></td>
    <td><?php echo $row['week']; ?></td>
    <td><?php echo $row['number']; ?></td>
    宽度可以利用style去改变
    但是有两个问题
    1.得到的学号还是把前面的0去掉了,mysql里的整理是utf8_general_ci
    2.就是我这样$row得到的只有第一行结果,应该如何处理。希望帮助解答以上问题,谢谢
      

  6.   

    还剩下一个问题学号,前的0,如何进行保留都是根据index.php 输入日期范围
    然后提交表单到excel.php 
    数据都是从数据库中读取的只输出一行,是我犯了严重的错误,忘了while循环了,太2了把直接手写输出的部分,设置为一个<table>
    把$row[]输出的部分,设置为一个<table>   否则加入while循环的话,$row[]输出不按格式在两表之间加入,<?php
    while($row=mysql_fetch_assoc($result)){
    ?>
    最后
    <?php
    }
    ?>还有就是学号那个问题,如何解决?
      

  7.   

    给学号td加样式:<td style='vnd.ms-excel.numberformat:@'>******</td> 可解决少0问题