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);
}
下面列出了一系列酒店。我打算使用 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);
}