我当前正在循环的数组将转储此结构
0 => array:11 [▼
"category_code" => "123"
"category_name" => "Testing"
"category_description" => "This is a test category"
19738 => array:5 [▼
"identifier" => "720368842943"
"description" => Test Description One
"count" => 4
"details" => array:2 [▼
0 => array:3 [▼
"detail_code" => "2751"
"detail_code2" => "43"
"detail_specifier" => "Detail One"
]
1 => array:3 [▼
"detail_code" => "2681"
"detail_code2" => "9"
"detail_specifier" => "Detail Two"
]
]
"prices" => array:1 [▼
"01" => "1129.00"
]
]
19739 => array:5 [▼
"identifier" => "720368844121"
"description" => "Test Description Two"
"count" => 4
"details" => array:2 [▼
0 => array:3 [▼
"detail_code" => "2751"
"detail_code2" => "43"
"detail_specifier" => "Detail One"
]
1 => array:3 [▼
"detail_code" => "2681"
"detail_code2" => "9"
"detail_specifier" => "Detail Two"
]
]
"prices" => array:1 [▼
"01" => "1490.00"
]
]
但是当我导出到excel时,它仅显示三个顶级属性
123 | Testing | This is a test category
我正在尝试以某种方式导出此文件,以使前3个值排成一行(如标题),并在其下列出所有相关产品,如下所示:
123 | Testing | This is a test category
====================================================================================================================
19738 | 720368842943 | Test Description One | 4 | 2751 | 43 | Detail One | 2681 | 9 | Detail Two | 1129.00
19739 | 720368844121 | Test Description Two | 4 | 2751 | 43 | Detail One | 2681 | 9 | Detail Two | 1490.00
我正在使用maatwebsite的Laravel Excel,它只是laravel中PHPExcel的包装器,但我要做的只是将类别信息作为一行,并将后续产品信息作为其下一行。
这是我正在使用的数组的excel代码,该代码已转储到上面(项目代码是19738,19739的值)
$allCategoryResult= array();
foreach($prices->categories as $category){
$categoryItem = array();
$categoryItem["category_code"] = $category->category_code;
$categoryItem["category_name"] = $category->category_name;
$categoryItem["category_desc"] = $category->category_desc;
foreach($category->skus as $sku){
$skuItem = array();
$skuItem["identifier"] = $sku->sku_info->identifier;
$skuItem["description"] = $sku->sku_info->item->description;
$skuItem["count"] = $sku->sku_info->item->item_type->count;
$skuItem["details"] = array();
foreach ($sku->sku_info->details as $details) {
$detailsItem = array();
$detailsItem["detail_code"] = $details->detail_code;
$detailsItem["detail_code2"] = $details->detail_code2;
$detailsItem["detail_specifier"] = $details->detail_specifier;
$skuItem["details"][] = $detailsItem;
}
$skuItem["prices"] = get_object_vars($sku->prices);
$itemCode = $sku->sku_info->item->item_code;
$categoryItem[$itemCode] = $skuItem;
}
$allCategoryResult[] = $categoryItem;
}
$name = 'Test Export';
$build = Excel::create($name, function ($excel) use ($allCategoryResult) {
$excel->setTitle('Test Export');
$excel->sheet('Test Export', function ($sheet) use ($allCategoryResult) {
$sheet->fromArray($allCategoryResult);
})->download('xlsx');
答案 0 :(得分:1)
方法fromArray()
需要2D数组
$data=(
array(2) (
[0] => array(3) (
[0] => 19738
[1] => ...
[2] => ...
)
[1] => array(4) (
[0] => 19739
[1] => ...
[2] => ...
[3] => ...
数组$ data的每个元素都是一行。每个子元素都是一列的值。重组数组的创建以适合此结构,您就可以开展业务。
此代码未经测试,仅尝试举一个例子。我不确定您对get_object_vars($sku->prices);
的处理方式。我敢肯定,这将不得不改变。
$excelRows = [];
foreach($prices->categories as $category){
$excelRows[] = [
$category->category_code,
$category->category_name,
$category->category_desc
]
foreach($category->skus as $sku){
$row = [
$sku->sku_info->identifier,
$sku->sku_info->item->description,
$sku->sku_info->item->item_type->count
]
foreach ($sku->sku_info->details as $details) {
$row[] = $details->detail_code;
$row[] = $details->detail_code2;
$row[] = $details->detail_specifier;
}
$row[] = get_object_vars($sku->prices);
$row[] = $sku->sku_info->item->item_code;
$excelRows[] = $row;
}
}