php - 要上传 Excel 并将其存储在数据库中?

标签 php excel codeigniter

我想上传一个Excel文件到我们的网页,然后将相应的数据存储到数据库中。然后我想检索所有数据并以表格格式显示。我只有一个代码,但使用它我无法上传所有 Excel 文件。只能上传一种格式。

下面是函数。但是有一些限制。

 public function check_excel($filename)
        {   
            $path='./assets/uploads/excel/'.$filename;
            $this->load->library('excel');  
            $inputFileType = PHPExcel_IOFactory::identify($path);
            $objReader = PHPExcel_IOFactory::createReader($inputFileType);
            $objPHPExcel = PHPExcel_IOFactory::load($path);
            $sheet = $objPHPExcel->getSheet(0); 
            $highestRow = $sheet->getHighestRow();
            $highestColumn = $sheet->getHighestColumn();
            $xf[]='';
            $result[]='';
            $first_check='';
            $var_check=0;

            for ($row = 13; $row <= $highestRow; $row++)
            {           
                $xf[$row]=$objPHPExcel->getActiveSheet()->getCell('A'.$row)->getXfIndex(); // Get sheet index value
                if($row>13 && $row<16) //This block check first kpi data expand or not
                { 
                    if($xf[$row-1]==$xf[$row]) //check parent and child sheet index value same 
                        $first_check='false';
                    if ($row==15) 
                    {
                        if($xf[$row]==$xf[$row-1] || $xf[$row]==$xf[$row-2]) // check the grand-child sheet index value same in parent and child
                            $first_check='false';
                        else
                        {   
                            $first_check='true';
                            $a=$row-2;
                            $b=$row-1;
                            $check_kpi=$objPHPExcel->getActiveSheet()->getCell('A'.$a)->getXfIndex(); 
                            $check_unit=$objPHPExcel->getActiveSheet()->getCell('A'.$b)->getXfIndex(); 
                            $check_sub_unit=$objPHPExcel->getActiveSheet()->getCell('A'.$row)->getXfIndex(); 
                        }
                    }       
                }
                if($first_check=='true') //This block check second kpi to upto last kpi data expand or not 
                {
                    if($row>15)
                    {
                        if($var_check==1) // This block check the child data expand or not
                        {
                            if($check_unit!=$objPHPExcel->getActiveSheet()->getCell('A'.$row)->getXfIndex())
                            {
                                $result[$row]='false';
                                break;
                            }
                        }
                        if($var_check==2) // this block check the grand - child data expand or not
                        {
                            if($check_sub_unit!=$objPHPExcel->getActiveSheet()->getCell('A'.$row)->getXfIndex())
                            {
                                $result[$row]='false';
                                break;                          
                            }
                        }
                        if($xf[$row]!=$check_sub_unit)
                        {
                            if($xf[$row]!=$check_unit)
                                $var_check=1; // var_check value is one, the kpi is present
                            else
                                $var_check=2; // var_check value is two, the unit is present
                        }
                        else
                            $var_check=0; // var_check value is zero, the sub_unit is present
                    }   
                }
                else if($first_check=='false')
                {
                    $result[$row]='false';
                    break;
                }           
            }
            $return='true';
            for ($row = 13; $row <= $highestRow; $row++)
            {
                if(!empty($result[$row]))
                {
                    if($result[$row]=='false'){
                        $return='false';
                        break;
                    }                   
                }
            }
            return $return;
        }

最佳答案

听起来您正在使用关系数据库(例如 MySQL、Postgres 等),它使用固定列表。

您可能应该使用基于文档的数据库(例如 CouchDB、Mongo 等)。这将是最好的解决方案。

但是,如果您无法使用关系数据库,您可以使用 EAV model .

这是一个基本的例子:

  1. 为实体创建一个表(excel文件):EntityID,ExcelFileName
  2. 为属性(列信息)创建一个表:AttributeID、EntityID、AttributeName
  3. 为值(excel 行/列)创建一个表:ValueID、RowNumber、AttributeID、AttributeValue

缺点是 AttributeValue 不是特定类型的(它只是 varchar/text)。您可以通过向属性表添加“AttributeType”来解决此问题,然后在您的代码中使用该属性表来了解该列应包含的数据类型。但是,除非您事先知道 Excel 文件的内容/格式,否则您可能不得不猜测列的类型是什么......只要 excel 文件没有弄乱,这并不难。

如果您只是显示导入的数据,这可能没什么大不了的。

如果您有这样的需要,还有其他(更复杂的)方法来实现 EAV,包括带有类型化列的方法。

关于php - 要上传 Excel 并将其存储在数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21305596/

相关文章:

php - pg_fetch_assoc 返回 bool 值

php - 需要评估 Joomla 是否适合 Web 应用程序需求

php - 在一天中的特定时间禁用项目php

php - 使用 codeigniter 上传 Canvas 图像

vba - 在几张纸中粘贴列

php - CodeIgniter 配置文件中的自定义验证错误消息

Excel : calculate a column only

JavaFX 动态添加行和列到 TableView

javascript - Codeigniter:在控制台上未获得第二次结果,但 Ajax 并未失败

php - 如何在 Codeigniter 的分页类中隐藏页面链接?