Laravel-excel: Comment puis-je fusionner deux fichiers xlsx et télécharger le fichier combiné ?

Créé le 9 oct. 2017  ·  3Commentaires  ·  Source: Maatwebsite/Laravel-Excel

Veuillez préfixer votre problème avec l'un des éléments suivants : [BOGUE] [PROPOSITION] [QUESTION].

Version paquet, version Laravel

Comportement attendu

Comportement réel

Trace de pile d'exceptions

Capture d'écran du fichier Excel

Étapes pour reproduire le comportement

Commentaire le plus utile

@sarpkaya-xx essayez addSheet() :

    Excel::create('workbook', function ($excel) {
        // Create first "original" sheet
        $original = $excel->sheet('Sheet 1', function ($sheet) {
            $sheet->fromArray([
                ['foo' => 'bar']
            ]);
        });
        // Copy the first sheet 4 times
        for ($sheetCount = 2; $sheetCount <= 5; $sheetCount++) {
            $copy = $original->getSheet()->copy();
            $copy->setTitle("Sheet {$sheetCount}");
            $excel->addSheet($copy);
        }
    })->save();

Tous les 3 commentaires

Salut @kurianic , l'exemple ci-dessous lira toutes les feuilles des classeurs A et B et les copiera dans un nouveau classeur C. Veuillez vous assurer que A et B ne contiennent pas de feuilles portant le même nom.

// Load the workbooks to merge in a collection.
// This example is assuming they're stored in the Laravel storage folder.
$workbooks = collect([
    'workbookA.xlsx',
    'workbookB.xlsx',
])->map(function ($filename) {
    return Excel::load(storage_path($filename));
});

// Create merged workbook
$workbookC = Excel::create('workbookC', function ($excel) use ($workbooks) {
    // For each workbook to be merged
    $workbooks->each(function ($workbook) use ($excel) {
        // Get all the sheets
        collect($workbook->getAllSheets())->each(function ($sheet) use ($excel) {
            // And add them to the merged workbook
            $excel->addExternalSheet($sheet);
        });
    });
})->save(); // save merged workbook to storage/exports/workbookC.xlsx

Salut @stephanecoinon , je souhaite ajouter la même feuille plusieurs fois, pour éviter les noms en double, j'ai appelé $sheet->setTitle. mais cela me donne une erreur "La feuille n'existe pas". lorsque addExternalSheet est appelé juste après setTitle.

$sheet_original->setTitle("SHEET ".$i); $sheets[$i] = $sheet_original; $sheets[$i]->cell('I64', function($cell) use($i) { $cell->setValue($i); }); $excel->addExternalSheet($sheets[$i] );

@sarpkaya-xx essayez addSheet() :

    Excel::create('workbook', function ($excel) {
        // Create first "original" sheet
        $original = $excel->sheet('Sheet 1', function ($sheet) {
            $sheet->fromArray([
                ['foo' => 'bar']
            ]);
        });
        // Copy the first sheet 4 times
        for ($sheetCount = 2; $sheetCount <= 5; $sheetCount++) {
            $copy = $original->getSheet()->copy();
            $copy->setTitle("Sheet {$sheetCount}");
            $excel->addSheet($copy);
        }
    })->save();
Cette page vous a été utile?
0 / 5 - 0 notes