我想将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型号.
这是一个基本示例:
- 为实体创建表(excel文件):EntityID、ExcelFileName
- 为属性创建一个表(列信息):AttributeID、EntityID、AttributeName
- 为值创建表格(Excel 行/列):ValueID、RowNumber、AttributeID、AttributeValue
缺点是 AttributeValue 没有专门键入(它只是 varchar/text)。您可以通过向属性表添加“AttributeType”来解决此问题,然后在代码中使用该属性表来了解该列应包含什么类型的数据。但是,除非您事先知道 Excel 文件的内容/格式,否则您可能必须猜测列的类型是什么……只要 Excel 文件不混乱,这并不难。
如果您只是显示导入的数据,这可能不是什么大问题。
如果您有这样的需要,还有其他(更复杂)的方法来实现 EAV,包括带有类型列的方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)