在使用laravel导出时,如何动态添加以excel文件头形式存储在数据库中的月份?
假设数据库中有从Excel文件存储的项。所有项目应位于月份标题下方。我还将文件中的月份存储在数据库中。所以,我希望这些月份是这些项目及其相关记录的标题。简单地说,我希望标题是动态的。这就是我所做的 我试过很多代码脚本,但都不起作用。像Laravel、Excel等,有人能给我推荐一个好的方法吗在使用laravel导出时,如何动态添加以excel文件头形式存储在数据库中的月份?,laravel,laravel-excel,Laravel,Laravel Excel,假设数据库中有从Excel文件存储的项。所有项目应位于月份标题下方。我还将文件中的月份存储在数据库中。所以,我希望这些月份是这些项目及其相关记录的标题。简单地说,我希望标题是动态的。这就是我所做的 我试过很多代码脚本,但都不起作用。像Laravel、Excel等,有人能给我推荐一个好的方法吗 public function test(){ $data = Item::where('category_id',7)->get()->toArray(); $data2 =
public function test(){
$data = Item::where('category_id',7)->get()->toArray();
$data2 = month::all();
$itemsArray[] = ['Category Id','Item Name','Created At','Updated At'];
foreach ($data as $value) {
// dd($value);
$itemsArray[] = array(
'Category Id' => $value['category_id'],
'Item Name' => $value['name'],
'Created At' => $value['created_at'],
'Updated At' => $value['updated_at'],
);
}
// Generate and return the spreadsheet
Excel::create('Items', function($excel) use ($itemsArray) {
// Set the spreadsheet title, creator, and description
$excel->setTitle('Items');
// Build the spreadsheet, passing in the items array
$excel->sheet('Items', function($sheet) use ($itemsArray) {
$cellRange = 'A1:D1';
// $spreadsheet->getActiveSheet()->getStyle('A1:D4')
// ->getAlignment()->setWrapText(true);
$sheet->getStyle($cellRange)->getFont()->setBold( true );
$sheet->getStyle($cellRange)->getFont()->setSize( '15' );
$sheet->setBorder($cellRange, 'thick' );
$sheet->getStyle($cellRange)->applyFromArray(array(
'fill' => array(
// 'type' => PHPExcel_Style_Fill::FILL_SOLID,
'color' => array('rgb' => 'A5D9FF')
)
));
$sheet->fromArray($itemsArray, null, 'A1', false, false);
});
$excel->setCreator('Laravel')->setCompany('Dev505');
$excel->setDescription('Items file');
})->download('xlsx');
}
我需要帮助才能得到实际结果
我建议使用Akhtar安装碳素包装 请尝试更新以下代码
$data = Item::where('category_id',7)->get(); // removed toArray()
$data2 = month::all();
$itemsArray[] = ['Category Id','Item Name','Created At','Updated At'];
foreach ($data as $key=>$value) {
$itemsArray[] = array(
'month' => Carbon::now()->addMonth($key)->format('m-Y');
'Category Id' => $value['category_id'],
'Item Name' => $value['name'],
'Created At' => $value['created_at'],
'Updated At' => $value['updated_at'],
);
}
这是我用于excel文件的实际代码。我已经解决了我的问题。谢谢,是的,如果有人能从中得到帮助,我正在发布这个代码
public function export(){
$data = Category::all();
foreach ($data as $value) {
$value['items'] = Item::where('category_id',$value['id'])->get();
foreach ($value['items'] as $vl) {
$vl['record'] = Record::where('item_id',$vl['id'])->get();
}
}
$data2 = month::pluck('id','month');
foreach ($data2 as $key => $value) {
$m[] = $key;
}
array_unshift($m, 'Categories'); //Insert new element at the start of array
array_push($m, 'Total');
$itemsArray[] = $m;
foreach ($data as $value) {
$itemsArray[] = array(
$itemsArray[0][0] => $value['name'],
// $itemsArray[0][13] => 'Total',
);
foreach ($value['items'] as $val) {
$records_array = [];
$i = 0;
foreach ($val['record'] as $val5) {
$recordval = $val5['value'];
$records_array[$i] = $val5['value'];
$i++;
}
$itemsArray[] = array(
$itemsArray[0][0] => $val['name'],
$itemsArray[0][1] => $records_array[0],
$itemsArray[0][2] => $records_array[1],
$itemsArray[0][3] => $records_array[2],
$itemsArray[0][4] => $records_array[3],
$itemsArray[0][5] => $records_array[4],
$itemsArray[0][6] => $records_array[5],
$itemsArray[0][7] => $records_array[6],
$itemsArray[0][8] => $records_array[7],
$itemsArray[0][9] => $records_array[8],
$itemsArray[0][10] => $records_array[9],
$itemsArray[0][11] => $records_array[10],
$itemsArray[0][12] => $records_array[11],
// $itemsArray[0][13] => 'Total',
);
}
}
// Generate and return the spreadsheet
Excel::create('Items', function($excel) use ($itemsArray) {
// Set the spreadsheet title, creator, and description
$excel->setTitle('Items');
// Build the spreadsheet, passing in the items array
$excel->sheet('Items', function($sheet) use ($itemsArray) {
$cellRange = 'A1:M1';
$sheet->getStyle($cellRange)->getFont()->setBold( true );
$sheet->getStyle($cellRange)->getFont()->setSize( '12' );
$sheet->setBorder($cellRange, 'thin' );
$sheet->getStyle($cellRange)->applyFromArray(array(
'fill' => array(
// 'type' => PHPExcel_Style_Fill::FILL_SOLID,
'color' => array('rgb' => 'A5D9FF')
)
));
$sheet->fromArray($itemsArray, null, 'A1', false, false);
});
$excel->setCreator('Laravel')->setCompany('Dev505');
$excel->setDescription('Items file');
})->download('xlsx');
}
我认为你需要进一步澄清这个问题。因此,您希望这些月份成为这些项目及其相关记录的标题。。意味着每个月都需要一列?实际上,我只希望这些月是标题。这意味着这些月份应该只在标题中显示一次,其余的记录将显示在月份标题或行的下方。比方说,我有12个月的记录,所以每个月的记录都应该从它对应的月份开始显示。我已经保存到数据库中的月份、记录和项目。问题只在于导出到desire格式。那么12列,每个月一列?好的,你解决了。。伟大的不,兄弟,你没有明白我的意思。我根据文件在数据库中随机存储了月份,月份的顺序是不同的。我不想包括碳月份。但是我自己解决了我的问题。我将更新自己的代码,以便其他人获得帮助。无论如何谢谢你