web-dev-qa-db-ja.com

PHPExcelで列名を使用してセル値を取得する

これは私のExcelシートです Excel Sheet たくさんの列がありますが、質問を理解しやすくするために分解しています

PHP Excel とrangeToArray()を使用してExcelシートを読んでいます。これにより、Excelからすべての行が取得されますが、次のように出力する必要があります。

キーとしての列:値としてのセル値

現在、次のように出力されます

列インデックス:セル値

だから私の質問は、列名とセル値を持つ配列を返すPHPExcelの関数はどれですか?

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
            ...
            ...
         )
)
6
user123

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]);
}
12
Mark Baker

この関数は、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

}
0
gabrielrincon
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;
 }
 }
0
Ganesh