2015-08-07 14 views
5

Ich versuche, eine Excel-Datei in CSV zu konvertieren, wenn Benutzer auf Update-Taste klicken.Convert (xls, xlsx) in CSV vor Upload mit PHP

Seine Arbeit, wenn ich eine Datei in dem Ordner Excel laden dann bekomme ich diese Datei PHPExcel verwenden und alle Daten auslesen und in das CSV konvertieren.

Hier ist der Code.

<html> 
    <head> 
     <meta charset="UTF-8"> 
    </head> 
    <?php 
    ini_set("display_errors", "1"); 
    ini_set("memory_limit", "-1"); 
    ini_set("max_execution_time", "-1"); 
    error_reporting(1); 

    require_once "PHPExcel.php"; 
    $dir = "../excel2csv/";     // Main Directory Name 
    $file_arr = array(); 
    $file_ext_arr = array('xls','xlsx');   // Valid Extensions of Excel File 

    // From Directory get only Excel Files in Array 
    if(is_dir($dir)) 
    { 
     if($dh = opendir($dir)) 
     { 
      while(($file = readdir($dh)) !== false) 
      { 
       $info = new SplFileInfo($file); 
       $ext = $info->getExtension();   // Get Extension of Current File 
       if(in_array($ext,$file_ext_arr)) 
       { 
        array_push($file_arr, $file); 
       } 
      } 
      closedir($dh); 
     } 
    } 

    // Make CSV File 
    $fp = fopen('file.csv', 'a'); 
    $list = array(); 

    foreach($file_arr as $val) 
    { 
     $arr_data = array(); 
     $objPHPExcel = PHPExcel_IOFactory::load($dir . $val); 
     $cell_collection = $objPHPExcel->getActiveSheet()->getCellCollection(); 
     foreach($cell_collection as $cell) 
     { 
      $column = $objPHPExcel->getActiveSheet()->getCell($cell)->getColumn(); 
      $row = $objPHPExcel->getActiveSheet()->getCell($cell)->getRow(); 
      $data_value = $objPHPExcel->getActiveSheet()->getCell($cell)->getValue(); 
      //header will/should be in row 1 only. of course this can be modified to suit your need. 
      // Skip Rows From Top if you have header in Excel then Change 0 to 1 
      if($row == 0) 
      { 
       $header[$row][$column] = $data_value; 
      } 
      else 
      { 
       $arr_data[$row]['row'] = $row; 
       $arr_data[$row][$column] = $data_value; 
      } 
     } 
     $data = $arr_data; 
     foreach($data as $val1) 
     { 
      $num_col = sizeof($val1) - 1; // get number of columns in Excel 
      break; 
     } 
     $lwrcol=array();  
     foreach($data as $val2) 
     { 
      $alphaArr = range('A','Z'); 
      $colArr = range('A',$alphaArr[$num_col - 1]); 

      foreach($colArr as $col) 
      { 
       $lwrcol[$col] = isset($val2[$col]) ? utf8_decode($val2[$col]) : ""; 
       fwrite($fp,$lwrcol[$col].","); 
      } 
      fwrite($fp,"\n"); 
     } 
     chmod(getcwd()."/file.csv", 0777); 
    } 
    fclose($fp); 
    ?> 
</html> 

In obigem Code vor allem ich alle bin zu finden Excel-Dateien aus dem Ordner und eine file.csv Datei.

Was ich tun möchte, ist, wenn der Benutzer eine beliebige Datei in <input type="file" name="upload"/> auswählen und auf UPLOAD-Taste, nachdem dann in Back-End ersten Prozess konvertieren Excel in CSV VOR Datei, die es Ordner hochladen bewegen.

+0

So wie ich Ihr Code arbeitet für die Umwandlung von 'Excel' zu' CSV' sehen können, aber Sie haben keinen Code geschrieben für die erste von 'input' hochladen. Richtig? – Manwal

+0

all dieser Code ist in '

' –

Antwort

1

Wie ich sehe, funktioniert Ihr Code zum Speichern von Daten von Excel von CSV. Aber zuerst willst du zuerst von FORM hochladen dann willst du konvertieren. Also das ist, was Sie tun können ist:

zuerst benötigen Sie HTML für Form und zuerst Datei hochladen, wenn POST-Datei da ist. Werfen Sie einen Blick in folgenden Ausschnitt:

<html> 
    <head> 
     <meta charset="UTF-8"> 
    </head> 
    <?php 
    ini_set("display_errors", "1"); 
    ini_set("memory_limit", "-1"); 
    ini_set("max_execution_time", "-1"); 
    error_reporting(1); 


    require_once "PHPExcel.php"; 
    $dir = "../excel2csv/";     // Main Directory Name 
    $file_arr = array(); 
    $file_ext_arr = array('xls','xlsx');   // Valid Extensions of Excel File 



    if(!empty($_FILES)) { 

     //uploading file first 
     $info = pathinfo($_FILES['userFile']['name']); 
     $ext = $info['extension']; // get the extension of the file 
     $newname = "excelfile.".$ext; 

     $target = $dir.$newname; 
     move_uploaded_file($_FILES['userFile']['tmp_name'], $target); 

     //upload finish wiring csv file now 
     writecsv(); 

    } 

    function wirtecsv(){ 
     // From Directory get only Excel Files in Array 
     if(is_dir($dir)) 
     { 
      if($dh = opendir($dir)) 
      { 
       while(($file = readdir($dh)) !== false) 
       { 
        $info = new SplFileInfo($file); 
        $ext = $info->getExtension();   // Get Extension of Current File 
        if(in_array($ext,$file_ext_arr)) 
        { 
         array_push($file_arr, $file); 
        } 
       } 
       closedir($dh); 
      } 
     } 

     // Make CSV File 
     $fp = fopen('file.csv', 'a'); 
     $list = array(); 

     foreach($file_arr as $val) 
     { 
      $arr_data = array(); 
      $objPHPExcel = PHPExcel_IOFactory::load($dir . $val); 
      $cell_collection = $objPHPExcel->getActiveSheet()->getCellCollection(); 
      foreach($cell_collection as $cell) 
      { 
       $column = $objPHPExcel->getActiveSheet()->getCell($cell)->getColumn(); 
       $row = $objPHPExcel->getActiveSheet()->getCell($cell)->getRow(); 
       $data_value = $objPHPExcel->getActiveSheet()->getCell($cell)->getValue(); 
       //header will/should be in row 1 only. of course this can be modified to suit your need. 
       // Skip Rows From Top if you have header in Excel then Change 0 to 1 
       if($row == 0) 
       { 
        $header[$row][$column] = $data_value; 
       } 
       else 
       { 
        $arr_data[$row]['row'] = $row; 
        $arr_data[$row][$column] = $data_value; 
       } 
      } 
      $data = $arr_data; 
      foreach($data as $val1) 
      { 
       $num_col = sizeof($val1) - 1; // get number of columns in Excel 
       break; 
      } 
      $lwrcol=array();  
      foreach($data as $val2) 
      { 
       $alphaArr = range('A','Z'); 
       $colArr = range('A',$alphaArr[$num_col - 1]); 

       foreach($colArr as $col) 
       { 
        $lwrcol[$col] = isset($val2[$col]) ? utf8_decode($val2[$col]) : ""; 
        fwrite($fp,$lwrcol[$col].","); 
       } 
       fwrite($fp,"\n"); 
      } 
      chmod(getcwd()."/file.csv", 0777); 
     } 
     fclose($fp); 
    } 
    ?> 


    <form action='' method='POST' enctype='multipart/form-data'> 
    <input type='file' name='userFile'><br> 
    <input type='submit' name='upload_btn' value='upload'> 
    </form> 
</html> 
+0

Ich möchte die Datei in keinem Ordner zuvor verschieben. Ich möchte die Excel-Datei vor dem Hochladen auf den Server in CSV konvertieren. Wenn Benutzer eine beliebige Excel auswählen und zu diesem Zeitpunkt erste Prozess auf UPLOAD Schaltfläche klicken ist Excel-Datei im CSV-Datei konvertieren und nach convertion, die Datei in UPLOAD-Ordner laden wird, dass in einem anderen Prozess zu verwenden. –

+0

es die Anzeige leer Seite –

+0

@SriP ich weiß nicht, gerade jetzt eigentliche Ursache für leere Seite. Dazu müssen Sie Ihren Code Schritt für Schritt debuggen. – Manwal