Discussione:
comando python che apre file in openoffice con parametro di ricerca formulario ...
(troppo vecchio per rispondere)
marcofoc
2009-11-07 17:45:29 UTC
Permalink
Ciao a tutti..
1. esiste un comando in python che "apra" un file openoffice? In
sostanza, che faccia la funzione che fa il mio mouse quando clicca due
volte su un file ods..

2. se si, e possibile aprire questo file, che contiene formulari
collegati ad un database, dando risposta la criterio di ricerca del
"formulario master" del file, essendo esso collegato alla base dati,
tipo di contenuto "Comando SQL", il comando SQL una ricerca con "WHERE
"dato" = :dato

Grazie per le risposte..

Marco
martello
2009-11-07 18:05:46 UTC
Permalink
Post by marcofoc
Ciao a tutti..
1. esiste un comando in python che "apra" un file openoffice? In
sostanza, che faccia la funzione che fa il mio mouse quando clicca due
volte su un file ods..
In windows non prima di aver einstallato pywin:

http://sourceforge.net/projects/pywin32/files/

# -*- coding: iso-8859-1 -*-
import win32com.client
objServiceManager = win32com.client.Dispatch("com.sun.star.ServiceManager")
objDesktop = objServiceManager.CreateInstance("com.sun.star.frame.Desktop")

args = []

objDocument =
objDesktop.loadComponentFromURL("file:///C:/ootest.odt","_blank", 0, args)
marcofoc
2009-11-07 18:09:39 UTC
Permalink
e.... su Ubuntu?
martello
2009-11-07 18:35:26 UTC
Permalink
Post by marcofoc
e.... su Ubuntu?
Sorry ... non lo so ...
martello
2009-11-07 19:02:30 UTC
Permalink
Post by marcofoc
e.... su Ubuntu?
Prova a tradurre questo (che funziona su windows) usando cartelle Ubuntiane:


# -*- coding: iso-8859-1 -*-
import subprocess
subprocess.call(["C:/Programmi/OpenOffice.org
3/program/swriter.exe","C:/ootest.odt"])
marcofoc
2009-11-07 23:19:40 UTC
Permalink
subprocess.call(["/usr/lib/openoffice/program/sbase","/home/marco/tiroalvolo.odb"])
0
magnifico.. aperto il database...
MMMMaagnificooo..

ora... riusciamo a risolvere anche il punto 2?

2. se si, e possibile aprire questo file, che contiene formulari
collegati ad un database, dando risposta la criterio di ricerca del
"formulario master" del file, essendo esso collegato alla base dati,
tipo di contenuto "Comando SQL", il comando SQL una ricerca con "WHERE
"dato" = :dato
martello
2009-11-08 07:20:51 UTC
Permalink
Post by marcofoc
magnifico.. aperto il database...
MMMMaagnificooo..
Bene ...
Sicuramente c'è un modo molto più elegante per aprire il documento ...
ma sono un po' arrugginito.
Post by marcofoc
ora... riusciamo a risolvere anche il punto 2?
2. se si, e possibile aprire questo file, che contiene formulari
collegati ad un database, dando risposta la criterio di ricerca del
"formulario master" del file, essendo esso collegato alla base dati,
tipo di contenuto "Comando SQL", il comando SQL una ricerca con "WHERE
"dato" = :dato
Qui passo totalmente ...
Non è che hai scelto una starda un po' complessa per risolvere un
problema che per altra via risulta più semplice?

Prova a descrivere l'effetto finale che vuoi ottenere ...
marcofoc
2009-11-08 08:43:09 UTC
Permalink
Post by martello
Qui passo totalmente ...
Non è che hai scelto una starda un po' complessa per risolvere un
problema che per altra via risulta più semplice?
Prova a descrivere l'effetto finale che vuoi ottenere ...
Può essere, in effetti sono spesso molto contorto.
Io in realtà non voglio aprire il file database,ma un foglio scalc
contenente una tabella collegata ad una tabella del dbase.

Supponiamo che io abbia una tabella "storico", con le seguenti
colonne:
progressivo (serial), id_cesto (integer), tipo_frutto(charvar),
n_frutti(integer).

L'idea era quella di poter estrarre le i dati relativi ad un cesto ed
inserirli in una tabella temporanea con un nuovo numero di cesto.
Nella tabella temporanea, poter modificare i numeridei frutti inseriti
ed eventualmetne inserire anche dei nuovi frutti.
Una volta completato il cesto, svuotare la tabella temporanea per
ributtare i dati nelal tabella "storico".
E' fondamentale per me che l'ordine di inserimento dei frutti nel
cesto rimanga invariato (a questo con pensa il progressivo serial)
Tieni conto che voglio aver la possibilità di avere in modifica più di
un cesto.
Ho quindi pensato alla possibilità di aprire il file scalc filtrando
la tabella in automatico..

Forse sarebbe stato più chiaro se avessi utilizzato l'esempio delle
ricette di cucina..
L'intento è quello di poter estrarre una ricetta per poi modificarne
solo alcune parti e re inserirla poi con un nuovo nome e trovarne
quindi due..
martello
2009-11-08 09:01:00 UTC
Permalink
Post by marcofoc
Ho quindi pensato alla possibilità di aprire il file scalc filtrando
la tabella in automatico..
Io avevo capito che doveva essere lo script di python ad effettuare la
selezione.
Evidentemente ho capito male.

Voglio dire ... cosa ci sarebbe di male nel rispondere manualmente o al
dialogo nativo sul criterio di ricerca oppure a un dialogo di star basic
opportunamente gestito per effettuare il filtraggio?
marcofoc
2009-11-08 13:13:17 UTC
Permalink
Post by martello
Post by marcofoc
Ho quindi pensato alla possibilità di aprire il file scalc filtrando
la tabella in automatico..
Io avevo capito che doveva essere lo script di python ad effettuare la
selezione.
Evidentemente ho capito male.
No no, avevi capito benissimo!!
E' proprio lo script di python che mi deve aprire il file von il form
"già filtrato"..
Post by martello
Voglio dire ... cosa ci sarebbe di male nel rispondere manualmente o al
dialogo nativo sul criterio di ricerca oppure a un dialogo di star basic
opportunamente gestito per effettuare il filtraggio?
Non ci sarebbe niente di male, ma siccome il destinatario d'uso è un
user poco esperto, vorrei rendergli la vita il meno difficile
possibile..
Con python voorei che andasse così:
1. dimmi che vecchia ricetta ti interessa estrarre per la modifica
2. dammi un nuovo numero per la ricetta nuova
Python estrae i dati dalla tabella "storico", li inserisce nella
tabella temporanea, cambia la colonna id_ricetta (ex id_cesto) ed apre
il file ods con la tabella collegata per effettuare le modifiche.
Filtrando con il nuovo numero di ricetta, in quanto nella tabella
temporanea ci potrebbe essere un altro utente che sta modificando
un'altra ricetta..
A modifiche effettuate, si richiede conferma all'utente e si salvano
definitivamente le modiche scaricando la tabella temporanea immettendo
i dati nelal tabella "storico".
marcofoc
2009-11-08 15:27:39 UTC
Permalink
Una tabella temporanea nel data base?
E questo deduco che lo sai già fare.
certo..
Ma se sai manipolare il data base direttamente con python perché invece
di 'filtrare' non vai semplicemente a pescare il record che ti interessa
e non 'ficchi' i suoi dati in calc.
perchè non sarò io a doverlo fare, ma un utente molto impreparato
A parte il fatto che a sto punto preferirei usare una finestra di
wxpython piuttosto che tirare in ballo scalc.
non lo conosco, ora mi documento subito!
hai qualche link da darmi?
Scaricare la tabella temporanea quando potrebbe esserci un altro utente?
scaricare la tabella non significa eliminarla, ma scaricarla solo dei
record modificati
dall'utente che me li conferma.
Insomma diciamo che non ho capito bene tutte le tue necessità.
Ma usare solo star basic non renderebbe il tutto più semplice?
star basic non lo conosco..
sto ora cercando di imparare Python..
marcofoc
2009-11-08 16:13:38 UTC
Permalink
scusa, sono un pirla..
il comando SQL non è REPLACE, ma UPDATE..

mi rendo conto che gli argomenti che siamo arrivati a trattare sono un
po' fuori dalla ml..
martello
2009-11-08 16:33:33 UTC
Permalink
Intendevo ... di farlo automaticamente in python senza chiamare in ballo
eventuali filtri o ricerche di OOo ... con una query in python.
spiegati meglio per favore.. non riesco a capirti..>
Allora supponiamo che tu voglia usare calc come interfaccia grafica per
permettere le modifiche di un record specifico.

Hai già le competenze per leggere il record che ti interessa in python
(suppongo).

A questo punto devi trovare il modo di scrivere tramite il python di
sistema le celle di calc senza scomodare altre funzioni di ricerca e di
filtraggio.
Qui proprio non ti so aiutare ... sia perchè non sono molto esperto nel
dialogo tra python di sistema e OOo sia perchè usi Linux.

Cioè leggi ciascun campo e lo scrivi in una cella e così via.

Ma a questo punto abbandonerei del tutto OOo e farei un programma tutto
in python gestendo il record in una finestra di dialogo.

guarda anche questo windows builder per Wxpython.

http://visualwx.altervista.org/indexit.php

C'è un tutorial proprio per gestire i data base con Wxpython.

Più OT di così.
martello
2009-11-08 15:50:20 UTC
Permalink
Post by marcofoc
Una tabella temporanea nel data base?
E questo deduco che lo sai già fare.
certo..
Scommetto che usi un DB esterno ... tipo MYsql.
Post by marcofoc
Ma se sai manipolare il data base direttamente con python perché invece
di 'filtrare' non vai semplicemente a pescare il record che ti interessa
e non 'ficchi' i suoi dati in calc.
perchè non sarò io a doverlo fare, ma un utente molto impreparato
Intendevo ... di farlo automaticamente in python senza chiamare in ballo
eventuali filtri o ricerche di OOo ... con una query in python.
Post by marcofoc
A parte il fatto che a sto punto preferirei usare una finestra di
wxpython piuttosto che tirare in ballo scalc.
non lo conosco, ora mi documento subito!
E' solo una Gui ... e non è l'unica.
Post by marcofoc
hai qualche link da darmi?
come no
http://www.wxpython.org/
http://boa-constructor.sourceforge.net/

Naturalmente stiamo parlando di python di sistema e non dell'interprete
dentro OOo ... oh no?
marcofoc
2009-11-08 16:11:09 UTC
Permalink
Post by martello
Scommetto che usi un DB esterno ... tipo MYsql.
certo: PostgreSQL
Post by martello
Intendevo ... di farlo automaticamente in python senza chiamare in ballo
eventuali filtri o ricerche di OOo ... con una query in python.
spiegati meglio per favore.. non riesco a capirti..>
Post by martello
Post by marcofoc
A parte il fatto che a sto punto preferirei usare una finestra di
wxpython piuttosto che tirare in ballo scalc.
non lo conosco, ora mi documento subito!
E' solo una Gui ... e non è l'unica.
capisco.. grazie a te in questi giorni mi sto avvicinando a Tkinter
Post by martello
Naturalmente stiamo parlando di python di sistema e non dell'interprete
dentro OOo ... oh no?
Certo, stiamo parlando del python di sistema..
anche se all'inizio ho iniziato a studiarlo per implementare Ooo con
macro.. ma ho avuto qualche difficoltà (vedi miei post recenti)..

Tutto questo è nato per il seguente motivo:
estraendo i dati dalla tabella, essi vengono inseriti in una variabile
Python in tuple.
Ho scoperto poi che i valori all'interno delle tuple non si possono
modificare.. e quindi ho pensato a:
estrarre i dati
buttarli dentro una tabella temporanea
fin che son dentro la tabella, con un comando SQL REPLACE, sostituire
i dati della colonna che mi interessa..

So che sono legnoso, macchinoso.. ma veramente poca esperienza..

martello
2009-11-08 14:59:12 UTC
Permalink
Post by marcofoc
1. dimmi che vecchia ricetta ti interessa estrarre per la modifica
2. dammi un nuovo numero per la ricetta nuova
Python estrae i dati dalla tabella "storico", li inserisce nella
tabella temporanea, cambia la colonna id_ricetta (ex id_cesto) ed apre
il file ods con la tabella collegata per effettuare le modifiche.
Una tabella temporanea nel data base?
E questo deduco che lo sai già fare.
Post by marcofoc
Filtrando con il nuovo numero di ricetta, in quanto nella tabella
temporanea ci potrebbe essere un altro utente che sta modificando
un'altra ricetta..
Ma se sai manipolare il data base direttamente con python perché invece
di 'filtrare' non vai semplicemente a pescare il record che ti interessa
e non 'ficchi' i suoi dati in calc.
A parte il fatto che a sto punto preferirei usare una finestra di
wxpython piuttosto che tirare in ballo scalc.
Post by marcofoc
A modifiche effettuate, si richiede conferma all'utente e si salvano
definitivamente le modiche scaricando la tabella temporanea immettendo
i dati nelal tabella "storico".
Scaricare la tabella temporanea quando potrebbe esserci un altro utente?

Insomma diciamo che non ho capito bene tutte le tue necessità.
Ma usare solo star basic non renderebbe il tutto più semplice?
Loading...