【问题标题】:Get Cell Value with column name in Php Excel在 PHP Excel 中获取具有列名的单元格值
【发布时间】:2015-12-08 04:42:11
【问题描述】:

这是我的 excel 表 它有很多列,但为了便于理解问题,我正在分解

我正在使用PHP Excel 阅读 Excel 表,并使用 rangeToArray() 为我提供了 excel 中的所有行,但我希望输出为

列作为键:单元格值作为值

目前我得到的输出为

Col 索引:单元格值

所以我的问题是 PHP Excel 中的哪个函数返回带有列名的数组及其单元格值?

try {
    $inputFileType = PHPExcel_IOFactory::identify($inputFileName);
    $objReader = PHPExcel_IOFactory::createReader($inputFileType);
    $objPHPExcel = $objReader->load($inputFileName);
} catch(Exception $e) {
    die('Error loading file"'.pathinfo($inputFileName,PATHINFO_BASENAME).'": '.$e->getMessage());
}
//  Get worksheet dimensions
$sheet = $objPHPExcel->getSheet(0); 
$highestRow = $sheet->getHighestRow(); 
$highestColumn = $sheet->getHighestColumn();
for ($row = 2; $row <= $highestRow; $row++){ 
    //  Read a row of data into an array
    $rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row,
                                            NULL,
                                            TRUE,
                                            FALSE);
    printArr($rowData);
    printArr("-------");

}

我得到的输出为

Array
(
    [0] => Array
        (
            [0] => 27745186
            [1] => 42058
            [2] => DELL INTERNATIONAL SERVICES INDIA PVT LTD
            ...
            ...
         )
    [1] => Array
        (
            [0] => 27745186
            [1] => 42058
            [2] => DELL INTERNATIONAL SERVICES INDIA PVT LTD
            ...
            ...
         )
)

愿望输出

Array
(
    [0] => Array
        (
            [Invoice_no] => 27745186
            [Invoice Date] => 42058
            [Description] => DELL INTERNATIONAL SERVICES INDIA PVT LTD
            ...
            ...
         )
    [1] => Array
        (
            [Invoice_no] => 27745186
            [Invoice Date] => 42058
            [Description] => DELL INTERNATIONAL SERVICES INDIA PVT LTD
            ...
            ...
         )
)

【问题讨论】:

    标签: php phpexcel


    【解决方案1】:

    PHPExcel 没有什么神奇之处,但在标准 PHP 中很容易做到

    从第一行检索您想要的标题/键

    $headings = $sheet->rangeToArray('A1:' . $highestColumn . 1,
                                                NULL,
                                                TRUE,
                                                FALSE);
    

    然后将标准数字键重置为每个数据行的阅读循环内的标题值

    for ($row = 2; $row <= $highestRow; $row++){ 
        //  Read a row of data into an array
        $rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row,
                                                NULL,
                                                TRUE,
                                                FALSE);
        $rowData[0] = array_combine($headings[0], $rowData[0]);
    }
    

    【讨论】:

    • 我试过你的解决方案我得到一个空数组数组([0] =>)
    • 然后做一些基本的调试.....显示你从$rowData = $sheet-&gt;rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE);得到的结果......因为这不是你在问题中显示的内容
    • 当我打印 $rowData 时,我得到上面有问题的数组,其中包含列的索引值
    • 感谢您的帮助,当我将 $heading 更改为 $heading[0] $rowData[0] = array_combine($headings[0], $rowData[0]);
    • 您确实应该使用带有准备好的语句/绑定变量的 MySQLi 或 PDO 等现代数据库接口,那么您不需要转义任何东西....但是如果您真的必须使用 @987654324 @ do array_walk( $rowData[0], function (&amp;$value) { $value = mysql_real_escape_string($value); } ); 在你的循环中
    【解决方案2】:
    foreach ($cell_collection as $cell) 
     {
     $column = $objPHPExcel->getActiveSheet()->getCell($cell)->getColumn();
     $row = $objPHPExcel->getActiveSheet()->getCell($cell)->getRow();
     $data_value = $objPHPExcel->getActiveSheet()->getCell($cell)->getValue();
     if ($row == 1) 
     {
        $header[$row][$column] = $data_value;
     } 
     else 
     {
        $arr_data[$row][$column] = $data_value;
     }
     }
    

    【讨论】:

    • 你会得到你想要的行和列
    【解决方案3】:

    我创建这个函数是为了不要像A1,A2,B1,B2那样写参考标题。并且有效。

    public function createExcel($titulos, $datos, $tituloLibro = 'The title')
    {
        $phpExcelObject = //instance it;
        $phpExcelObject->getProperties()->setCreator("Your name")
            ->setLastModifiedBy("yourweb.com")
            ->setTitle($tituloLibro)
            ->setSubject($tituloLibro)
            ->setDescription($tituloLibro)
            ->setKeywords("")
            ->setCategory($tituloLibro);
        $i = 0;
        $phpExcelObject->setActiveSheetIndex(0);
        foreach ($titulos as $titulo)
        {
            $phpExcelObject->getActiveSheet()->getCellByColumnAndRow($i,1)->setValue($titulo);
            $i++;
        }
        $j = 2;
        foreach ($datos as $filas)
        {
            $i = 0;
            foreach ($filas as $fila)
            {
                $phpExcelObject->getActiveSheet()->getCellByColumnAndRow($i,$j)->setValue($fila);
                $i++;
            }
            $j++;
        }
        // your logic
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      • 1970-01-01
      • 2019-05-20
      • 2012-01-27
      • 1970-01-01
      • 2016-10-26
      • 1970-01-01
      相关资源
      最近更新 更多