+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 7 su 7

Discussione: openoffice calc automation

  1. #1
    jankarlo non è in linea Novello
    Post
    6

    openoffice calc automation

    Ciao a tutti,
    nella mia ditta hanno deciso di usare OpenOffice di Sun al posto di Microsoft Office perché gratuito.
    Ho bisogno per tanto di modificare la funzione di esportazione di un programma sviluppato all'interno, che da ora in poi deve esportare in OpenOffice Calc anzichè in Excel.

    Sapreste mica indicarmi qualche risorsa utile o postare uno spezzone di codice in un qualsiasi linguaggio che faccia al caso?
    Grazie

  2. #2
    L'avatar di dragone bianco
    dragone bianco non è in linea Moderatore Globale
    Luogo
    Aosta
    Post
    7,734
    Ciao jankarlo

    OpenOffice supporta i file excels
    puoi aprire con open office un file excels

    openoffice come macro supporta lo starBasic (è il VBA di open Office, totalmente diverso dal VBA)

    qui trovi un alcuni link utili
    Differenze VBA e StarBasic
    FAQ StarBasic

    Ciao

    PS:
    la tua discussione la metto in offtopic.
    in questa sezione si tratta argomenti legati all'office

  3. #3
    Davide8734 non è in linea Novello
    Post
    46
    Credo di aver capito che la discussione è stata spostata ma non ho capito dove. Chiedo quindi scusa se la mia risposta è fuori luogo ma in realtà più che una risposta vuole essere una richiesta di aiuto simile

    Io ho lo stesso problema di jankarlo e sto navigando alla ricerca di spezzoni di codice per capire come ottenere alcune funzionalità

    Da un programma vb creavo runtime dei file excel

    Riporto di seguito alcuni spezzoni di codice che sono riuscito a sviluppare per ottenere lo stesso risultato con calc di open office

    Non so se la soluzione da me trovata sia ottimale
    Sembra funzionare e tanto mi basta per il momento

    codice:
     
    Lancio il Service manager, necessario per qualsiasi applicazione OpenOffice
    'se non ci sono applicazioni office attive, viene lanciato il ServiceManager
    Set oSM = CreateObject("com.sun.star.ServiceManager")
     
    'Creazione del Desktop, assieme al create object completa la creazione
    Set oDesk = oSM.createInstance("com.sun.star.frame.Desktop")
     
    'Apro/Creo il file di open office
    '_blank star office crea una nuova finestra
     
    Set OpenParam(0) = MakePropertyValue("Hidden", False)
    Set oCalc = oDesk.loadComponentFromURL(ConvertToUrl(sFileDistinta), "_blank", 0, OpenParam())
     
    'Seleziono il primo foglio elettronico del file aperto
    Set oSheet = oCalc.getSheets().getByIndex(0)
    p_lEstremo(SUPERIORE) = FindLastCellNotEmptyInColumn(oSheet, 3)
    La funzione FindLastCellNotEmptyInColumn l'ho creata io.
    Possibile che non esista già un metodo che determini l'ultima cella che riporta un valore in una colonna ?!?
    Io non credo

    per recuperare il nome della scheda

    codice:
     
    If oCalc.getSheets().getCount > 0 Then
      Set objSheet = oCalc.getSheets().getByIndex(SCHEDA_ORIGINALE)
      m_sNomeSchedaOriginale = objSheet.Name
      RecuperaNomeScheda = True
    Else
    ...
    per duplicare una scheda

    codice:
    'Aggiungo in coda una copia della scheda
    Call oCalc.getSheets().copyByName(sNomeSchedaOriginale, "New Sheet", SCHEDA_ORIGINALE + 1)
    [/code]

    per rinominare una scheda

    codice:
    oCalc.getSheets().getByIndex(m_iScheda).SetName = m_sNomeScheda
    per eliminare una scheda

    codice:
     
    Set objSheet = oCalc.getSheets().getByIndex(m_iScheda)
    Call oCalc.oSheets().RemoveByName(objSheet.Name)
    Quest'ultima non funziona
    Eppure l'ho copiata pari pari
    Dice che il metodo non è supportato

    C'è un anima pia che ha tempo e voglia di aiutarmi senza girarmi link di manuali in inglese che superano le 300 pagine ?

    Grazie in anticipo per le risposte

  4. #4
    L'avatar di dragone bianco
    dragone bianco non è in linea Moderatore Globale
    Luogo
    Aosta
    Post
    7,734
    Ciao

    io uso un alchimia
    In una cella metto la formula conta.valori della colonna e da quel valore determino l'ultima cella piena

    per il resto non ho ancora avuto il tempo di approfondire tutta la programmazione in calc

    Trovi però una discussione nelle sezione openoffice che io e un altro forumista abbiamo fatto alcuni test per un suo problema

    Ciao

  5. #5
    Davide8734 non è in linea Novello
    Post
    46
    Grazie !!!
    Ora vado a cercarla, se ripassi da queste parti magari inserisci il link all'altra discussione ?

  6. #6
    L'avatar di dragone bianco
    dragone bianco non è in linea Moderatore Globale
    Luogo
    Aosta
    Post
    7,734
    Ho avuto il tempo di cercarla

    Guarda qui
    http://forum.masterdrive.it/openoffi...e-macro-40395/

    abbiamo solo affrontato un piccolo problema dei codici per reperire i dati dal foglio

    Ciao

  7. #7
    Davide8734 non è in linea Novello
    Post
    46
    Quote Originariamente inviato da Davide8734 Visualizza il messaggio
    per eliminare una scheda

    codice:
     
    Set objSheet = oCalc.getSheets().getByIndex(m_iScheda)
    Call oCalc.oSheets().RemoveByName(objSheet.Name)
    Quest'ultima non funziona
    Eppure l'ho copiata pari pari
    Dice che il metodo non è supportato

    Grazie Dragone.
    Io volevo rimuovere l'intero foglio e non solo la colonna.

    Mi rispondo da solo
    Non l'ho copiata pari pari
    oCalc.Sheets().RemoveByName(objSheet.Name)

    A questo punto, mentre ci sono, faccio altre due domande

    in un documento writer vorrei aggiungere il numero delle pagine, ovviamente sempre da codice.

    Sempre in un documento writer vorrei rimuovere una tabella esistente

    'Aggiungo una nuova riga
    RowToInsert = 1
    LastRow = oDoc.getTextTables().getByIndex(m_lTabella).Rows() .getCount
    Call oDoc.getTextTables().getByIndex(m_lTabella).GetRow s().insertByIndex(LastRow, RowToInsert)
    'Elimino l'ultima riga (è vuota !)
    RowToInsert = 1
    LastRow = oDoc.getTextTables().getByIndex(m_lTabella).Rows() .getCount
    Call oDoc.getTextTables().getByIndex(m_lTabella).GetRow s().removeByIndex(LastRow - 1, RowToInsert)
    Ma per eliminare l'intera tabella ?



    Qualche suggerimento ?

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi