2017-08-06 1 views
1

Sans Symfony, voici comment publier des données Excel vers la base de données.Comment utiliser liuggio/ExcelBundle pour publier des données Excel vers la base de données

// Include PHPExcel_IOFactory 

require_once ('../Classes/PHPExcel/IOFactory.php'); 
$inputFileName = 'abc.xls'; 

// Read your Excel workbook 
try { 
    $inputFileType = PHPExcel_IOFactory::identify($inputFileName); 
    $objReader = PHPExcel_IOFactory::createReader($inputFileType); 
    $objPHPExcel = $objReader->load($inputFileName); 
} catch(Exception $e) { 
    die('Error loading file "'.pathinfo($inputFileName,PATHINFO_BASENAME).'": '.$e->getMessage()); 
} 

// Get worksheet dimensions 
$sheet = $objPHPExcel->getSheet(0); 
$highestRow = $sheet->getHighestRow(); 
$highestColumn = $sheet->getHighestColumn(); 

// Loop through each row of the worksheet in turn 
for ($row = 1; $row <= $highestRow; $row++){ 

    // Read a row of data into an array 
    $rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, 
            NULL, 
            TRUE, 
            FALSE); 
    // Insert row data array into your database of choice here 

} 

Maintenant, avec le ExcelBundle, je suis coincé. La documentation ne m'aide pas du tout dans cette tâche. J'ai essayé tous les conseils donnés dans des questions similaires et je n'arrive pas à le faire.

Création d'un objet à partir d'un fichier comme dans l'exemple ci-dessous ne fonctionne pas du tout:

$phpExcelObject = $this->get('phpexcel')->createPHPExcelObject('file.xls');

Comment réaliser cette tâche?

+1

Vous devez publier le code que vous avez essayé ** avec ** Symfony et spécifier exactement ce que "_n'a pas du tout fonctionné._". Lisez [Comment créer un exemple minimal, complet et vérifiable] (http://stackoverflow.com/help/mcve) et mettez à jour votre question en conséquence [Comment demander] (http://stackoverflow.com/help/) comment-demander) directives. –

+0

@gp_sflover, Si je poste ce que j'ai essayé, je vais tout compliquer. Juste comment je vais accomplir la tâche ci-dessus avec Symfony est mon problème. Merci – maestro

+0

Avez-vous suivi les instructions d'installation? Où est ce code que vous avez essayé? Si ce n'est pas dans un contrôleur qui ne va pas fonctionner –

Répondre

1

J'ai travaillé ceci comme suit:

  1. Assurez-vous que le chemin Liuggio/ExcelBundle/contrôleur/FakeController.php existe
  2. Assurez-vous de mettre à jour l'application/config config.yml et routing.yml sont mis à jour avec les fichiers fournis (Liuggio/ExcelBundle/Tests/app)
  3. en supposant que vous mettez à jour la table des produits, mise à jour du FakeController comme suit:

    <?php 
    
    namespace Liuggio\ExcelBundle\Controller; 
    
    use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
    use Symfony\Component\HttpFoundation\Response; 
    use AppBundle\Entity\Product; 
    
    class FakeController extends Controller 
    { 
        public function insertAction() 
        { 
         $data = []; 
         $appPath = $this->container->getParameter('kernel.root_dir'); 
         $file = realpath($appPath . '/../web/excelFiles/abc.xls'); 
    
         $phpExcelObject = $this->get('phpexcel')->createPHPExcelObject($file); 
         $sheet = $phpExcelObject->getActiveSheet()->toArray(null, true, true, true); 
    
         $em = $this->getDoctrine()->getManager(); 
         $data['sheet'] = $sheet; 
         //READ EXCEL FILE CONTENT 
         foreach($sheet as $i=>$row) { 
         if($i !== 1) { 
          $product = new Product(); 
    
          $product->setProductCode($row['A']); 
          $product->setProductName($row['B']); 
          $product->setProductRetailPrice($row['C']); 
          $product->setProductCost($row['D']); 
          $product->setProductTax($tax); 
          $product->setCategory($category); 
          //... and so on 
    
    
          $em->persist($product); 
          $em->flush(); 
          //redirect appropriately 
          } 
         } 
         $data['obj'] = $phpExcelObject; 
         return $this->render('excel/read.html.twig', ['data' => $data ]); 
        } 
    
    } 
    
+0

Merci beaucoup ... Vous avez économisé mon temps. – Josiah

+0

Puis-je l'utiliser avec symfony 3.3? –

+0

Oui, vous pouvez. C'est ce que j'utilisais. – maestro