国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

php生成csv文件并下載及問題總結

2024-05-04 21:49:54
字體:
來源:轉載
供稿:網友

csv是一種超級簡單的excel表格形式了,我們生成只要按指定格式然后生成.csv文件就可以了,雖然說簡單但使用中也會碰到不少的問題,下面小編來為各位總結一下。

例子,生成csv文件并下載

  1. //要生成csv文件的數組 
  2. $csvArr=array(); 
  3. $csvArr[]=array('用戶編號1','上班日期1','簽到時間1','簽退時間1'); 
  4. $csvArr[]=array('用戶編號2','上班日期2','簽到時間2','簽退時間2'
  5.  
  6. download_send_headers("data_export_" . date("Y-m-d") . ".csv"); 
  7. $head=array('用戶編號','上班日期','簽到時間','簽退時間'); 
  8.  
  9. echo array2csv($csvArr,$head); 
  10. unset($csvArr); 
  11. die(); 
  12.  
  13. function array2csv(array &$array,$head
  14.    if (count($array) == 0) { 
  15.      return null; 
  16.    } 
  17.    ob_start(); 
  18.    $df = fopen("php://output"'w'); 
  19.    if(!$head){ 
  20.         $head=array_keys(reset($array)); 
  21.    } 
  22.    fputcsv($df,$head); 
  23.    foreach ($array as $row) { 
  24.       fputcsv($df$row); 
  25.    } 
  26.    fclose($df); 
  27.    return ob_get_clean(); 
  28.  
  29. function download_send_headers($filename) { 
  30.     // disable caching 
  31.     $now = gmdate("D, d M Y H:i:s"); 
  32.     header("Expires: Tue, 03 Jul 2001 06:00:00 GMT"); 
  33.     header("Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate"); 
  34.     header("Last-Modified: {$now} GMT"); 
  35. //Vevb.com 
  36.     // force download   
  37.     header("Content-Type: application/force-download"); 
  38.     header("Content-Type: application/octet-stream"); 
  39.     header("Content-Type: application/download"); 
  40.  
  41.     // disposition / encoding on response body 
  42.     header("Content-Disposition: attachment;filename={$filename}"); 
  43.     header("Content-Transfer-Encoding: binary"); 

php array生成csv文件

  1. <?php 
  2. $data = array
  3.         array'row_1_col_1''row_1_col_2''row_1_col_3' ), 
  4.         array'row_2_col_1''row_2_col_2''row_2_col_3' ), 
  5.         array'row_3_col_1''row_3_col_2''row_3_col_3' ), 
  6.     ); 
  7. $filename = "example"
  8.  
  9.     header("Content-type: text/csv"); 
  10.     header("Content-Disposition: attachment; filename={$filename}.csv"); 
  11.     header("Pragma: no-cache"); 
  12.     header("Expires: 0"); 
  13.  
  14. outputCSV($data); 
  15.  
  16. function outputCSV($data) { 
  17.         $outputBuffer = fopen("php://output"'w'); 
  18.         foreach($data as $val) { 
  19.         foreach ($val as $key => $val2) { 
  20.          $val[$key] = iconv('utf-8''gbk'$val2); 
  21. // CSV的Excel支持GBK編碼,一定要轉換,否則亂碼 
  22.          } 
  23.             fputcsv($outputBuffer$val); 
  24.         } 
  25.         fclose($outputBuffer); 
  26.     } 
  27.  
  28. ?> 

解決 fgetcsv函數在php5.2.8 中的bug

環境linux

問題解析出來的數據不完整,有為空的字段

網上查了下說是在php5.2.8 中存在bug

解決辦法是使用自定義函數

  1. function __fgetcsv(& $handle$length = null, $d = ','$e = '"') { 
  2.      $d = preg_quote($d); 
  3.      $e = preg_quote($e); 
  4.      $_line = ""
  5.      $eof=false; 
  6.      while ($eof != true) { 
  7.          $_line .= (emptyempty ($length) ? fgets($handle) : fgets($handle$length)); 
  8.          $itemcnt = preg_match_all('/' . $e . '/'$_line$dummy); 
  9.          if ($itemcnt % 2 == 0) 
  10.              $eof = true; 
  11.      } 
  12.      $_csv_line = preg_replace('/(?: |[ ])?$/'$d, trim($_line)); 
  13.      $_csv_pattern = '/(' . $e . '[^' . $e . ']*(?:' . $e . $e . '[^' . $e . ']*)*' . $e . '|[^' . $d . ']*)' . $d . '/'
  14.      preg_match_all($_csv_pattern$_csv_line$_csv_matches); 
  15.      $_csv_data = $_csv_matches[1]; 
  16.      for ($_csv_i = 0; $_csv_i < count($_csv_data); $_csv_i++) { 
  17.          $_csv_data[$_csv_i] = preg_replace('/^' . $e . '(.*)' . $e . '$/s''$1' , $_csv_data[$_csv_i]); 
  18.          $_csv_data[$_csv_i] = str_replace($e . $e$e$_csv_data[$_csv_i]); 
  19.      } 
  20.      return emptyempty ($_line) ? false : $_csv_data

excel無法正確讀取長度超過32K的CSV域問題

php 導出csv文件用excel打開后,產品表述字段分兩行顯示。

查看了下這個字段發現這個字段超過32K的字符,excel會把字符串打斷成兩行,如果小于32K,顯示正常。

這是EXCEL的限制,目前還沒有找到解決辦法。

excel一個單元格最多是32767個字符。

解決PHP生成UTF-8編碼的CSV文件用Excel打開亂碼的問題

PHP生成UTF-8編碼的CSV文件用Excel打開中文顯示亂碼,是由于輸出的CSV文件中沒有BOM。

  1. <?php 
  2. $now = gmdate("D, d M Y H:i:s"); 
  3. header("Expires: Tue, 03 Jul 2001 06:00:00 GMT"); 
  4. header("Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate"); 
  5. header("Last-Modified: {$now} GMT"); 
  6.  
  7. // force download 
  8. header("Content-Type: application/force-download"); 
  9. header("Content-Type: application/octet-stream"); 
  10. header("Content-Type: application/download"); 
  11.  
  12. // disposition / encoding on response body 
  13. header("Content-Disposition: attachment;filename={$filename}"); 
  14. header("Content-Transfer-Encoding: binary"); 
  15. $items_data=array
  16. '0'=>array('title'=>'test test test1'), 
  17. '1'=>array('title'=>'test test test2'), 
  18. '2'=>array('title'=>'test test test3'
  19. print(chr(0xEF).chr(0xBB).chr(0xBF)); 
  20. //設置utf-8 + bom ,處理漢字顯示的亂碼 
  21. echo array2csv($items_data); 
  22.  
  23. function array2csv(array &$array
  24.    if (count($array) == 0) { 
  25.      return null; 
  26.    } 
  27.    ob_start(); 
  28.    $df = fopen("php://output"'w'); 
  29.    fputcsv($dfarray_keys(reset($array))); 
  30.    foreach ($array as $row) { 
  31.       fputcsv($df$row); 
  32.    } 
  33.    fclose($df); 
  34.    return ob_get_clean(); 
  35. ?> 

導出csv文件數字會自動變科學計數法的解決方法

用程序導出的csv文件,當字段中有比較長的數字字段存在時,在用excel軟甲查看csv文件時就會變成科學技術法的表現形式。

其實這個問題跟用什么語言導出csv文件沒有關系。Excel顯示數字時,如果數字大于12位,它會自動轉化為科學計數法;如果數字大于15位,它不僅用于科學技術費表示,還會只保留高15位,其他位都變0。

解決這個問題

只要把數字字段后面加上顯示上看不見的字符即可,字符串結尾加上制表符"/t".

php 程序可以這樣判斷,注意一定是"/t",不是'/t'.

  1. is_numeric($val)?$val."/t":$val

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武安市| 资溪县| 博兴县| 克什克腾旗| 星子县| 嫩江县| 阿拉善盟| 阿瓦提县| 通许县| 环江| 贵溪市| 屯门区| 新龙县| 南宫市| 五台县| 怀仁县| 仙桃市| 绥芬河市| 贵定县| 磴口县| 开封市| 永川市| 铜陵市| 平度市| 彭州市| 临澧县| 锦屏县| 张家川| 彰化县| 太仆寺旗| 临汾市| 乌鲁木齐县| 菏泽市| 清河县| 和政县| 阳信县| 布拖县| 皮山县| 集安市| 福建省| 洪江市|