FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Error al crear Excel, por que?
Posts: 3386
Joined: Fri Oct 07, 2005 08:20 PM

Error al crear Excel, por que?

Posted: Sun Nov 08, 2026 02:09 AM

Foreros:

En una LAN

Con el siguiente c贸digo

   oExcel := CREATEOBJECT( "Excel.Application" )
   oBook  := oExcel:WorkBooks:Add()					<======= Aqi marca error
	FOR nVez := oBook:Sheets:Count() TO 2 STEP -1
		oBook:WorkSheets(nVez):Delete()
	NEXT
	oSheet := oExcel:Get("ActiveSheet")

Me tira el siguiente error
Error description: (DOS Error -2147023170) WINOLE/1007 Argument error: ADD

Excel esta instalado, y lo m谩s triste y curioso es que solo en el servidor tira el error
en las terminales no hay problema.

Alguna sugerencia?

Saludos

SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 269
Joined: Fri Sep 25, 2026 01:40 AM

Re: Error al crear Excel, por que?

Posted: Sun Nov 08, 2026 02:18 AM

Armando, hay un dato importante en ese n煤mero: -2147023170 corresponde a 0x800706BE, cuyo c贸digo Windows es RPC_S_CALL_FAILED, 芦la llamada a procedimiento remoto fall贸禄. Aunque el mensaje de WINOLE diga 芦Argument error: ADD禄, eso no demuestra que falte un argumento: Microsoft documenta Workbooks.Add con Template opcional.

Tampoco significa necesariamente un fallo de la LAN: la llamada de automatizaci贸n a Excel puede fallar en el propio equipo. Que Excel est茅 instalado no garantiza que pueda crear un libro en la cuenta y sesi贸n desde las que ejecutas el programa.

Primero separar铆a estos casos:

  • En el servidor, con la misma cuenta de Windows que ejecuta tu aplicaci贸n, 驴Excel abre manualmente y permite crear y guardar un libro nuevo? Comprueba si aparece alg煤n aviso pendiente; no hace falta cambiar permisos para esta prueba.
  • 驴El EXE se ejecuta all铆 en una sesi贸n de usuario abierta, o desde un servicio/tarea programada sin sesi贸n interactiva? La advertencia de Microsoft sobre automatizaci贸n desatendida de Office se refiere a ese contexto, no simplemente a que el equipo se llame 芦servidor禄.
  • Indica Windows, versi贸n de Excel, FWH y Harbour/xHarbour del equipo que falla, y si al producirse el error Excel se cierra o queda alg煤n aviso visible. Si el Visor de eventos registra un fallo de EXCEL.EXE en ese instante, bastan el c贸digo y m贸dulo del fallo, sin nombres de documentos ni datos privados.

Con eso podremos distinguir un problema de inicio/perfil/contexto de ejecuci贸n de un fallo posterior de Excel. No dar铆a todav铆a como soluci贸n reinstalar Office, ejecutar como administrador, abrir puertos ni modificar DCOM. No he reproducido tu equipo y el c贸digo de error por s铆 solo no fija la causa.

Fuentes Microsoft:
https://learn.microsoft.com/en-us/windows/win32/debug/system-error-codes--1700-3999-
https://learn.microsoft.com/en-us/office/vba/api/excel.workbooks.add
https://support.microsoft.com/en-us/visio/considerations-for-server-side-automation-of-office

Posts: 8732
Joined: Tue Dec 20, 2005 07:36 PM

Re: Error al crear Excel, por que?

Posted: Sun Nov 08, 2026 01:48 PM

https://learn.microsoft.com/en-us/windows/win32/debug/system-error-codes--1700-3999-
https://learn.microsoft.com/en-us/office/vba/api/excel.xlwbatemplate

FUNCTION Armando_Excel()

   LOCAL oExcel, oBook, oSheet, nVez

   // Tenta criar a aplica莽茫o Excel
   oExcel := CREATEOBJECT( "Excel.Application" )

   IF Empty( oExcel )
      MsgStop( "O Microsoft Excel n茫o est谩 instalado ou n茫o p么de ser iniciado.", "Erro" )
      RETURN
   ENDIF

   // Oculta o Excel durante a manipula莽茫o para evitar piscadas na tela
   oExcel:Visible := .F. 

   // Protege a cria莽茫o do Workbook
   TRY
      oBook := oExcel:WorkBooks:Add()
   CATCH
      MsgStop( "Erro ao criar a nova planilha (Workbook).", "Erro OLE" )
      oExcel:Quit()
      RETURN
   END

   // Remove as abas excedentes mantendo apenas uma
   FOR nVez := oBook:Sheets:Count() TO 2 STEP -1
      oBook:WorkSheets(nVez):Delete()
   NEXT

   oSheet := oExcel:Get("ActiveSheet")
   

   // Torna vis铆vel ap贸s configurar se desejar
   oExcel:Visible := .T.

RETURN NIL
oExcel := CREATEOBJECT( "Excel.Application" )
oExcel:Visible := .F.  // Ou .T. se quiser ver a janela

oBook  := oExcel:WorkBooks:Add()   // ? Agora sem erro

// Exclui folhas extras, mant茅m apenas 1
FOR nVez := oBook:Sheets:Count DOWNTO 2
    oBook:WorkSheets( nVez ):Delete()
NEXT

oSheet := oExcel:ActiveSheet  // Forma mais direta e confi谩vel

// Opcional: renomear a aba
oSheet:Name := "Dados"

// ... seu c贸digo aqui ...

// Fechamento seguro no final
// oBook:Close( .F. )  // .F. = n茫o salvar
// oExcel:Quit()
// oExcel := NIL

LOCAL oExcel, oBook, oSheet, nVez

TRY
    oExcel := CREATEOBJECT( "Excel.Application" )
    oExcel:DisplayAlerts := .F.  // Suprime avisos como "tem certeza de excluir aba?"
    

oBook := oExcel:WorkBooks:Add()

FOR nVez := oBook:Sheets:Count DOWNTO 2
    oBook:WorkSheets( nVez ):Delete()
NEXT

oSheet := oExcel:ActiveSheet
oSheet:Name := "Planilha1"

? "Planilha pronta!"

CATCH oErr
    ? "Erro: " + oErr:Description
FINALLY

IF !EMPTY( oExcel )
    oExcel:DisplayAlerts := .T.
    // oExcel:Visible := .T.  // Descomente para manter aberto
    // oBook:Close()
    // oExcel:Quit()
ENDIF

ENDTRY
LOCAL oExcel, oBook, oSheet
LOCAL nVez

oExcel := CREATEOBJECT("Excel.Application")

oExcel:Visible := .T.

oBook := oExcel:WorkBooks:Add()

FOR nVez := oBook:Sheets:Count TO 2 STEP -1
   oBook:WorkSheets(nVez):Delete()
NEXT

oSheet := oBook:ActiveSheet

// oBook := oExcel:WorkBooks:Add( NIL ) // se continuar el error.
Troque o trecho inteiro por este, retirando o FOR at茅 o NEXT:

  oExcel := CREATEOBJECT( "Excel.Application" )
  oBook  := oExcel:WorkBooks:Add( -4167 )
  oSheet := oExcel:Get( "ActiveSheet" )

O -4167 cria a pasta j谩 com uma 煤nica planilha, sem precisar excluir as outras.

Regards, saludos.

Jo茫o Santos - S茫o Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 3386
Joined: Fri Oct 07, 2005 08:20 PM

Re: Error al crear Excel, por que?

Posted: Sun Nov 08, 2026 05:26 PM

Karinha:

Gracias por el apoyo.

Sigo teniendo el error, con tu ejemplo tira el error

     MsgStop( "Erro ao criar a nova planilha (Workbook).", "Erro OLE" )

Saludos

SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 8732
Joined: Tue Dec 20, 2005 07:36 PM

Re: Error al crear Excel, por que?

Posted: Sun Nov 08, 2026 06:31 PM

Armando, si no funciona, revisa tu Excel. Aqu铆 funcion贸 a la perfecci贸n.

//-> C:\FWH2603\SAMPLES\ARMANDO5.PRG

#include "FiveWin.ch"

FUNCTION Main()

   Armando_Excel()

RETURN NIL

FUNCTION Armando_Excel()

   LOCAL oExcel := NIL, oBook := NIL, oSheet := NIL
   LOCAL oErr, cMsg := "", lOk := .F.

   TRY

  oExcel := CREATEOBJECT( "Excel.Application" )

  IF ValType( oExcel ) == "O"

     oBook  := oExcel:WorkBooks:Add( -4167 )

     oSheet := oExcel:Get( "ActiveSheet" )

     oSheet:Range( "A1" ):Value := "Produto"
     oSheet:Range( "B1" ):Value := "Quantidade"
     oSheet:Range( "A2" ):Value := "Racao"
     oSheet:Range( "B2" ):Value := 10
     oSheet:Range( "A3" ):Value := "Shampoo"
     oSheet:Range( "B3" ):Value := 5

     oExcel:Visible := .T.

     lOk := .T.

  ELSE

     cMsg := "Excel.Application nao foi criado."

  ENDIF

   CATCH oErr

  cMsg := "Erro ao criar a planilha no Excel:" + Chr(13) + Chr(10) + ;
          cValToChar( oErr:Description ) + Chr(13) + Chr(10) + ;
          "Operacao: " + cValToChar( oErr:Operation )

   END

   IF ! lOk
      MsgStop( cMsg, "Erro OLE" )
   ENDIF

RETURN NIL

Regards, saludos.

Jo茫o Santos - S茫o Paulo - Brasil - Phone: +55(11)95150-7341

Continue the discussion