logoNon è ufficiale e non c’è fretta. Del resto non devo rispettare alcuna scadenza, ma è, di fatto, iniziato il porting del codice di LeenO da Free/Open/Libre o comepiùvipiace-Basic a Python.

Provo a “giustificarne” qui il mio impegno. Sto sviluppando l’emissione dei documenti contabili riguardanti la contabilità a misura. Per sviluppare e testare ho necessità di verificare le nuove funzionalità su di una contabilità già eseguita e consegnata con l’uso di un altro programma. Ho a disposizione un lavoro prodotto con Primus di ACCA e mi toccherebbe inserirlo da capo, a manuzza, in LeenO.

A questo punto “approfitto” per scrivere un bel XPWE_import (che ce vo’! – minimizzare aiuta…). Purtroppo tocca subito precisare che salvando il lavoro prodotto da Primus in formato XPWE si perdono alcune informazioni: a parte parecchi dati dell’anagrafica, soprattutto le incidenze di manodopera e le quote di sicurezza relative alle voci di elenco prezzi. Viene spontaneo pensare che si tratti della solita pratica mal celata di lock-in – pratica molto diffusa tra i produttori di software chiuso e proprietario che impedisce agli utenti la libera migrazione ad altro software. Sopravviveremo.

Sulla scia di XML_import, anche questa volta uso Python. Inutile dire che in LeenO sono raccolte diverse sub Basic di contorno senza le quali sarebbe più faticoso lavorare. Ed eccomi a tradurre una funzione per la ricerca di stringhe di testo.

Questa la versione in *Basic:

rem Return the cell that contains the text
Function uFindString(sString$, oSheet ) As Variant ' richiamata da diverse cose
    Dim nCurCol As Integer
    Dim nCurRow As Integer
    Dim nEndCol As Integer
    Dim nEndRow As Integer
    Dim oCell As Object
    Dim oCursor As Object
    Dim aAddress As Variant
    Dim sFind As String
    rem oSheet = ThisComponent.Sheets.getByName("COMPUTO")
    rem sString = "TOTALI COMPUTO"
    oCell = oSheet.GetCellbyPosition(0,0)
    oCursor = oSheet.createCursorByRange(oCell)
    oCursor.GotoEndOfUsedArea(True)
    aAddress = oCursor.RangeAddress
    nEndRow = aAddress.EndRow
    nEndCol = aAddress.EndColumn
    For nCurCol = 0 To nEndCol 'Go through the range column by column,
        For nCurRow = 0 To nEndRow 'row by row.
            oCell = oSheet.GetCellByPosition( nCurCol, nCurRow )
            sFind = oCell.String 'Get cell contents.
            If inStr(sFind, sString$) Then
                         uFindString = oCell
                     Exit Function
            End If
        Next
    Next
End Function

Questa la traduzione in Python:

def uFindString (sString, oSheet): 
    """Trova la prima ricorrenza di una stringa (sString) riga per riga 
    in un foglio di calcolo (oSheet) e restituisce una tupla (IDcolonna, IDriga)""" 
    #~ oDoc = XSCRIPTCONTEXT.getDocument() 
    #~ oSheet = oDoc.CurrentController.ActiveSheet 
    #~ sString = 'TOTALI COMPUTO' 
    oCell = oSheet.getCellByPosition(0,0) 
    oCursor = oSheet.createCursorByRange(oCell) 
    oCursor.gotoEndOfUsedArea(True) 
    aAddress = oCursor.RangeAddress 
    nEndRow = aAddress.EndRow 
    nEndCol = aAddress.EndColumn 
    try: 
        for nRow in range(0,nEndRow): 
            for nCol in range(0,nEndCol): 
                oCell = oSheet.getCellByPosition(nCol,nRow) 
                if sString in oCell.String: 
                    raise ValueError 
    except ValueError: 
        return (nCol,nRow)

Naturalmente, come si fa mettendo in pratica la ricetta della nonna, non manco di metterci del mio: se nella versione *Basic ottengo l’oggetto cella (oCell) da cui poi mi tocca estrarre la posizione della stringa trovata nella forma (IDcolonna, IDriga), nella versione trascritta in Python preferisco che mi sia restituita direttamente la coppia (IDcolonna, IDriga), abbreviando il processo di un passo.

Giuseppe VizzielloBlogSviluppoNon è ufficiale e non c'è fretta. Del resto non devo rispettare alcuna scadenza, ma è, di fatto, iniziato il porting del codice di LeenO da Free/Open/Libre o comepiùvipiace-Basic a Python. Provo a 'giustificarne' qui il mio impegno. Sto sviluppando l'emissione dei documenti contabili riguardanti la contabilità a misura. Per...il software libero per computi metrici con LibreOffice