PHP 每个电子表格 1 个电子表格值

PHP Spreadsheet 1 value per spreadsheet

下面列出了一系列酒店。我打算使用 Php spreadsheet 将其导出到电子表格。我的目标是为每家酒店获取 1 个电子表格,因此在下面的数组 $hotels 中,我预计将创建 2 个电子表格。

这是我想在每个电子表格中呈现的内容。

电子表格 1:

   | Property  | Hotel 1 | Hotel 1
   | Room Name | Room 1  | Room 2
   ...

电子表格 2:

   | Property  | Hotel 2 | Hotel 2 | Hotel 2
   | Room Name | Room 3  | Room 4  | Room 5
   ...

但到目前为止我得到的是它显示了所有这样的酒店

   | Property  | Hotel 1 | Hotel 1 | Hotel 2 | Hotel 2 | Hotel 3 
   | Room Name | Room 1  | Room 2  | Room 3  | Room 4  | Room 5
   ...

酒店数组。

$hotels = [
    'id' => 1,
    'title' => 'Hotel 1',
    'rooms' => [
        0 => [
            'id' => 1,
            'title' => 'Room1',
            'default_price' => 50,
            'options' => [
                0 => [
                    'date' => '12-04-2022',
                    'price' => 100,
                ]...
            ]
        ],
        1 => [
            'id' => 2,
            'title' => 'Room2',
            'default_price' => 120,
            'options' => [
                0 => [
                    'date' => '11-04-2022',
                    'price' => 200,
                ]...
            ]
        ],
    ],
    
    'id' => 2,
    'title' => 'Hotel 2',
    'rooms' => [
        0 => [
            'id' => 3,
            'title' => 'Room3',
            'default_price' => 50,
            'options' => [
                0 => [
                    'date' => '12-04-2022',
                    'price' => 100,
                ]...
            ]
        ],
        1 => [
            'id' => 4,
            'title' => 'Room4',
            'default_price' => 120,
            'options' => [
                0 => [
                    'date' => '11-04-2022',
                    'price' => 200,
                ]...
            ]
        ],
        1 => [
            'id' => 5,
            'title' => 'Room5',
            'default_price' => 120,
            'options' => [
                0 => [
                    'date' => '11-04-2022',
                    'price' => 200,
                ]...
            ]
        ],
    ]
];

这是我到目前为止所做的: 第一个 ($sheetPrice->setCellValue($alphabets[$hotelKey+2].'2' , $hotel->title)) 没有像我想要的那样工作。

第二个 ($sheetPrice->setCellValue($alphabets[$key].'2' , $hotel->title)) 显示所有酒店,而不是每个电子表格的 1 个酒店房间值。


$sheetPrice->setCellValue('B2', 'Property');
$sheetAvailability->setCellValue('B2', 'Property');

$sheetPrice->setCellValue('B3', 'Unit Type');
$sheetAvailability->setCellValue('B3', 'Unit Type');

$sheetPrice->setCellValue('B4', 'Unit Guests');
$sheetAvailability->setCellValue('B4', 'Unit Guests');

foreach ($hotels as $hotelKey => $hotel) {

    // not working
    //$sheetPrice->setCellValue($alphabets[$hotelKey+2].'2' , $hotel->title);

    // check if it has rooms
    if (count($rooms) > 0) {
        // extract rooms
        foreach ($rooms as $key => $room) {
             $key = $key+2;
             $sheetPrice->setCellValue($alphabets[$key].'2' , $hotel->title);
             // rest of the rooms set cell value
             ...
        }

        $filename = $hotel->title . '.xlsx';
        $file = $this->basename . '/excel_export/' . $filename;
        $writer->save($file);
    }
}

此外,我不确定是否有任何 post 这样的问题,或者我可能只需要正确的词来 google 这个问题,但如果有,请 link 它以下。谢谢!

如果您有任何问题,请告诉我。提前致谢!

您一遍又一遍地用相同的 sheet 写作。 您需要创建一个新的点差sheet,用行填充它然后为每家酒店保存。 此外,您提供的数组结构无效,不能有两个同名索引。

  foreach ($hotels as $hotel){
        $spreadsheet = new Spreadsheet();
        $sheet = $spreadsheet->getActiveSheet();
        // do your things, set the header, add the rows etc
        
        $filename = $hotel->title . '.xlsx';
        $file = $this->basename . '/excel_export/' . $filename;
        $writer = new Xlsx($spreadsheet);
        $writer->save($filename);
    }