import Excel

Raccoglitore di domande e risposte relative a ScriptCase, il generatore di codice php per lo sviluppo rapido di applicazioni.
Regole del forum
Nel forum è vietato fare pubblicità senza avere l'autorizzazione dello staf di Netspecial.
Rispondi
Maurizion
Messaggi: 8
Iscritto il: 10 ott 2018, 15:55

import Excel

Messaggio da Maurizion » 09 apr 2019, 16:46

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");
Ultima modifica di Maurizion il 09 apr 2019, 18:38, modificato 1 volta in totale.

Fabio
Messaggi: 449
Iscritto il: 20 feb 2014, 11:43

Re: import Excel

Messaggio da Fabio » 09 apr 2019, 17:02

Che tipo di errore si verifica? c'è un messaggio di errore?

Maurizion
Messaggi: 8
Iscritto il: 10 ott 2018, 15:55

Re: import Excel

Messaggio da Maurizion » 09 apr 2019, 17:34

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:

Vincenzo
Messaggi: 139
Iscritto il: 11 apr 2014, 11:06

Re: import Excel

Messaggio da Vincenzo » 09 apr 2019, 19:37

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.

Maurizion
Messaggi: 8
Iscritto il: 10 ott 2018, 15:55

Re: import Excel

Messaggio da Maurizion » 10 apr 2019, 09:41

nn riesco a farla andare :?:

rino
Messaggi: 660
Iscritto il: 18 giu 2015, 15:42
Località: Pinerolo
Contatta:

Re: import Excel

Messaggio da rino » 10 apr 2019, 13:10

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
Rino Lo Turco
Consulente Informatico; Analista e Sviluppatore; ex IT Manager; Cons. Direzionale di Organizzazione; Consulente Tecnico legale; Esperto protezione dati personali; Internet Service Provider
felice utente e fruitore di ScriptCase

Rispondi

Chi c’è in linea

Visitano il forum: Ahrefs [Bot], Semrush [Bot] e 7 ospiti