Alaska Software Inc. - Generate Excel (XLSX) and Word (DOCX)
Username: Password:
AuthorTopic: Generate Excel (XLSX) and Word (DOCX)
Salvatore Megna Generate Excel (XLSX) and Word (DOCX)
on Thu, 13 Feb 2020 11:18:21 +0100
what do you use for generate files xlsx or docx? Some third part library?

thanks boys
Jonathan LeemingRe: Generate Excel (XLSX) and Word (DOCX)
on Thu, 13 Feb 2020 08:49:55 -0700
On 2/13/2020 3:18 AM, Salvatore Megna wrote:
> Hi,
> what do you use for generate files xlsx or docx? Some third part library?
> thanks boys

I use Xbase++ with ActiveX connecting to Excel or Word.  As long as 
Excel / Word are installed on the workstation you can use this method.

The create an Excel file the basic steps are...

oXls := CreateObject("Excel.Application")   Open Excel
oBook  := oXls:workbooks:Add()              Open new blank Workbook
oSheet := oBook:ActiveSheet                 Select Sheet1

oSheet:Cells(1,3):Value := "Some Value"     Write "Some Value" to C3

nRow := 5
nCol := 2

* The following would set B5 to 12
oSheet:Cells((nRow),(nCol)):Value := 12

aData := {{0,1,1},;

*The following would set the 9 cells to the values in aData
oRange := oSheet:Range("A8","C10")
oRange:Value := aData

*or if you don't need the same range for anything else...

oSheet:Range("A8","C10"):Value := aData

*To Save the spreadsheet file


oBook := oSheet := NIL

oXls:quit()        Quit & Exit from Excel

oXls:destroy()    destroy excel object

Using the ActiveX you can do most anything that you can manually from 
within Excel.  If I'm stuck on how to do something programmatically I 
usually open excel and record a macro to do what I need and then inspect 
the VB code and convert it to Xbase++.  Not that when updating a 
spreadsheet the fewer AxtiveX call you make the faster it runs so rather 
than updating individual cells update ranges of cells from an array of 
values.  (the aData example above)

There is an ActiveX section within this newsgroup.

Alaska has some samples too...


This link helps me with working with the Excel object...

Excel has many constants and using the Xbase++ tool these can be put 
into a header file...

Tlb2Ch.exe "Excel.Application" >

Using the oWord := CreateObject("Word.Application") you could similarly 
work with Word documents.

There are 3rd party libraries that can create Excel spreadsheets without 
having to have Excel installed but I have yet had a need to use them.

Hope this helps... Jonathan
Edmonton, Alberta, Canada
Jim LeeRe: Generate Excel (XLSX) and Word (DOCX)
on Fri, 14 Feb 2020 07:29:45 +0100

you can try hbxlsxwriter

it is for harbour and i have not test it yet with Xbase++


there is a old Solution from Phil Ide to use HTML which Excel will open.
have to search for it
Jorge L. BorlandoRe: Generate Excel (XLSX) and Word (DOCX)
on Tue, 25 Feb 2020 12:38:00 -0300
hello I have made a library that generates excel xml files and if necessary 
you can generate an xlsx output but you need to have excel installed,
each cell supports almost all the formats allowed in excel, if you are 
interested we see it privately


"Salvatore Megna"  escribió en el mensaje de 

what do you use for generate files xlsx or docx? Some third part library?

thanks boys
Daniel FausRe: Generate Excel (XLSX) and Word (DOCX)
on Mon, 27 Apr 2020 20:21:01 +0200
El 13/02/2020 a las 11:18, Salvatore Megna escribió:
> Hi,
> what do you use for generate files xlsx or docx? Some third part library?
> thanks boys

Hi Salvatore...

I'm using EXpress library for Alaska Xbase from Donnay Software...

DC_Excel2Array( <cFileName>, [<bEval>] ) -> aData

It stores the xls into an array, and you have the viceversa...

DC_Array2Excel( [<cExcelFile>], ;
                 <aData>, ;
                 [<nOrientation>], ;
                 [<lDisplayAlerts>], ;
                 [<lVisible>], ;
                 [<lAutoFit>], ;
                 [<lTrimNilColumns>], ;
                 [<lCombineSheets>], ;
                 [<cPassWord>], ;
                 [<lFreezeRow1>], ;
                 [<lCSVFallBack>], ;
                 [<aSheetCaptions>] ) -> lStatus

You have to intalled Excel in your system.

Other way is using ActiveX directly

oExcel := CreateObject("Excel.Application")
   IF Empty( oExcel )
     Mensaje( "Excel not esta instalado" )

   oBook  := oExcel:workbooks:Open(DATOS+"pedido.xls")

   oExcel:DisplayAlerts := .F.
   oExcel:visible       := .F.

   oSheet := oBook:ActiveSheet
   MaxRec := oSheet:Range("a2"):CurrentRegion:Rows:Count

    Recorremos las filas de la tabla Excel.
   DO WHILE nRow < MaxRec

      If !Empty(oSheet:Cells(nRow,7):Value)  CODIGO
         Select lstArticulos
         Seek (oSheet:Cells(nRow,7):Value)
         If Found()
            ? "El articulo Existe    "+(oSheet:Cells(nRow,7):Value)
             Actualiza la barra de progreso
            DC_GetProgress(oProgress, nRow++, MaxRec+1, Int(MaxRec/100) )

            tmpDESCR := IIF( !Empty(oSheet:Cells(nRow,9):Value) , 
(oSheet:Cells(nRow,9):Value) , "")
            tmpPVENT := IIF( !Empty(oSheet:Cells(nRow,32):Value), 
(oSheet:Cells(nRow,32):Value), 0 )
            tmpPCOST := IIF( !Empty(oSheet:Cells(nRow,31):Value), 
(oSheet:Cells(nRow,31):Value), 0 )
            tmpREFER := IIF( !Empty(oSheet:Cells(nRow,7):Value) , 
(oSheet:Cells(nRow,7):Value) , "")
            tmpFULC  := cFecha
            tmpTIPO  := IIF( !Empty(oSheet:Cells(nRow,11):Value), 
(oSheet:Cells(nRow,11):Value), "")
            tmpTEMP  := IIF( !Empty(oSheet:Cells(nRow,6):Value) , 
(oSheet:Cells(nRow,6):Value) , "")
            tmpADICI := IIF(!Empty((oSheet:Cells(nRow,12):Value)), 
AllTrim(Transform((oSheet:Cells(nRow,12):Value),"@X")), "")+" "+;
AllTrim(Transform((oSheet:Cells(nRow,16):Value),"@X")), "")+" "+;
AllTrim(Transform((oSheet:Cells(nRow,17):Value),"@X")), "")+" "+;
AllTrim(Transform((oSheet:Cells(nRow,18):Value),"@X")), "")


this is two ideas...