Pagina 1 di 1

import Excel

Inviato: 09 apr 2019, 16:46
da Maurizion
Salve, premetto che sono alle prime esperienze con scriptcase.
ho creato un applicazione di controllo per delle importazioni massive da xls,
tutto funziona regolarmente ad eccezione de campi data,
potete darmi indicazioni in merito ?

questo il codice usato
on onScriptInit
require_once('../../../..'.$this->Ini->path_prod.'/third/phpexcel/PHPExcel.php');
require_once('../../../..'.$this->Ini->path_prod.'/third/phpexcel/PHPExcel/IOFactory.php');

onValidateSuccess
$fileXlsX = explode('.',$this->xls_input_ul_name);
$tabella = {tabella};
if($fileXlsX[1]=='xlsx'){
//xlsx

$inputFileName = "../../../tmp/".$this->xls_input_ul_name;
$inputFileType = PHPExcel_IOFactory::identify($inputFileName);
$objReader = PHPExcel_IOFactory::createReader($inputFileType);

$objPHPExcel = $objReader->load($inputFileName);
$worksheetData = $objReader->listWorksheetInfo("../../../tmp/".$this->xls_input_ul_name);
$totalRows = $worksheetData[0]['totalRows'];
$totalColumns = $worksheetData[0]['totalColumns'];
$lastColumn = $objPHPExcel->getActiveSheet()->getHighestColumn();
$sheet = $objPHPExcel->getSheet(0);
$columnNames="";
$rowDate ="";

for($colum=0;$colum<$totalColumns;$colum++){
if($colum==$totalColumns-1){
$columnNames.= utf8_decode($objPHPExcel->getActiveSheet()->getCellByColumnAndRow($colum, 1)->getValue());
}else{
$columnNames.= utf8_decode($objPHPExcel->getActiveSheet()->getCellByColumnAndRow($colum, 1)->getValue()).",";
}

}
for ($row = 2; $row <= $totalRows; $row++){
for($colum=0;$colum<$totalColumns;$colum++){


if($colum==$totalColumns-1){
$rowDate .= "'".utf8_decode($objPHPExcel->getActiveSheet()->getCellByColumnAndRow($colum, $row)->getValue())."'";
}else{
$rowDate .= "'".utf8_decode($objPHPExcel->getActiveSheet()->getCellByColumnAndRow($colum, $row)->getValue())."',";
}
}
sc_exec_sql("INSERT INTO $tabella (".$columnNames.") VALUES (".$rowDate.")");

$rowDate="";
}


}else{
//xls
$objReader = new PHPExcel_Reader_Excel5();
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load("../../../tmp/".$this->xls_input_ul_name);
$worksheetData = $objReader->listWorksheetInfo("../../../tmp/".$this->xls_input_ul_name);
$totalRows = $worksheetData[0]['totalRows'];
$totalColumns = $worksheetData[0]['totalColumns'];
$lastColumn = $objPHPExcel->getActiveSheet()->getHighestColumn();
$sheet = $objPHPExcel->getSheet(0);
$columnNames="";
$rowDate ="";

for($colum=0;$colum<$totalColumns;$colum++){
if($colum==$totalColumns-1){
$columnNames.= utf8_decode($objPHPExcel->getActiveSheet()->getCellByColumnAndRow($colum, 1)->getValue());
}else{
$columnNames.= utf8_decode($objPHPExcel->getActiveSheet()->getCellByColumnAndRow($colum, 1)->getValue()).",";
}

}
for ($row = 2; $row <= $totalRows; $row++){
for($colum=0;$colum<$totalColumns;$colum++){


if($colum==$totalColumns-1){
$rowDate .= "'".utf8_decode($objPHPExcel->getActiveSheet()->getCellByColumnAndRow($colum, $row)->getValue())."'";
}else{
$rowDate .= "'".utf8_decode($objPHPExcel->getActiveSheet()->getCellByColumnAndRow($colum, $row)->getValue())."',";
}
}

sc_exec_sql("INSERT INTO $tabella (".$columnNames.") VALUES (".$rowDate.")");
$rowDate="";

}
}
sc_alert("Dati importati con successo");

Re: import Excel

Inviato: 09 apr 2019, 17:02
da Fabio
Che tipo di errore si verifica? c'è un messaggio di errore?

Re: import Excel

Inviato: 09 apr 2019, 17:34
da Maurizion
se nel file di excel il formato data è il seguente 01/01/2018
mi restituisce errore sql
1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Chiamata,Data Apertura,Stato) VALUES ('0013517488','43242.656944444','Riassegnat' at line 1
ADOConnection._Execute(INSERT INTO scaricott (Numero Chiamata,Data Apertura,Stato) VALUES ('0013517488','43242.656944444','Riassegnato'), false) % line 1149, file: adodb.inc.php
ADOConnection.Execute(INSERT INTO scaricott (Numero Chiamata,Data Apertura,Stato) VALUES ('0013517488','43242.656944444','Riassegnato')) % line 1687, file: control_apl.php
control_apl.Valida_campos(null, null, null) % line 1086, file: control_apl.php
control_apl.controle() % line 1947, file: index.php

mentre se passo il file nel formato 2018-01-01 viene importato correttamente
Grazie :oops:

Re: import Excel

Inviato: 09 apr 2019, 19:37
da Vincenzo
Se il dato è memorizzato come data excel, di fatto è un numero, prova a convertire il valore con la funzione ExcelToPHP
$date = date('Y-m-d',PHPExcel_Shared_Date::ExcelToPHP($objWorksheet->getCellByColumnAndRow(1, $i)->getValue()));
non l'ho provata ma mi ero imbattuto anche io in un problema simile.

Re: import Excel

Inviato: 10 apr 2019, 09:41
da Maurizion
nn riesco a farla andare :?:

Re: import Excel

Inviato: 10 apr 2019, 13:10
da rino
prima di scrivere popola una variabile locale e converti il formato , puoi usare anche le macro sc cosi non ti preoccupi di vedere come è definito il db