namespace App\Http\Controllers\Admin\Operations\Tools;
use Cubist\Backpack\Magic\Fields\Code;
+use Cubist\Backpack\Magic\Fields\Text;
use Cubist\Backpack\Magic\Form;
use Cubist\Util\Files\Files;
+use Cubist\Util\Str;
+use PhpOffice\PhpSpreadsheet\Spreadsheet;
+use PhpOffice\PhpSpreadsheet\Style\Alignment;
+use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
trait JSON2Excel
{
$form->setTitle(__('Convertir du JSON en excel'));
$form->setSubmitLabel(__('Convertir'));
$form->setSubmitIcon('la la-file-excel');
+ $form->addField('name', Text::class, __('Nom du fichier'), ['placeholder' => 'json', 'suffix' => '.xlsx']);
$form->addField('json', Code::class, __('Contenu JSON'), ['language' => 'js']);
return view('tools.form', ['form' => $form]);
}
public function dojson2excel()
{
$json = request()->get('json');
+ $name = request()->get('name', 'json');
+ $safename = Str::slug($name);
$data = json_decode($json, true);
$first = true;
$excelData = [];
foreach ($data as $line) {
if ($first) {
$excelData[] = array_keys($line);
+ $first = false;
}
$excelData[] = array_values($line);
}
$tmpfile = Files::tempnam() . '.xlsx';
- return response()->download($tmpfile, 'json.xlsx')->deleteFileAfterSend(true);
+
+ $spreadsheet = new Spreadsheet();
+ $sheet = $spreadsheet->getActiveSheet();
+ $sheet->setTitle($name);
+ $sheet->fromArray($excelData);
+
+ $highest = $sheet->getHighestRowAndColumn();
+ $sheet->getStyle('A1:' . $highest['column'] . '1')->applyFromArray(['font' => ['bold' => true,]]);
+
+ foreach ($sheet->getColumnIterator() as $column) {
+ $sheet->getColumnDimension($column->getColumnIndex())->setAutoSize(true);
+ }
+ $sheet->getStyle('A1:' . $highest['column'] . $highest['row'])->getAlignment()->setHorizontal(Alignment::HORIZONTAL_LEFT);
+
+ $writer = new Xlsx($spreadsheet);
+ $writer->save($tmpfile);
+
+ return response()->download($tmpfile, $safename . '.xlsx')->deleteFileAfterSend(true);
}
var json = $(this).closest('.bunchmultiple[data-values]').attr('data-values');
var form = $('<form action="{{backpack_url('tools/dojson2excel')}}" method="post">' +
'<input type="hidden" name="json" value="" />' +
+ '<input type="hidden" name="name" value="" />' +
+ '<input type="hidden" name="_token" value="{{csrf_token()}}" />' +
'</form>');
$('body').append(form);
- $(form).find('input').val(json);
+ $(form).find('input[name="json"]').val(json);
+ $(form).find('input[name="name"]').val('chapters_' + $('input[name="id"]').val());
form.submit();
+ return false;
});
});