Estoy tratando de leer un archivo de lista de precios en Excel para actualizar una tabla de una base de datos, el código para leer el archivo Excel lo tomé de este mismo foro; donde tengo problemas es en obtener la fila hasta la cual debe leer el programa, es decir hasta el final de la lista de precios.
Con lo que leí aún no puedo obtener lo que se requiere ya que me indica un número de fila muy alejado de lo que corresponde, también si alguno me de ustedes me puede ayudar, no logro ver por qué el código en ocasiones funciona sin problema y en otras marca error de método no encontrado etc.
Aquí el código:
Code: Select all
procedure main
DEFINE WINDOW Form_Main ;
AT 0,0 ;
WIDTH 400 ;
HEIGHT 200 ;
MAIN NOMAXIMIZE NOSIZE ;
TITLE 'Actualizar precios venta'
DEFINE BUTTON Button_1
ROW 10
COL 10
CAPTION "Seleccionar archivo lista precios (Excel)"
ACTION ExcelTest()
WIDTH 280
HEIGHT 27
END BUTTON
END WINDOW
CENTER WINDOW Form_Main
ACTIVATE WINDOW Form_Main
return
/*
*
*/
function ExcelTest
local oExcel, oCnn, cReadData, cQry
cReadData := Getfile( { {'Archivos Excel','*.xls'} } , 'Seleccionar archivo' )
if Empty( cReadData )
MsgBox( "No seleccionó archivo" )
return
endif
if ( oCnn := win_OleCreateObject( "ADODB.Connection" ) ) == NIL
MsgStop( 'Error de conexión: [' + win_oleErrorText() + ']' )
return NIL
else
oCnn:Open( "Provider=SQLNCLI11;Server=127.0.0.1\MyServer;Database=MyBD;Uid=MyUser;Pwd=MyPass;" )
endif
if ( oExcel := win_oleCreateObject( 'Excel.Application' ) ) == NIL
MsgStop( 'Error: Microsoft Excel no está disponible. [' + win_oleErrorText() + ']' )
return NIL
endif
oExcel:Workbooks:Open( cReadData )
oExcel:Visible := .T.
//Determine Last Cell At This Point
//lastRow = oExcel:WorkSheets(1):UsedRange:ROWS:COUNT
//lastrow = oExcel:WorkSheets(1):UsedRange:Row - 1 + oExcel:WorkSheets(1):UsedRange:Rows:Count
//MsgBox( LastRow )
for i = 2 to 12
codigo := oExcel:WorkSheets(1):cells(i,1):value
precio_publico := oExcel:WorkSheets(1):cells(i,3):value
Precio_contado := oExcel:WorkSheets(1):cells(i,4):value
precio_taller := oExcel:WorkSheets(1):cells(i,5):value
precio_distribuidor := oExcel:WorkSheets(1):cells(i,6):value
/*
MsgBox( Valtype( codigo ) )
MsgBox( Valtype( precio_publico ) )
MsgBox( Valtype( Precio_contado ) )
MsgBox( Valtype( precio_taller ) )
MsgBox( Valtype( precio_distribuidor ) )
MsgBox( codigo )
MsgBox( precio_publico )
MsgBox( precio_contado )
MsgBox( precio_taller )
MsgBox( precio_distribuidor )
*/
cQry := "UPDATE admProductos SET " + ;
"cprecio1 =" + DataToSql( precio_publico ) + ", " + ;
"cprecio2 =" + DataToSql( precio_contado ) + ", " + ;
"cprecio3 =" + DataToSql( precio_taller ) + ", " + ;
"cprecio4 =" + DataToSql( precio_distribuidor ) + " " + ;
"WHERE ccodigoproducto =" + DataToSql( codigo )
//MsgBox( cQry )
oCnn:Execute( cQry )
next
MsgInfo( "Proceso Terminado..." )
Form_Main.Button_1.Enabled := .f.
oExcel:Quit()
oCnn:Close() // cierra conexión
return
Saludos,
Javier