千家信息网

基于PHP怎么制作通用的Excel导入程序

发表于:2024-11-25 作者:千家信息网编辑
千家信息网最后更新 2024年11月25日,这篇文章主要介绍了基于PHP怎么制作通用的Excel导入程序的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇基于PHP怎么制作通用的Excel导入程序文章都会有所收获,下面
千家信息网最后更新 2024年11月25日基于PHP怎么制作通用的Excel导入程序

这篇文章主要介绍了基于PHP怎么制作通用的Excel导入程序的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇基于PHP怎么制作通用的Excel导入程序文章都会有所收获,下面我们一起来看看吧。

用PowerBuilder写过一个通用的导入程序,程序上也不难。

用前端框架来完成会有一点麻烦,主要在于

1、数据回显

如果是让用户选择一个Excel文件然后就直接入库,那程序就太简单了,问题是要先让用户看到结果,可能的话还可以修改,然后再保存到数据库中。

2、数据保存

因为以前C/S开发使用的是强连接,操作数据后直接提交即可;但现在前端和后端是弱连接,一次交互就需要配置相应参数才可能保存数据,动态的表格保存就有一点小麻烦。

作为一般性的要求,这个程序肯定是要应对数据库中的所有表。

那么只能先将数据表的字段设置传到PHP中,然后PHP提取Excel记录,按照LayUI对表记录的要求封装数据,传回到前端。

具体做法:

1、在数据库中创建表,记录要导入的表信息;

2、在前端列出表,让用户选择要导入的表;

3、根据选择的表,确定字段参数即对应的Excel列;

4、将前端选择传入到PHP中,提取Excel记录,传回前端;

5、用户确定要保存数据,点击保存,数据入库。

一天完成,功能全部正常,后面需要加入一些错误检测,还有文件名应该使用用户名加随机数来存储,这样可以防止多用户冲突,读取完删除。

这个程序主要涉及的就是动态对象、动态属性的创建与赋值。

完成的界面:

程序前端代码:

        〖通用Excel数据表导入〗                                  

后端PHP代码:

setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);$strFalse="";$continue=true;$srcAddr="http://XX.XX.XX.XX";$returnArr=[];//准备返回的数组 if (array_key_exists('HTTP_ORIGIN',$_SERVER)) {        $origin = $_SERVER['HTTP_ORIGIN'];}else if (array_key_exists('HTTP_REFERER',$_SERVER)) {        $origin = $_SERVER['HTTP_REFERER'];}else {        $origin = $_SERVER['REMOTE_ADDR'];}if(substr($origin,0,15)!=substr($srcAddr,0,15)){        $continue=false;        $strFalse="拒绝访问".substr($origin,0,15)."!";}if(!$_SESSION[XxxYyyy']){        $continue=false;        $strFalse="请登录!";     }if($continue){                $OP=!empty($_POST['OP']) ? $_POST['OP'] : '';//得到操作类型                switch($OP){                        case 'getTableList'://数据表列表                                $sql="SELECT c01,c02 FROM dawnTable";                                $result=$ZTBConn->query($sql);                                $rows=$result->fetchAll(PDO::FETCH_ASSOC);                                $returnArr['data']=$rows;                                       break;                        case 'getSetList'://具体表的字段设置项目                                $selectTable=$_POST['selectTable'];                                             $sql1 = "SELECT count(*) FROM dawnField where c01='$selectTable'";                                $res = $ZTBConn->query($sql1);                                $rows = $res->fetch();                                $rowCount = $rows[0];                                $returnArr['code']=0;                                $returnArr['msg']="";                                $returnArr['count']=$rowCount;                                                                                  $sql="SELECT c01,c02,c03,c04,c05,c06,c07,c08,c09 FROM dawnField where c01='$selectTable'";                                $result=$ZTBConn->query($sql);                                $rows=$result->fetchAll(PDO::FETCH_ASSOC);                                $returnArr['data']=$rows;                                break;                        case 'getSet':                                $uploadFile = $_FILES["excelFile"];//得到上传的文件                                $excelBlob=file_get_contents($uploadFile['tmp_name']);                                file_put_contents("./TempFile/123.xls",$excelBlob, FILE_APPEND);//将文件内容写到磁盘上                                $excelData = new Spreadsheet_Excel_Reader();//创建 Reader                                $excelData->setOutputEncoding('utf-8');//设置文本输出编码                                $excelData->read("./TempFile/123.xls");//读取Excel文件                                //准备提取数据                                $excelSet=json_decode($_POST['excelSet'],true);//gettype($excelSet[0])                                $dbRows  =json_decode($_POST['dbRows'],true);                                $excelSetStartRow=$excelSet[0]['excelSet']['excelSetStartRow'];//起始行                                $excelSetEndRow  =$excelSet[0]['excelSet']['excelSetEndRow'];//结束行                                $excelSheet=$excelSet[0]['excelSet']['excelSheet']-1;//工作簿序号                                 $returnArr['code']=0;                                $returnArr['msg']="";                                $returnArr['count']=$excelSetEndRow - $excelSetStartRow +1;                                                                $data=[];                                try{                                                for ($i = $excelSetStartRow; $i <= $excelSetEndRow; $i++) {                                                                for($K=0;$Ksheets[$excelSheet]['cells'][$i][$fieldExcelCol] )){                                                                                        $fieldData=$excelData->sheets[$excelSheet]['cells'][$i][$fieldExcelCol];                                                                                }else{                                                                                        $fieldData='';                                                                                 }                                                                                //装入数组                                                                                $dbRows[$fieldName]=$fieldData;                                                                }                                                                array_push($data,$dbRows);                                                }                                }catch(PDOException $e){                                        $returnArr['data']=$e.getMessage();                                }                                $returnArr['data']=$data;                                break;                        case 'saveData':                                $insertSql=$_POST['insertSql'];                                         $assignSql=$_POST['assignSql'];                                         $tableName=$_POST['tableName'];                                         try{                                        $sql = "insert into $tableName($insertSql) values($assignSql)";                                        $result =$ZTBConn->exec($sql);                                        if ( $result>0 ) {                                                $returnArr['data']='OK';                                        }else{                                                $returnArr['data']="数据插入错误!";                                        }                                       }catch(Exception $exception){                                        $returnArr['data']=$exception->getMessage();                                }                                break;                        default:                                        $returnArr['data']="不支持的操作!";                                        break;                }}else{        $returnArr=$strFalse;}header('Content-type:text/json');echo json_encode($returnArr,JSON_UNESCAPED_UNICODE);//返回JSON格式的数据?>

关于"基于PHP怎么制作通用的Excel导入程序"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"基于PHP怎么制作通用的Excel导入程序"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。

0