4

读取.csv文件时,我遇到了关于 PHPExcel 的问题。

我想从 .csv 文件中获取值,但问题是来自被视为单个单元格的特定行的数据。

这是我的代码:

        include 'Classes/PHPExcel/IOFactory.php';
        $inputFileType = 'CSV';
        $inputFileName = $_FILES['file']['tmp_name'];
        $objReader = PHPExcel_IOFactory::createReader($inputFileType);
        $objPHPExcel = $objReader->load($inputFileName);

        $sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);

        $table = "<table border=1><tr><td>first</td><td>middle</td><td>last</td><td>email</td>";

        for ($x = 2; $x <= count($sheetData); $x++){
            foreach ($sheetData[$x] as $data){
                $first = $sheetData[$x]['A'];
                $middle = $sheetData[$x]['B'];
                $last = $sheetData[$x]['C'];
                $email = $sheetData[$x]['D'];   
            }

            $table .= "<tr><td>" . $first ."</td><td>" . $middle . "</td><td>" . $last . "</td><td>" . $email . "</td></tr>";

        }

        $table .= "</table>";

        echo $table;

它正在处理.xls.xlsx文件,我得到了我想要的输出。

4

3 回答 3

7

这工作正常:

$objReader->setDelimiter("\t"); 

但是,当您不能 100% 确定其制表符或逗号是否分隔时,似乎无法同时添加两者,例如$objReader->setDelimiter("\t",);,这是必需的。当您打开 Excel 并转到 Import CSV 时,屏幕上的实际步骤允许您指定多个分隔符,这很酷。

这是您正在使用 PHP Office 进行的工作吗?

在单独的说明中,这里有两个链接可以帮助您使用 PHP 来确定文件是逗号、制表符还是管道分隔 - 安静的一个聪明的解决方案:

如何确定 csv 文件字段是制表符分隔还是逗号分隔

我应该如何检测文本文件中使用了哪个分隔符?

于 2013-11-12T07:06:12.100 回答
4

这对我有用:

        $objReader = new PHPExcel_Reader_CSV();
        $objReader->setDelimiter(';');
        $objReader->setEnclosure('');
        $objReader->setLineEnding("\r\n");
        $objReader->setSheetIndex(0);
        $objPHPExcel = $objReader->load($myFile);

更多信息https://docs.typo3.org/typo3cms/extensions/phpexcel_library/1.7.4/manual.html#_Toc237519888

于 2016-10-13T16:29:16.867 回答
1

那么文件中的分隔符是什么?是逗号、分号、制表符还是别的什么?

PHPExcel 还没有自动检测模式,因此除非您指定要使用的分隔符和附件,否则它将默认为逗号分隔符和双引号 (") 附件。如果您的文件使用制表符或分号,或其他字符作为分隔符,那么您需要手动告诉 CSV 阅读器使用什么字符,否则它将将该行视为单个单元格。

读者的用户文档有一整节专门用于解释 CSV 文件的这些选项(第 4.6 节)。

请注意,我在#phpnw13 hackathon 中将逻辑定位到文件本身的“最佳猜测”分隔符和附件值,但在此之前,如果不是默认值,您需要手动指定

于 2013-09-12T09:41:00.957 回答