Procedure CreaFileExcel( TmpAlias, TmpTitolo, ObjScroll, pTestata, pRighAggi )
   Local OldArea := SELECT(), OldRec, oDlgWait, AppVar2, aDbeLista
   Local aScript, cCaratter, nDimeCara, nRiga, nColonna


   oDlgWait := WaitDlg( ,"Creazione file excel..." )

   aScript := {}
   
   cCaratter := "Arial"
   nDimeCara := 10

   SELECT (TmpAlias)
   aStruct := DbStruct()

   cFile := TmpTitolo+".xls"
   If File( "C:\temp\"+cFile )
      FErase( "C:\temp\"+cFile )
   Endif

   nRiga      := 1
   nColonna   := 0
   
   If !IsNil( pRighAggi )
      For nCnt := 1 To Len( pRighAggi )
      //    aadd( aScript, { 'say', nRiga, 1, pRighAggi[nCnt], cCaratter,nDimeCara,.t. } )
          nRiga++
      Next    
      nRiga++
   Endif
   
   aStruct := {}
   For nCnt := 1 To ObjScroll:ColCount
       cAppCam := "M"
       If !IsNil( ObjScroll:GetColumn(nCnt):cargo ) .And. ObjScroll:GetColumn(nCnt):cargo
          cAppCam := "F"
       Endif
       If !IsNil( pTestata )
          AppVar := pTestata[nCnt]
       Else
          AppVar := CompattaStringa( ObjScroll:GetColumn(nCnt):Heading:GetCell(1) )
       Endif   
       nColonna++
       aadd( aScript, { 'say', nRiga, nColonna, AppVar, cCaratter,nDimeCara,.t. } )
   Next

   SELECT (TmpAlias)
   OldRec := RecNo()
   DbGoTo( oScroll:PrimoRecord() )
   Do While !Eof()
      nRiga++
      nColonna   := 0
      
      For nCnt := 1 To ObjScroll:ColCount //Len( aStruct )
          AppVar  := Eval( ObjScroll:GetColumn(nCnt):datalink )
          AppVar2 := ObjScroll:GetColumn(nCnt):cargo

          Do Case
             Case !IsNil( AppVar2 ) .And. AppVar2
                  //FieldPut( nCnt, IIF( ValType( AppVar ) == "N", AppVar, VALSME( AppVar ) ) )
                  AppVar := IIF( ValType( AppVar ) == "N", AppVar, VALSME( AppVar ) )
             
             Case ValType( AppVar ) == "C"
                  //FieldPut( nCnt, AppVar )
                  AppVar := AppVar 
                  
             Case ValType( AppVar ) == "D"
                  //FieldPut( nCnt, DTOC( AppVar ) )
                  AppVar := DTOC( AppVar )
             Case ValType( AppVar ) == "N"
                  //FieldPut( nCnt, AppVar )
                  AppVar := AppVar
          EndCase
          nColonna++
          
          //MsgBox( STR(nRiga)+"/"+STR(nColonna)+CHR(10)+AppVar )
                                                
          aadd( aScript, { 'say', nRiga, nColonna, AppVar, cCaratter,nDimeCara } )
      Next
      SELECT (TmpAlias)
      IF RecNo() = oScroll:UltimoRecord()
         EXIT
      ENDIF
      DbSkip()
   ENDDO
   IIF( OldRec > 0, DbGoTo( OldRec ), NIL )

   For nCnt := 1 To ObjScroll:ColCount
       aadd( aScript, { 'autofit', nCnt } )
   Next
   If !IsNil( pRighAggi )
      nRiga := 1
      For nCnt := 1 To Len( pRighAggi )
          aadd( aScript, { 'say', nRiga, 1, pRighAggi[nCnt], cCaratter,nDimeCara,.t. } )
          nRiga++
      Next    
   Endif

   aadd( aScript, { 'delsheet', 'Foglio2' } )
   aadd( aScript, { 'delsheet', 'Foglio3' } )


   //MsgBox( Str( Len( aScript ) ) )

   SIExcelScript( aScript, cFile )

   MessageBox( "Foglio excel"+CHR(10)+"C:\temp\"+TmpTitolo+".xls"+CHR(10)+"E' stato creato",,"I" )

   oDlgWait:Close()

Return
//*************************************
Procedure SIExcelScript( pVettore, pNomeFile )
   Local nConta, oExcel 
   Private oDlgWait, oSecondi
   

   oExcel := CreateObject("Excel.Application")
   IF Empty( oExcel )
     MsgBox( "Excel is not installed" )
     RETURN
   ENDIF
   oDlgWait := WaitDlg(,"generazione in corso...")

   //cNomeExce := "c:\Temp\Fattura_"+RiempNUM(oNumeDocu:GetData(),5)+".xlsx"
   cNomeExce := "c:\Temp\"+pNomeFile

   oExcel:DisplayAlerts := .F.

   oBook  := oExcel:workbooks:Add()
   oSheet := oBook:ActiveSheet

   For nConta := 1 To Len( pVettore )
       oSecondi:SetCaption( LTrim(Str(nConta)) )
       Do Case
          Case UPPER( pVettore[nConta,1] ) == "SAY"
               nRiga      := pVettore[nConta,2]               // 2
               nColonna   := pVettore[nConta,3]               // 3
               cTesto     := pVettore[nConta,4]               // 4
               cFont      := ""                               // 5
               nDimeFont  := 0                                // 6
               lGrassetto := .f.                              // 7
               nBordo     := 0                                // 8
               cAllinea   := "L"                              // 9
               
               If Len( pVettore[nConta] ) > 4 
                  cFont      := pVettore[nConta,5]
               Endif   
               If Len( pVettore[nConta] ) > 5 
                  nDimeFont  := pVettore[nConta,6]
               Endif   
               If Len( pVettore[nConta] ) > 6 
                  lGrassetto := pVettore[nConta,7]
               Endif   
               If Len( pVettore[nConta] ) > 7 
                  nBordo     := pVettore[nConta,8]
               Endif   
               If Len( pVettore[nConta] ) > 8 
                  cAllinea   := pVettore[nConta,9]
               Endif   
               
               If !Empty( cTesto )
                  oSheet:Cells(nRiga,nColonna):Value := cTesto
               Endif   
               If IsNUmber( nDimeFont ) .And. nDimeFont > 0
                  oSheet:Cells(nRiga,nColonna):Font:Size := nDimeFont
               Endif   
               If IsLogic( lGrassetto ) .And. lGrassetto
                  oSheet:Cells(nRiga,nColonna):Font:Bold = .t.      // inicazione grassetto
               Endif   
               If IsNumber( nBordo ) .And. nBordo > 0
                  oSheet:Cells(nRiga,nColonna):Borders:LineStyle = nBordo  
               Endif      
               If !IsNil( cAllinea ) .And. !Empty( cAllinea )     
                  Do Case
                     Case cAllinea == "C"                         
                          oSheet:Cells(nRiga,nColonna):HorizontalAlignment = xlCenter
                     Case cAllinea == "L"                         
                          oSheet:Cells(nRiga,nColonna):HorizontalAlignment = xlLeft
                     Case cAllinea == "R"                         
                          oSheet:Cells(nRiga,nColonna):HorizontalAlignment = xlRight
                  Endcase
               Endif           
          //Case UPPER( pVettore[nConta,1] ) == "VISIBLE"
          //     oExcel:visible       := .t.

          Case UPPER( pVettore[nConta,1] ) == "NUMBERFORMAT"
               nColonna   := pVettore[nConta,2]
               cFormato   := pVettore[nConta,3]
               oSheet:Columns( nColonna ):NumberFormat := cFormato

          Case UPPER( pVettore[nConta,1] ) == "AUTOFIT"
               nColonna   := pVettore[nConta,2]
               oSheet:Columns( nColonna ):AutoFit()  // dimensionamento cella a secondo della 
                                              //  scritta pił ampia

          Case UPPER( pVettore[nConta,1] ) == "COLUMNWIDTH"
               nColonna   := pVettore[nConta,2]
               nDimensio  := pVettore[nConta,3]
               oSheet:Columns( nColonna ):ColumnWidth := nDimensio  // allarga l'ampiezza della colonna

          Case UPPER( pVettore[nConta,1] ) == "CELLFORMAT"
               nRiga      := pVettore[nConta,2]
               nColonna   := pVettore[nConta,3]
               nColore    := pVettore[nConta,4]
               oSheet:Columns( nColonna ):ColumnWidth := nDimensione  // allarga l'ampiezza della colonna

          Case UPPER( pVettore[nConta,1] ) == "RANGECOLOR"
               nRiga      := pVettore[nConta,2]
               nColonna   := pVettore[nConta,3]
               cColore    := pVettore[nConta,4]
               Do Case
                  Case cColore == "ROSSO"
                       cColore := GraMakeRGBColor({255,0,0})
                       
                  Case cColore == "ARANCIO"
                       cColore := GraMakeRGBColor({255,128,0})
                       
                  Case cColore == "CELESTE"
                       cColore := GraMakeRGBColor({13,190,242})
                       
                  Case cColore == "VIOLA"
                       cColore := GraMakeRGBColor({255,0,255})
                       
                  Case cColore == "VERDE"
                       cColore := GraMakeRGBColor({0,128,0})
                       
                  Case cColore == "GRIGIO"
                       cColore := GraMakeRGBColor({192,192,192})
               Endcase
               oSheet:Cells(nRiga,nColonna):Interior:Color :=  cColore //GraMakeRGBColor({192,192,192})//grigio

          Case UPPER( pVettore[nConta,1] ) == "FONTCOLOR"
               nRiga      := pVettore[nConta,2]
               nColonna   := pVettore[nConta,3]
               cColore    := pVettore[nConta,4]
               Do Case
                  Case cColore == "ROSSO"
                       cColore := GraMakeRGBColor({255,0,0})
                       
                  Case cColore == "ARANCIO"
                       cColore := GraMakeRGBColor({255,128,0})
                       
                  Case cColore == "CELESTE"
                       cColore := GraMakeRGBColor({13,190,242})
                       
                  Case cColore == "VIOLA"
                       cColore := GraMakeRGBColor({255,0,255})
                       
                  Case cColore == "VERDE"
                       cColore := GraMakeRGBColor({0,128,0})
                       
                  Case cColore == "GRIGIO"
                       cColore := GraMakeRGBColor({192,192,192})
               Endcase
               oSheet:Cells(nRiga,nColonna):Font:Color :=  cColore //GraMakeRGBColor({192,192,192})//grigio

       Endcase
   Next

   // Save workbook as ordinary excel file.
   oBook:SaveAs(cNomeExce)
   // Quit Excel
   oExcel:Quit()
   oExcel:Destroy()
   
   oDlgWait:Close()
   
   
   MessageBox( "E' stato creato il file "+cNomeExce,,"I")
Return
// *************************************
