GVKun编程网logo

如何在PHP中输出可以正确读取Excel的UTF-8 CSV?(php读取excel内容)

8

在本文中,我们将为您详细介绍如何在PHP中输出可以正确读取Excel的UTF-8CSV?的相关知识,并且为您解答关于php读取excel内容的疑问,此外,我们还会提供一些关于excel2007官方下载

在本文中,我们将为您详细介绍如何在PHP中输出可以正确读取Excel的UTF-8 CSV?的相关知识,并且为您解答关于php读取excel内容的疑问,此外,我们还会提供一些关于excel 2007官方下载 免费完整版 PHPExcel读取Excel文件的实现代码、php ExcelReader 读取Excel类_PHP教程、php – 无法正确读取csv(制表符分隔)、phpExcel 准确读取excel表格时间的有用信息。

本文目录一览:

如何在PHP中输出可以正确读取Excel的UTF-8 CSV?(php读取excel内容)

如何在PHP中输出可以正确读取Excel的UTF-8 CSV?(php读取excel内容)

我有一个非常简单的东西,它只能以CSV格式输出一些内容,但是必须是UTF-8。我在TextEdit或TextMate或Dreamweaver中打开此文件,它正确显示了UTF-8字符,但是,如果在Excel中打开它,则是在做这种愚蠢的事情。这是我文档开头的内容:

header("content-type:application/csv;charset=UTF-8");header("Content-Disposition:attachment;filename=\"CHS.csv\"");

除了Excel(Mac,2008)不想正确导入之外,这一切似乎都具有预期的效果。Excel中没有“以UTF-8格式打开”之类的选项,所以……我有点烦。

尽管很多人都遇到相同的问题,但我似乎在任何地方都找不到针对此问题的明确解决方案。我最常看到的是包含BOM,但我无法确切地知道如何做到这一点。正如您在上面看到的那样,我只是在echo读取这些数据,没有写入任何文件。如果需要的话,我可以这样做,我只是没有,因为在这一点上似乎并不需要。有什么帮助吗?

更新:我尝试回显BOM表,因为echo pack("CCC", 0xef, 0xbb,0xbf);它是从试图检测BOM的站点提取的。但是,Excel在导入时只是将这三个字符附加到第一个单元格,并且仍然弄乱了特殊字符。

答案1

小编典典

引用Microsoft支持工程师的话

Excel for Mac当前不支持UTF-8

2017年更新 :适用于 Office 2016 之前的Mac的所有Microsoft Excel版本。较新版本(来自Office
365)现在支持UTF-8。

为了输出Windows和OS X上的Excel都能够成功读取的UTF-8内容,您需要做两件事:

  1. 确保将您的UTF-8 CSV文本转换为UTF-16LE

    mb_convert_encoding($csv, ''UTF-16LE'', ''UTF-8'');
  2. 确保将UTF-16LE字节顺序标记添加到文件的开头

    chr(255) . chr(254)

仅在OS X(而 不是
Windows)上的Excel上出现的下一个问题是在查看带有逗号分隔值的CSV文件时,Excel将仅用一行显示行,并且所有文本以及第一行的逗号都将呈现。

避免这种情况的方法是使用制表符作为分隔值。

我从PHP注释中使用了此功能(使用制表符“
\ t”而不是逗号),并且它在OS X和Windows Excel上都可以完美运行。

请注意,要解决将空列作为行尾的问题,我确实不得不更改了以下代码行:

    $field_cnt = count($fields);

    $field_cnt = count($fields)-1;

就像该页面上的其他一些评论所述,其他电子表格应用程序(如OpenOffice Calc,Apple自己的Numbers和Google
Doc的电子表格)对带有逗号的UTF-8文件没有问题。

excel 2007官方下载 免费完整版 PHPExcel读取Excel文件的实现代码

excel 2007官方下载 免费完整版 PHPExcel读取Excel文件的实现代码

涉及知识点:
php对excel文件进行循环读取
php对字符进行ascii编码转化,将字符转为十进制数
php对excel日期格式读取,并进行显示转化
php对汉字乱码进行编码转化

复制代码 代码如下:


require_once ''PHPExcel.php'';
/**对excel里的日期进行格式转化*/
function GetData($val){
$jd = GregorianToJD(1, 1, 1970);
$gregorian = JDToGregorian($jd+intval($val)-25569);
return $gregorian;/**显示格式为 “月/日/年” */
}
$filePath = ''test.xlsx'';
$PHPExcel = new PHPExcel();
/**默认用excel2007读取excel,若格式不对,则用之前的版本进行读取*/
$PHPReader = new PHPExcel_Reader_Excel2007();
if(!$PHPReader->canRead($filePath)){
$PHPReader = new PHPExcel_Reader_Excel5();
if(!$PHPReader->canRead($filePath)){
echo ''no Excel'';
return ;
}
}
$PHPExcel = $PHPReader->load($filePath);
/**读取excel文件中的第一个工作表*/
$currentSheet = $PHPExcel->getSheet(0);
/**取得最大的列号*/
$allColumn = $currentSheet->getHighestColumn();
/**取得一共有多少行*/
$allRow = $currentSheet->getHighestRow();
/**从第二行开始输出,因为excel表中第一行为列名*/
for($currentRow = 2;$currentRow /**从第A列开始输出*/
for($currentColumn= ''A'';$currentColumn$val = $currentSheet->getCellByColumnAndRow(ord($currentColumn) - 65,$currentRow)->getValue();/**ord()将字符转为十进制数*/
if($currentColumn == ''A'')
{
echo GetData($val)."\t";
}else{
//echo $val;
/**如果输出汉字有乱码,则需将输出内容用iconv函数进行编码转换,如下将gb2312编码转为utf-8编码输出*/
echo iconv(''utf-8'',''gb2312'', $val)."\t";
}
}
echo "";
}
echo "\n";
?>

以上就介绍了excel 2007官方下载 免费完整版 PHPExcel读取Excel文件的实现代码,包括了excel 2007官方下载 免费完整版方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

php ExcelReader 读取Excel类_PHP教程

php ExcelReader 读取Excel类_PHP教程

php ExcelReader 读取Excel类 /* 这是一款开源的php代码,ExcelReader是专业地excel表进行读写操作的哦,下面我们来看一款ExcelReader读取bKjia.c0m.xls工作表实例吧。

php教程 excelreader  读取excel类
 /*
 这是一款开源的php代码,excelreader是专业地excel表进行读写操作的哦,下面我们来看一款excelreader读取bKjia.c0m.xls工作表实例吧。
 */

$allow_url_override = 1; // set to 0 to not allow changed via post or get if(!$allow_url_override || !isset($file_to_include)) {  $file_to_include = "bKjia.c0m.xls"; } if(!$allow_url_override || !isset($max_rows)) {  $max_rows = 0; //use 0 for no max } if(!$allow_url_override || !isset($max_cols)) {  $max_cols = 5; //use 0 for no max } if(!$allow_url_override || !isset($debug)) {  $debug = 0;  //1 for on 0 for off } if(!$allow_url_override || !isset($force_nobr)) {  $force_nobr = 1;  //force the info in cells not to wrap unless stated explicitly (newline) } require_once ''www.bKjia.c0m/reader.php''; $data = new spreadsheet_excel_reader(); $data->setoutputencoding(''cpa25a''); $data->read($file_to_include); error_reporting(e_all ^ e_notice); echo " .table_data {  border-style:ridge;  border-width:1; } .tab_base {  background:#c5d0dd;  font-weight:bold;  border-style:ridge;  border-width:1;  cursor:pointer; } .table_sub_heading {  background:#cccccc;  font-weight:bold;  border-style:ridge;  border-width:1; } .table_body {  background:#f0f0f0;  font-wieght:normal;  font-size:12;  font-family:sans-serif;  border-style:ridge;  border-width:1;  border-spacing: 0px;  border-collaps教程e: collapse; } .tab_loaded {  background:#222222;  color:white;  font-weight:bold;  border-style:groove;  border-width:1;  cursor:pointer; } "; function make_alpha_from_numbers($number) {  $numeric = "abcdefghijklmnopqrstuvwxyz";  if($number=1 && $data->sheets[$sheet][''cellsinfo''][$row][$col][''rowspan''] >=1)    {     $this_cell_colspan = " colspan=" . $data->sheets[$sheet][''cellsinfo''][$row][$col][''colspan''];     $this_cell_rowspan = " rowspan=" . $data->sheets[$sheet][''cellsinfo''][$row][$col][''rowspan''];     for($i=1;$isheets[$sheet][''cellsinfo''][$row][$col][''colspan''];$i++)     {      $data->sheets[$sheet][''cellsinfo''][$row][$col+$i][''dontprint'']=1;     }     for($i=1;$isheets[$sheet][''cellsinfo''][$row][$col][''rowspan''];$i++)     {      for($j=0;$jsheets[$sheet][''cellsinfo''][$row][$col][''colspan''];$j++)      {       $data->sheets[$sheet][''cellsinfo''][$row+$i][$col+$j][''dontprint'']=1;      }     }    }    else if($data->sheets[$sheet][''cellsinfo''][$row][$col][''colspan''] >=1)    {     $this_cell_colspan = " colspan=" . $data->sheets[$sheet][''cellsinfo''][$row][$col][''colspan''];     $this_cell_rowspan = "";     for($i=1;$isheets[$sheet][''cellsinfo''][$row][$col][''colspan''];$i++)     {      $data->sheets[$sheet][''cellsinfo''][$row][$col+$i][''dontprint'']=1;     }    }    else if($data->sheets[$sheet][''cellsinfo''][$row][$col][''rowspan''] >=1)    {     $this_cell_colspan = "";     $this_cell_rowspan = " rowspan=" . $data->sheets[$sheet][''cellsinfo''][$row][$col][''rowspan''];     for($i=1;$isheets[$sheet][''cellsinfo''][$row][$col][''rowspan''];$i++)     {      $data->sheets[$sheet][''cellsinfo''][$row+$i][$col][''dontprint'']=1;     }    }    else    {     $this_cell_colspan = "";     $this_cell_rowspan = "";    }    if(!($data->sheets[$sheet][''cellsinfo''][$row][$col][''dontprint'']))    {     $table_output[$sheet] .= " ";     if($force_nobr)     {      $table_output[$sheet] .= "";     }     $table_output[$sheet] .= nl2br(htmlentities($data->sheets[$sheet][''cells''][$row][$col]));     if($force_nobr)     {      $table_output[$sheet] .= "";     }     $table_output[$sheet] .= "";    }   }   $table_output[$sheet] .= "";  }  $table_output[$sheet] .= "";  $table_output[$sheet] = str_replace("n","",$table_output[$sheet]);  $table_output[$sheet] = str_replace("r","",$table_output[$sheet]);  $table_output[$sheet] = str_replace("t"," ",$table_output[$sheet]);  if($debug)  {   $debug_output = print_r($data->sheets[$sheet],true);   $debug_output = str_replace("n","\n",$debug_output);   $debug_output = str_replace("r","\r",$debug_output);   $table_output[$sheet] .= "$debug_output";  }  echo "sheet_html[$sheet] = "$table_output[$sheet]";n"; } echo " function change_tabs(sheet) {  //alert(''sheet_tab_'' + sheet);  for(i=0;i

// excelreader这个类你可以到官网去下载哦。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/630828.htmlTechArticlephp ExcelReader 读取Excel类 /* 这是一款开源的php代码,ExcelReader是专业地excel表进行读写操作的哦,下面我们来看一款ExcelReader读取111cn.net.xls工作...

php – 无法正确读取csv(制表符分隔)

php – 无法正确读取csv(制表符分隔)

我有简单的csv文件,它是制表符分隔,我必须使用,因为它来自某个地方,我hvae阅读它并将其插入我的数据库我已经使用一个简单的 PHP代码来读取它

if(($handle = fopen("var/import/MMT29DEC.csv","r"))!==FALSE){
            /*Skip the first row*/
            fgetcsv($handle,1000,chr(9));
            while(($data = fgetcsv($handle,chr(9)))!==FALSE){
                    print_r($data[0]);
                        }
}

当print_r显示它的数据时

Array ( [0] => 01SATAPC [1] => 40ATAPC [2] => [3] => 21P [4] => SERIAL ATA POWER CABLE [5] => 0.00 [6] => 2.00 [7] => 0 [8] => Power Supplies [9] => SERIAL ATA POWER CABLE [10] =>
4 TO 15 PIN 160MM
[11] => [12] => [13] => [14] => MELBHO [15] => 0.000 [16] => [17] => Order to Order [18] => 4 [19] => 2013-01-18 )

哪个是期望的结果,但是当我使用$data [‘index’]访问特定列值时,例如$data [8]或$data [1]它奇怪地给我垃圾值说对于一些迭代它给我正确的值但是在10-15行之后它的开始给我一些数字和其他列值…..我不要我知道这是什么,据我所知它应该是格式化问题我试过在excel中打开文件,它即将到来……

解决方法

@ravisoni你确定fgetcsv为1000的第二个参数比你文件中的最长行长吗?尝试将其设置为0,因为文档说[PHP.net/fgetcsv],看看是否有所作为.

if(($handle = fopen("var/import/MMT29DEC.csv",chr(9)))!==FALSE){
                    print_r($data[0]);
                        }
}

phpExcel 准确读取excel表格时间

phpExcel 准确读取excel表格时间

phpExcel 正确读取excel表格时间
利用phpExcel读取excel文件,读取出来的时间列出现5位数字,并不是想要的时间(不知道为啥),在网上搜了一个excelTime的函数可以正确转化时间
品牌网站建设:http://www.ucantech.com/

Php代码

    error_reporting(E_ALL); 
    date_default_timezone_set(''Asia/shanghai''); 
    /** PHPExcel_IOFactory */ 
    require_once ''../Classes/PHPExcel/IOFactory.php''; 
    $inputFileName = ''6081076641077444758.xls''; 
    $objReader = new PHPExcel_Reader_Excel5(); 
    $objPHPExcel = $objReader->load($inputFileName); 
    $sheet = $objPHPExcel->getSheet(0); 
    $highestRow = $sheet->getHighestRow(); // 取得总行数 
    $highestColumn = $sheet->getHighestColumn(); // 取得总列数 
    $tempArray = array(); 
    for($j=2;$j       for($k=''A'';$k        if($k==''M''||$k==''O'') //M列和O列是时间 
            $tempArray[] = excelTime($objPHPExcel->getActiveSheet()->getCell("$k$j")->getValue()); 
        else 
            $tempArray[] = $objPHPExcel->getActiveSheet()->getCell("$k$j")->getValue(); 
        } 
        print_r($tempArray); 
        unset($tempArray); 
    } 
     
    function excelTime($date, $time = false) { 
        if(function_exists(''GregorianToJD'')){ 
            if (is_numeric( $date )) { 
            $jd = GregorianToJD( 1, 1, 1970 ); 
            $gregorian = JDToGregorian( $jd + intval ( $date ) - 25569 ); 
            $date = explode( ''/'', $gregorian ); 
            $date_str = str_pad( $date [2], 4, ''0'', STR_PAD_LEFT ) 
            ."-". str_pad( $date [0], 2, ''0'', STR_PAD_LEFT ) 
            ."-". str_pad( $date [1], 2, ''0'', STR_PAD_LEFT ) 
            . ($time ? " 00:00:00" : ''''); 
            return $date_str; 
            } 
        }else{ 
            $date=$date>25568?$date+1:25569; 
            /*There was a bug if Converting date before 1-1-1970 (tstamp 0)*/ 
            $ofs=(70 * 365 + 17+2) * 86400; 
            $date = date("Y-m-d",($date * 86400) - $ofs).($time ? " 00:00:00" : ''''); 
        } 
      return $date; 
    }  (fblww-0112)

关于如何在PHP中输出可以正确读取Excel的UTF-8 CSV?php读取excel内容的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于excel 2007官方下载 免费完整版 PHPExcel读取Excel文件的实现代码、php ExcelReader 读取Excel类_PHP教程、php – 无法正确读取csv(制表符分隔)、phpExcel 准确读取excel表格时间等相关内容,可以在本站寻找。

本文标签: