2015-07-20 38 views
0

我在開放文檔電子表格中存儲我的用戶詳細信息我想以相同的格式上傳用戶詳細信息到數據庫,但它不工作。但在CSV格式,它工作正常。所以我的要求是希望將打開的文檔電子表格詳細信息上傳到我嘗試過的數據庫,但它不起作用。我使用的警予,1.1如何導入使用YII打開文檔電子表格到數據庫中

我Excelimport代碼: -

$filelist=CUploadedFile::getInstancesByName('name'); 
     foreach($filelist as $file) 
      { 
       try{   
       $transaction = Yii::app()->db->beginTransaction(); 
       ini_set("auto_detect_line_endings", true); 
       $handle = fopen("$file->tempName", "r"); 
       $row = 1; 
       while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
        if($row>1){ 
           date_default_timezone_set("Asia/Kolkata"); 
           $timestamp = date('Y-m-d H:i:s'); 
           $SchoolId=Yii::app()->session['Schoolid']; 
           $newmodel=new Puserprofile;  
           $newmodel->username=$data[0]; 
           $newmodel->password=$data[1]; 
           $newmodel->repeat_password=$data[2]; 
           $newmodel->studentname=$data[3]; 
           //$newmodel->classid=$data[4]; 
           $classname = $data[4];         
           $newmodel->parentname=$data[5]; 
           $newmodel->Phone=$data[6]; 
           $newmodel->email=$data[7];         
           $newmodel->save();   
        } 
        $row++; 
       } 

       $transaction->commit(); 
       $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin')); 
       }catch(Exception $error){ 
        print_r($error);   
        $transaction->rollback(); 
       }     
      } 
+0

左右。你是如何嘗試上傳和p屁股打開文檔電子表格?顯示你的代碼。它以什麼方式不起作用?它讀取文件失敗嗎?它會給出任何錯誤嗎?它會在數據庫中創建不正確的數據嗎? –

回答

0

例如文件

ODF文件:單元格A1,A2,B1,B2充滿了文字。

步驟1:打開包裝ODF-文件

的ODF-formar只不過是一個容器更容易。 因此,你可以使用PHP內建的類「ZipArchive」來解壓容器。我建議在受保護的/運行時創建一個臨時文件夾,在這個文件夾中我調用 文件夾「odfImport」。

$objZip = new ZipArchive; 
$result = $objZip->open($objFile->getTempName()); 
if ($result === TRUE) { 
    $workingDir = sha1(rand().microtime()); 

    // create temporary Folder in runtime 
    if(!is_dir(Yii::getPathOfAlias('webroot').'/protected/runtime/odfImport/'.$workingDir)) 
     CFileHelper::createDirectory(Yii::getPathOfAlias('webroot').'/protected/runtime/odfImport/'.$workingDir,null,true); 

    // Extract Files from odf-container 
     $objZip->extractTo(Yii::getPathOfAlias('webroot')."/protected/runtime/odfImport/".$workingDir); 
     $objZip->close(); 

} 

在這一點上,我們應該有一個文件夾./protected/runtime//巫婆包含 大量的XML的文件。在這個tut中,我們關注的是「content.xml」。該文件包含我們的內容 。

第2步:解析的content.xml

這份工作,你可以使用 「的SimpleXMLElement」 和幫手 「使用simplexml_load_file」。 請參閱文檔以獲取更多信息。 還需要配置XML文檔的前綴和名稱空間。 如需幫助,您可以使用Firefox或texteditor打開content.xml。 所以,在這裏我們去:

// load content.xml 
$xml = simplexml_load_file(Yii::getPathOfAlias('webroot')."/protected/runtime/odfImport/".$workingDir."/content.xml",'SimpleXMLElement'); 
// register some prefixes and namespaces 
$xml->registerXPathNamespace('table','table-cell'); 
$xml->registerXPathNamespace('text','p'); 
// output them 
foreach($xml->xpath('//table:table-cell') as $header) 
{ 
    // model crud operation goes here 
    echo "<pre>"; print_r($header->xpath('//text:p')); echo "</pre>"; 
} 

第3步:整理

進行開發,在評論這個

// tidyup 
CFileHelper::removeDirectory(Yii::getPathOfAlias('webroot').'/runtime/odfImport/'.$workingDir); 

完整代碼

$arrUpload = CUploadedFile::getInstancesByName('files_name'); 
if($arrUpload) { 
    foreach($arrUpload AS $objFile) { 
     $objZip = new ZipArchive; 
      $result = $objZip->open($objFile->getTempName()); 
      if ($result === TRUE) { 

       $workingDir = sha1(rand().microtime()); 

       // create temporary Folder in runtime 
       if(!is_dir(Yii::getPathOfAlias('webroot').'/protected/runtime/odfImport/'.$workingDir)) 
        CFileHelper::createDirectory(Yii::getPathOfAlias('webroot').'/protected/runtime/odfImport/'.$workingDir,null,true); 

       // Extract Files from odf-container 
       $objZip->extractTo(Yii::getPathOfAlias('webroot')."/protected/runtime/odfImport/".$workingDir); 
       $objZip->close(); 

       // load content.xml 
       $xml = simplexml_load_file(Yii::getPathOfAlias('webroot')."/protected/runtime/odfImport/".$workingDir."/content.xml",'SimpleXMLElement'); 
       // register some prefixes and namespaces 
       $xml->registerXPathNamespace('table','table-cell'); 
       $xml->registerXPathNamespace('text','p'); 
       // output them 
       foreach($xml->xpath('//table:table-cell') as $header) 
       { 
        // model crud operation goes here 
        echo "<pre>"; print_r($header->xpath('//text:p')); echo "</pre>"; 
       } 

       // tidyup 
       CFileHelper::removeDirectory(Yii::getPathOfAlias('webroot').'/runtime/odfImport/'.$workingDir); 
      } 
    } 
} 
相關問題