phpexcel codeigniter验证检查一行中的单元格是否为空
我在我的codeigniter 3中使用phpexcel具有“从excel导入”功能,但我想创建一个验证系统来检查某些单元格是否为空,并可以在数据导入到数据库之前检测哪些列和行为空。如果检测到,导入功能应停止 这是控制器:phpexcel codeigniter验证检查一行中的单元格是否为空,php,codeigniter,phpexcel,codeigniter-3,Php,Codeigniter,Phpexcel,Codeigniter 3,我在我的codeigniter 3中使用phpexcel具有“从excel导入”功能,但我想创建一个验证系统来检查某些单元格是否为空,并可以在数据导入到数据库之前检测哪些列和行为空。如果检测到,导入功能应停止 这是控制器: public function do_upload(){ $config['upload_path'] = './tempDat/'; $config['allowed_types'] = 'xlsx|xls'; $this->load-&
public function do_upload(){
$config['upload_path'] = './tempDat/';
$config['allowed_types'] = 'xlsx|xls';
$this->load->library('upload', $config);
if ( ! $this->upload->do_upload()){
$error = array('error' => $this->upload->display_errors());
}
else{
$data = array('upload_data' => $this->upload->data());
$upload_data = $this->upload->data();
$filename = $upload_data['file_name'];
$this->client->upload_data($filename);
// unlink('./tempDat/'.$filename);
redirect('client/upload','refresh');
}
}
以下是我已经尝试过的模型:
public function upload_data($filename){
ini_set('memory_limit', '-1');
$inputFileName = './tempDat/'.$filename;
try {
$objPHPExcel = PHPExcel_IOFactory::load($inputFileName);
} catch(Exception $e) {
die('Error loading file :' . $e->getMessage());
}
$worksheet = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
$numRows = count($worksheet);
$objWorksheet = $objPHPExcel->getActiveSheet();
$highestRow = $objWorksheet->getHighestRow();
$highestColumn = $objWorksheet->getHighestColumn();
for ($i=2; $i < ($numRows+1) ; $i++) {
$test = $objPHPExcel->getActiveSheet()->rangeToArray('A1:A'.$i);
if( $test != NULL ) {
$ins = array(
"eng_code" => $worksheet[$i]["B"],
"name_1" => $worksheet[$i]["C"],
"name_2" => $worksheet[$i]["D"],
"divisi" => $worksheet[$i]["E"],
"title" => $worksheet[$i]["F"],
"sex" => $worksheet[$i]["G"],
"date_of_birth" => $worksheet[$i]["H"],
"date_of_commencement" => $worksheet[$i]["I"],
"salary_min_1" => $worksheet[$i]["J"],
"allowance_min_1" => $worksheet[$i]["K"],
"salary" => $worksheet[$i]["L"],
"allowance" => $worksheet[$i]["M"],
"termination_date" => $worksheet[$i]["N"],
"type_of_termination" => $worksheet[$i]["O"],
"manfaat_termination" => $worksheet[$i]["P"],
"basic_salary_at" => $worksheet[$i]["Q"],
"basic_allowance_at" => $worksheet[$i]["R"],
"status_employee_min_1" => $worksheet[$i]["S"],
"status_employee" => $worksheet[$i]["T"],
);
$this->db->insert('tb_eec', $ins);
} else {
if( $test == NULL || $test == '') {
$this->session->set_flashdata('pesan', '<div style="color:blue;"><b>Kolom '.$worksheet[1]["A"].' Baris '.$i.' Belum diisi !</b></div>');
}
}
}
}
public函数上传数据($filename){
ini_集('内存限制','-1');
$inputFileName='./tempDat/'.$filename;
试一试{
$objPHPExcel=PHPExcel\u IOFactory::load($inputFileName);
}捕获(例外$e){
die('加载文件时出错:'.$e->getMessage());
}
$worksheet=$objPHPExcel->getActiveSheet()->toArray(null、true、true、true);
$numRows=计数($worksheet);
$objWorksheet=$objPHPExcel->getActiveSheet();
$highestRow=$objWorksheet->getHighestRow();
$highestColumn=$objWorksheet->getHighestColumn();
对于($i=2;$i<($numRows+1);$i++){
$test=$objPHPExcel->getActiveSheet()->rangeToArray('A1:A'.$i);
如果($test!=NULL){
$ins=数组(
“工程代码”=>$工作表[$i][“B”],
“name_1”=>$worksheet[$i][“C”],
“name_2”=>$worksheet[$i][“D”],
“divisi”=>$工作表[$i][“E”],
“title”=>$工作表[$i][“F”],
“sex”=>$worksheet[$i][“G”],
“出生日期”=>$WORKEY[$i][“H”],
“开工日期”=>$工作表[$i][“i”],
“工资最低值1”=>$WORKEY[$i][“J”],
“津贴最低额1”=>$工作表[$i][“K”],
“工资”=>$WORKEY[$i][“L”],
“津贴”=>$工作表[$i][“M”],
“终止日期”=>$工作表[$i][“N”],
“终止类型”=>$WORKEY[$i][“O”],
“manfaat_终止”=>$worksheet[$i][“P”],
“基本工资”=>$WORKEM[$i][“Q”],
“基本津贴”=>$WORKEY[$i][“R”],
“状态\u员工\u最小\u 1”=>$worksheet[$i][“S”],
“status_employee”=>$工作表[$i][“T”],
);
$this->db->insert('tb_eec',$ins);
}否则{
如果($test==NULL | |$test==''){
$this->session->set_flashdata('pesan','Kolom'.$sheet[1][“A”]。'Baris'.$i.'Belum diisi!');
}
}
}
}
我尝试了许多不同的方法,但结果总是一样的,我的函数总是继续导入数据,即使某些单元格是空的
请帮帮我:)我认为这就是你想要的,对吗
$inserts = array();
for ($i=2; $i < ($numRows+1) ; $i++) {
$test = $objPHPExcel->getActiveSheet()->rangeToArray('A1:A'.$i);
$do_insert = true;
foreach (range('B','T') as $let){
if (empty($worksheet[$i][$let])){
$do_insert = false;
}
}
if ($do_insert){
$inserts[] = array(
"eng_code" => $worksheet[$i]["B"],
"name_1" => $worksheet[$i]["C"],
"name_2" => $worksheet[$i]["D"],
"divisi" => $worksheet[$i]["E"],
"title" => $worksheet[$i]["F"],
"sex" => $worksheet[$i]["G"],
"date_of_birth" => $worksheet[$i]["H"],
"date_of_commencement" => $worksheet[$i]["I"],
"salary_min_1" => $worksheet[$i]["J"],
"allowance_min_1" => $worksheet[$i]["K"],
"salary" => $worksheet[$i]["L"],
"allowance" => $worksheet[$i]["M"],
"termination_date" => $worksheet[$i]["N"],
"type_of_termination" => $worksheet[$i]["O"],
"manfaat_termination" => $worksheet[$i]["P"],
"basic_salary_at" => $worksheet[$i]["Q"],
"basic_allowance_at" => $worksheet[$i]["R"],
"status_employee_min_1" => $worksheet[$i]["S"],
"status_employee" => $worksheet[$i]["T"],
);
}
}
if (count($inserts)){
foreach ($inserts as $ins){
$this->db->insert('tb_eec', $ins);
}
} else {
$this->session->set_flashdata('pesan', '<div style="color:blue;"><b>Kolom '.$worksheet[1]["A"].' Baris '.$i.' Belum diisi !</b></div>');
}
$inserts=array();
对于($i=2;$i<($numRows+1);$i++){
$test=$objPHPExcel->getActiveSheet()->rangeToArray('A1:A'.$i);
$do_insert=true;
foreach(范围('B','T')为$let){
如果(空($WORKSET[$i][$let])){
$do_insert=false;
}
}
如果($do_插入){
$inserts[]=数组(
“工程代码”=>$工作表[$i][“B”],
“name_1”=>$worksheet[$i][“C”],
“name_2”=>$worksheet[$i][“D”],
“divisi”=>$工作表[$i][“E”],
“title”=>$工作表[$i][“F”],
“sex”=>$worksheet[$i][“G”],
“出生日期”=>$WORKEY[$i][“H”],
“开工日期”=>$工作表[$i][“i”],
“工资最低值1”=>$WORKEY[$i][“J”],
“津贴最低额1”=>$工作表[$i][“K”],
“工资”=>$WORKEY[$i][“L”],
“津贴”=>$工作表[$i][“M”],
“终止日期”=>$工作表[$i][“N”],
“终止类型”=>$WORKEY[$i][“O”],
“manfaat_终止”=>$worksheet[$i][“P”],
“基本工资”=>$WORKEM[$i][“Q”],
“基本津贴”=>$WORKEY[$i][“R”],
“状态\u员工\u最小\u 1”=>$worksheet[$i][“S”],
“status_employee”=>$工作表[$i][“T”],
);
}
}
如果(计入($inserts)){
foreach($ins作为$ins插入){
$this->db->insert('tb_eec',$ins);
}
}否则{
$this->session->set_flashdata('pesan','Kolom'.$sheet[1][“A”]。'Baris'.$i.'Belum diisi!');
}
感谢您的回复,但不幸的是,这不是我想要的。。如果我有5行数据,即使每个单元格都不是空的,也只能向数据库插入一个数据。如果A3列有空单元格,它仍然会将第一行插入数据库。我想要的是,如果系统检测到任何空单元格,则不会向数据库插入任何数据。对不起,结果仍然相同。如果每个单元格都已完成,则只插入第一行,如果第二行的单元格为空,则系统仍会插入第一行。仅当一列全部为空(即B1:B5)时,它才起作用。有什么想法吗(啊,我明白了,如果系统发现空单元格,要停止所有进程,只需在检查$do_insert false或not时添加重定向即可。谢谢@AntonyGlad you got:o)