Saludos,
Necesito determina si excel está instalador para evitar incidencia en mi aplicación, evitando que el usuario lo reporte como una falla. preferiblemente indicarle mediante mensaje : Por favor instale excel.
Agradecidos por sus aportes.
Function ImportarProv(oCn)
local cExcel, oExcel, oHoja, oWorkBook, nROws, nROs, cTmp, cNRuc, cNomb, nROw, cINsert, lOk, oDat
Return(Nil)
cExcel := cGetFile( "XLSx (*.xlsx)| *.xls|*.xlsx", "Seleccione la Hoja Excel", 2 ) ;
IF EMPTY(cExcel)
Return(Nil)
EndIf
TRY
oExcel:= TOleAuto():New("Excel.Application")
CATCH
MsgInfo("La Hoja de Calculo No Está Instala", "Alerta")
Return(Nil)
END
oExcel:Visible := .f. // .t. por si quieres ver la hoja abierta
oWorkbook := oExcel:WorkBooks:OPEN(cExcel)
oWorkbook := oExcel:GET("ActiveWorkBook")
oHoja := oExcel:GET("ActiveSheet")
nRows := oHoja:UsedRange:Rows:Count()
FOR nRow := 2 TO nRows // obviamos los nombres de columnas
CURSORWAIT()
cTmp := oHoja:Cells(nRow, 1):Value
TRY
IF VALTYPE(cTmp) = "N"
cNRuc := ALLTRIM(STR(cTmp,11,0))
EndIf
If VALTYPE(cTmp) = "U"
cNRUc := "00000000"
EndIf
If VALTYPE(cTmp) = "C"
cNRuc := ALLTRIM(cTmp)
EndIf
cTmp := oHoja:Cells(nRow, 2):Value
IF VALTYPE(cTmp) <> "C"
cNomb := "NN"
Else
cNomb := ALLTRIM(cTmp)
EndIf
CATCH
cNomb := "NN"
END
cNomb := UPPER(ALLTRIM(cNomb))
cNomb := LimpiaChar(cNomb)
oDat := SQLQry(oCn, oDat, "SELECT ruc_dni FROM proveedor WHERE ruc_dni = '" + cNRuc + "'")
If oDat:RecCount() = 0
cInsert := "INSERT IGNORE INTO proveedor SET ruc_dni = '" + cNRuc + "', razon_social = '" + cNomb + "'"
TRY
lOk := SQLExec(oCn, cInsert)
CATCH
lOK := .t.
END
EndIf
SysRefresh()
NEXT nRow
oWorkBook:CLOSE( .F. ) //oExcel:WorkBooks:End()
oExcel:Quit()
oExcel := NIL
CURSORARROW()
// C:\FWH\SAMPLES\EXCELREM.PRG - kapiabafwh@gmail.com - 23/09/2022
#Include "FiveWin.ch"
// Defines para o segundo parâmetro - Ejemplo by Rochinha. FiveWin Brasil.
#define xlCSV 6 // CSV *.csv
#define xlCSVMSDOS 24 // MSDOS CSV *.csv
#define xlCSVWindows 23 // Windows CSV *.csv
#define xlDBF3 8 // Dbase 3 format *.dbf
#define xlExcel8 56 // Excel 97-2003 Workbook *.xls
#define xlHtml 44 // HTML format *.htm; *.html
#define xlTextMSDOS 21 // MSDOS Text *.txt
FUNCTION Main()
HB_GCALL( .F. )
SET CENTURY ON
SET DATE BRITISH
SET TIME FORMAT TO "HH:MM:SS"
SET EPOCH TO YEAR( DATE() ) - 30
SET SOFTSEEK OFF
SET WRAP ON
SETCANCEL( .F. )
SET CONFIRM OFF
SET DELETED ON
SET _3DLOOK ON
SET UNIQUE OFF
SET ESCAPE OFF
SET EXACT ON // CONTROLA O :=, = e ==
SET EXCLUSIVE OFF
SET MULTIPLE OFF
MsgRun( "AGUARDE... ABRINDO OS BANCOS DE DADOS. ", ;
"Por Favor, Espere Abertura. Pode demorar.", ;
{ || WinExec( Excel_Remtec() ), 3 } )
DbCommitAll()
DbUnLockAll()
DbCloseAll()
FreeResources()
Release All
SysRefresh()
HB_GCALL( .T. )
CLEAR MEMORY
PostQuitMessage( 0 )
QUIT
RETURN NIL
FUNCTION Excel_Remtec()
LOCAL oExcel, oWorkbook, oWorksheet
TRY
oExcel := TOleAuto():New( "Excel.Application" )
CATCH
TRY
oExcel = CreateObject( "Excel.Application" )
CATCH
MsgInfo( "Excel is not installed on this PC. " + ;
"You need Excel to continue", "Ooooopppsss" )
RETURN( .F. )
END
END
oWorkbook := oExcel:WorkBooks
// Apertura del *.DBF
oWorkbook:Open( "c:\temp\REMTEC.DBF" )
oExcel:DisplayAlerts := .F.
oExcel:Visible := .T.
oWorksheet := oExcel:Get( "ActiveSheet" )
// Graba
oWorksheet:SaveAs( "c:\temp\tabela.CSV", 6 ) // Segundo parâmetro informa o tipo de saída
oWorksheet:SaveAs( "c:\temp\tabela.XLS", 56 ) // Segundo parâmetro informa o tipo de saída
RETURN NIL
// FIN
oExcel := ExcelObj()
if oExcel == nil
MsgAlert( FWString( "Excel not installed" ), FWString( "Alert" ) )
endif
Return to FiveWin para Harbour/xHarbour
Users browsing this forum: lubin and 80 guests