如何使用YII将打开的文档电子表格导入数据库

时间:2015-07-20 06:44:28

标签: yii phpexcel

我将用户详细信息存储在打开的文档电子表格中我希望以相同的格式将用户详细信息上传到数据库,但它无法正常工作。但是在CSV格式中,它工作正常。所以我的要求是要将打开的文档电子表格详细信息上传到我试过的数据库,但它无法正常工作。我正在使用yii-1.1

我的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();
                }                   
            }

1 个答案:

答案 0 :(得分:0)

示例文件

odf-file:单元格a1,a2,b1,b2填充文本。

第1步:解压缩ODF文件

odf-formar只不过是一个容器。 因此,您可以使用PHP内置类" ZipArchive"解压缩容器。 我建议在protected / runtime中创建一个临时文件夹,在这个中我打电话给 文件夹" 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文件。在这个时候,我们的重点放在" content.xml"上。这个文件包含 我们的内容。

第2步:解析content.xml

对于这项工作,你可以使用" SimpleXMLElement"和帮助" simplexml_load_file"。 有关更多信息,请参阅文档。 您还需要配置XML-Document的前缀和名称空间。 要获得帮助,您可以使用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);
            }
    } 
}