Excel顯示數字時,如果數字大於12位,它會自動轉化為科學計數法;如果數字大於15位,它不僅用於科學技術費表示,還會只保留高15位,其他位都變0。
Excel打開csv文件時,只要字段值都是數字,它就認為該字段類型是數值。但我們存放在數據庫中的純數字char有可能會超過15位,這樣導出csv文件后,用excel打開看到的字段值就不對了。
網上的解決方法
1、將單元格格式設為文本,但行不通,還是會以科學計數法顯示
2、將單元格格式設為特殊,類型郵政編碼,這樣不會以科學計數法顯示,但是數字超過15位時低位還是會變0;
3、新建一個新工作表,用數據導入自文本文件功能,將csv導入到工作表中(分隔符逗號,每一列格式都設為文本),這樣可以正確顯示,但是每次導出新csv文件都要這么做比較麻煩,而且我們也不可能讓客戶去進行這個操作。
我在mysql導出csv文件時,設置字段值用制 表符\t括起來(outfile 'e:\\test.csv' fields terminated by ',' optionally enclosed by '\t' lines terminated by '\r\n'),這樣excel打開csv文件時,會將數值用文本格式顯示,而不是數值格式,因為我們的數值前后都有制表符\t,而不是單純的數字。這樣 打開導出的csv文件就可以正常顯示了。
$str = "訂單號,消費場館,卡號,流水類型,時間\n"; $str = iconv('utf-8', 'gb2312', $str); foreach ($rs['list'] as $key=>$value) { $record_order_no = iconv('utf-8', 'gb2312', $value['record_order_no']); $stadium_name = iconv('utf-8', 'gb2312', $value['stadium_name']); //中文轉碼 $card_num = iconv('utf-8', 'gb2312', $value['card_num']); //中文轉碼 $record_money_type_str = iconv('utf-8', 'gb2312//IGNORE',$value['record_money_type_str']); $c_time = iconv('utf-8', 'gb2312', $value['c_time']); $str .= "\t" . $record_order_no . "\t" . "," .$stadium_name . "," . $card_num . "," . $record_money_type_str . "," . $c_time . "\n"; //用引文逗號分開 } $name = '/Api/memberRecord/' . "會員卡金額變動記錄" . date("Ymd", $start_date) . "-" . date("Ymd", $end_date); $url = Export::p($str, $name); $download['url'] = 'Data'.$name.'.csv';