Как динамически добавлять месяцы, которые хранятся в базе данных в виде заголовка в файле Excel, при экспорте с использованием laravel? - PullRequest
0 голосов
/ 13 февраля 2019

Предположим, у меня есть элементы в базе данных, которая хранится в файле Excel.Все пункты должны быть ниже заголовка месяца.Я также сохранил месяцы из файла в базе данных.Итак, я хочу, чтобы эти месяцы были заголовком этих статей и связанных с ними записей.Проще говоря, я хочу, чтобы заголовок был динамическим.Это то, что я сделал.

Я пробовал много сценариев кода, но ничего не работает.как Laravel Excel и т. д. Может ли кто-нибудь предложить мне хороший подход.

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');
  }

Мне нужна помощь для получения фактического результата.Спасибо заранее.

These months are coming from database

Here I want the header to be months dynamically

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Это фактический код, который я использовал для файла 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');
}
0 голосов
/ 13 февраля 2019

Akhtar. Предлагаю использовать для установки пакета Carbon https://carbon.nesbot.com/docs/

Попробуйте обновить код ниже.

$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'],
    );

}
...