Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 07-11-2009, 00:55   #1
radeon_snorky
Senior Member
 
Iscritto dal: Mar 2003
Messaggi: 2188
[VB.NET]programma in background che legge file excel

come da titolo vorrei realizzare un piccolo programma che legge da un file excel alcune celle (sempre le stesse) e se trova una data a 6 mesi apre un messagebox contenente l'intera riga.
fine!
poi mi piacerebbe che potesse mandare una mail al posto del messaggio, ma questa è un'altra storia... iniziamo dalle cose semplici!

chi mi da uno spunto su come procedere?

grazie!
radeon_snorky è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2009, 11:36   #2
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
"In background" significa che deve funzionare "di nascosto" ? ( tanto se vogliono chiudertelo, te lo chiudono comunque ) Oppure che deve funzionare senza che Excel sia installato... O cosa ?
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2009, 13:07   #3
radeon_snorky
Senior Member
 
Iscritto dal: Mar 2003
Messaggi: 2188
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
"In background" significa che deve funzionare "di nascosto" ? ( tanto se vogliono chiudertelo, te lo chiudono comunque ) Oppure che deve funzionare senza che Excel sia installato... O cosa ?
scusa... ecco le precisazioni:
background -> in tray
i dati sarebbero in excel e il programma è installato su tutti i pc... ma non è obbligatorio utilizzarlo con il programma, è solo per comodità.
nel file excel ci sono indirizzi e date di "scadenza" ma possono essere messi anche su file di testo! pensavo alla comodità che si ha in excel di avere celle formattate e selezionabili facilmente, mentre un file di testo è meno "simpatico"

Ultima modifica di radeon_snorky : 07-11-2009 alle 13:25.
radeon_snorky è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2009, 13:26   #4
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da radeon_snorky Guarda i messaggi
i dati sarebbero in excel e il programma è installato su tutti i pc...
Beh, allora usa il metodo classico, che in presenza di Excel è anche il migliore, referenziando Microsoft.Office.Interop.Excel :

Codice:
        Dim appExcel As New Microsoft.Office.Interop.Excel.Application
        appExcel.Visible = False
        Dim WB As Microsoft.Office.Interop.Excel.Workbook = appExcel.Workbooks.Open(percorso & nomeFile)
        Dim WS As Microsoft.Office.Interop.Excel.Worksheet = WB.Worksheets("Foglio1")
        ...
        ...
        ecc...
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2009, 13:41   #5
radeon_snorky
Senior Member
 
Iscritto dal: Mar 2003
Messaggi: 2188
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
Beh, allora usa il metodo classico, che in presenza di Excel è anche il migliore, referenziando Microsoft.Office.Interop.Excel :

Codice:
        Dim appExcel As New Microsoft.Office.Interop.Excel.Application
        appExcel.Visible = False
        Dim WB As Microsoft.Office.Interop.Excel.Workbook = appExcel.Workbooks.Open(percorso & nomeFile)
        Dim WS As Microsoft.Office.Interop.Excel.Worksheet = WB.Worksheets("Foglio1")
        ...
        ...
        ecc...
mi stai dicendo che posso "portare" excel in vb.net? così da lavorare su celle e formati come se usassi vba?
radeon_snorky è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2009, 17:33   #6
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da radeon_snorky Guarda i messaggi
mi stai dicendo che posso "portare" excel in vb.net? così da lavorare su celle e formati come se usassi vba?
Puoi gestire da VB.NET un'applicazione Excel, avendo a disposizione praticamente tutte le proprietà e i metodi che trovi in Excel VBA.
Certo, non puoi fare copia-incolla da VBA a VB.NET e pretendere che funzioni tutto...
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2009, 17:47   #7
radeon_snorky
Senior Member
 
Iscritto dal: Mar 2003
Messaggi: 2188
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
Puoi gestire da VB.NET un'applicazione Excel, avendo a disposizione praticamente tutte le proprietà e i metodi che trovi in Excel VBA.
Certo, non puoi fare copia-incolla da VBA a VB.NET e pretendere che funzioni tutto...
no, no.. lo immagino!
però per quel che devo fare io il copia-incolla lo posso fare di un buon 85-90%
...
ma siamo sempre alle solite: c'è bisogno di uno spunto, un "cicchetto", un bottarella nella giusta direzione... altrimenti la mia incapacità mi lascia al palo!

dove mi posso leggere guide ed esempi?
radeon_snorky è offline   Rispondi citando il messaggio o parte di esso
Old 15-11-2009, 09:54   #8
radeon_snorky
Senior Member
 
Iscritto dal: Mar 2003
Messaggi: 2188
ho cercato in lungo e in largo ma non ho trovato nulla che potesse fare al caso mio... perché non ho trovato nulla? per 2 motivi... non so cosa cercare e tra i millemila link c'è tanto materiale in inglese...
comunque ho seguito questa strada:
1) come mi hai suggerito ho referenziato Microsoft.Office.Interop.Excel e aggiunto le tue righe di codice.
2) ho definito un array formato dal range che contiene TUTTI i dati che mi servono (2 colonne per 40 righe)
3) creato un ciclo for next per leggere le celle e mostrare un messaggio al verificarsi di una condizione (per ora è data <> da now)

ora:
- è giusto creare una array con tutti i valori? oppure devo suddividerlo separando le date dai testi? se dovessi applicare un array a molte celle, quanto può essere grande l'array prima di diventare "pesante, lento e ingestibile", o non c'è problema?
- altra cosa, ma legata alla prima, avendo un array di testi&date, la condizione che vorrei verificare è now() + 180 >= della data ma ho 2 difficoltà, dà errore sui testi (so che è semplice risolvere... tipo aggiungere una condizione "madre" che screma i testi... giusto? provo? o c'è di meglio?), e poi non riesco ad aggiungere 180 alla data (devo forse convertire la data in numero, fare l'operazione e riconvertire in data?)
- la sub creata vorrei che fosse indipendente dall'utente, deve essere gestito da un timer e solo secondariamente dalla pressione di un tasto. ho provato a dichiarare la sub pubblica ma mi da errore... non ti posso dire l'errore perché il programmino ce l'ho in ufficio! adesso riprovo a farlo a casa...

helpatemi
radeon_snorky è offline   Rispondi citando il messaggio o parte di esso
Old 15-11-2009, 12:15   #9
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da radeon_snorky Guarda i messaggi
- è giusto creare una array con tutti i valori? oppure devo suddividerlo separando le date dai testi? se dovessi applicare un array a molte celle, quanto può essere grande l'array prima di diventare "pesante, lento e ingestibile", o non c'è problema?
No, non è corretto. Se hai detto che il tuo insieme di celle sono coppie <stringa, data>, dovrai avere un oggetto per ogni copia ( classe, structure, ecc... ). A quel punto fai un array di oggetti-coppia.
Impossibile rispondere alla seconda domanda.
L'array diventerà pesante, o pesantissimo e ingestibile ( come tutte le cose ), a seconda della bontà del tuo codice per farvi accesso in lettura/scrittura e ovviamente della mole di dati...

Quote:
Originariamente inviato da radeon_snorky Guarda i messaggi
- altra cosa, ma legata alla prima, avendo un array di testi&date, la condizione che vorrei verificare è now() + 180 >= della data ma ho 2 difficoltà, dà errore sui testi (so che è semplice risolvere... tipo aggiungere una condizione "madre" che screma i testi... giusto? provo? o c'è di meglio?), e poi non riesco ad aggiungere 180 alla data (devo forse convertire la data in numero, fare l'operazione e riconvertire in data?)
Ecco perchè devi avere un array di oggetti-coppia. Ti risolvi dei gran casini inutili, prima che si presentino.
Per confronti tra intervalli di date usa i TimeSpan...

Quote:
Originariamente inviato da radeon_snorky Guarda i messaggi
- la sub creata vorrei che fosse indipendente dall'utente, deve essere gestito da un timer e solo secondariamente dalla pressione di un tasto. ho provato a dichiarare la sub pubblica ma mi da errore... non ti posso dire l'errore perché il programmino ce l'ho in ufficio! adesso riprovo a farlo a casa...
Non so cosa intendi per "indipendente dall'utente".
La "Sub pubblica" spesso va in errore perchè si fa riferimento ad oggetti della UI. Mai fare riferimento diretto a componenti UI, al di fuori del codice di una Form.
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 15-11-2009, 14:26   #10
radeon_snorky
Senior Member
 
Iscritto dal: Mar 2003
Messaggi: 2188
so che hai risposto.. ho letto tutto ma volevo mostrarti il codice come è ora con aggiunti i commenti:
Codice:
Dim appExcel As New Microsoft.Office.Interop.Excel.Application
        appExcel.Visible = True
        Dim WB As Microsoft.Office.Interop.Excel.Workbook = appExcel.Workbooks.Open("C:\Users\max\Documents\cpi.xls")
        Dim WS As Microsoft.Office.Interop.Excel.Worksheet = WB.Worksheets("Foglio1")
        'devo dichiarare l'array nel modo giusto... e al momento non credo sia giusto
        Dim scadenze(4, 1)
        Dim indirizzi(4, 1)
        Dim xlsRange(4, 2)
        'dichiaro che il dato che mi serve è una data e l'indirizzo una stringa
        Dim DataFine As Date
        Dim indirizzo As String
        'popolo l'array... quando riuscirò a capire qual'è... 
        xlsRange = WS.Range("A1:B4").Value
        scadenze = WS.Range("B1:B4").Value
        indirizzi = WS.Range("A1:A4").Value
        'poi basta leggere dall'array
        For Each DataFine In scadenze
            'fare il calcolo
            If DateDiff(DateInterval.Day, Now, DataFine) <= 180 Then
                'nelle mie intenzioni vorrei conoscere la posizione
                'del valore all'interno dell'array
                'per usarlo per definire la cella che deve
                'SOLO apparire nel messaggio
                'quindi ne cerco l'index.... ma prima devo far bene le cose precedenti!!!!
                Dim index As Integer
                index = Array.IndexOf(scadenze, DataFine)
                'poi uso index per prendere il valore della cella
                index = index + 1
                indirizzo = WS.Range("A" & index).Value
                'e scrivo il messaggio
                MsgBox("Attenzione! il " & DataFine & " scade la pratica! Riferimento: " & indirizzo)
            End If
        Next
        WB.Close()
        appExcel.Quit()
        appExcel = Nothing
se volessi usare solo un array con le date, quindi monodimensionale, posso poi prendere la cella a fianco leggendo l'index della data nell'array? è quello che MI PARE il modo più semplice.... o no? lo so che mi hai già scritto... solo che adesso non riesco a scrivere altro... la signora esige di uscire di casa ciao e grazie
radeon_snorky è offline   Rispondi citando il messaggio o parte di esso
Old 15-11-2009, 14:34   #11
radeon_snorky
Senior Member
 
Iscritto dal: Mar 2003
Messaggi: 2188
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
Non so cosa intendi per "indipendente dall'utente".
La "Sub pubblica" spesso va in errore perchè si fa riferimento ad oggetti della UI. Mai fare riferimento diretto a componenti UI, al di fuori del codice di una Form.
intendo dire che vorrei definire una procedura che posso richiamare tramite un timer... (il senso di "indipendente dall'utente") ed eventualmente richiamare la stessa procedura da un pulsante o da una voce di menu senza dover riscrivere il codice...
scappo, la signora ha un coltello in mano!!!!
radeon_snorky è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2009, 09:21   #12
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
No, non ci siamo. Almeno, per come lo risolverei io...
Concettualmente può essere fatto in modo molto più pulito e diretto.

Anzitutto DateDiff(DateInterval.Day, DataFine, Now). Altrimenti ricevi differenze sempre negative...

Come già detto, preferisco mappare ogni coppia indirizzo-data con un oggetto :

Codice:
    Private Structure scadenza
        Public indirizzo As String
        Public data As DateTime
    End Structure
A questo punto tutto ciò che segue è molto più lineare :

Codice:
        Dim appExcel As New Microsoft.Office.Interop.Excel.Application
        appExcel.Visible = True
        Dim WB As Microsoft.Office.Interop.Excel.Workbook = appExcel.Workbooks.Open(percorsoNomeFile)
        Dim WS As Microsoft.Office.Interop.Excel.Worksheet = WB.Worksheets("Foglio1")

        Dim scadenze As New List(Of scadenza)

        For i As Integer = 1 To 4
            Dim s As New scadenza
            s.indirizzo = WS.Range("A" & i).Text
            s.data = WS.Range("B" & i).Text
            scadenze.Add(s)
        Next

        'Controllo
        For Each s As scadenza In scadenze
            If DateDiff(DateInterval.Day, s.data, Now) <= 180 Then
                MsgBox("Attenzione! il " & s.data & " scade la pratica! Riferimento: " & s.indirizzo)
            End If
        Next

        WB.Close()
        appExcel.Quit()
        appExcel = Nothing
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2009, 11:37   #13
radeon_snorky
Senior Member
 
Iscritto dal: Mar 2003
Messaggi: 2188
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
No, non ci siamo. Almeno, per come lo risolverei io...
Concettualmente può essere fatto in modo molto più pulito e diretto.

Anzitutto DateDiff(DateInterval.Day, DataFine, Now). Altrimenti ricevi differenze sempre negative...

mmmm sicuro?
radeon_snorky è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2009, 11:42   #14
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da radeon_snorky Guarda i messaggi
mmmm sicuro?
Se le date sono inferiori a Now è come ho detto io. Se le date ( come nel tuo caso, ora che ci penso ) sono superiori va bene come hai fatto tu.

Per il resto, butta quel codice e fai come ti ho detto, ne hai solo vantaggi...
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2009, 11:47   #15
radeon_snorky
Senior Member
 
Iscritto dal: Mar 2003
Messaggi: 2188
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
Se le date sono inferiori a Now è come ho detto io. Se le date ( come nel tuo caso, ora che ci penso ) sono superiori va bene come hai fatto tu.

Per il resto, butta quel codice e fai come ti ho detto, ne hai solo vantaggi...
ok, lo butto... però era proprio vomitevole?!??!?!

p.s. il processo excel rimane in memoria!!! uffiiiiiiiiiiii
radeon_snorky è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2009, 12:17   #16
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da radeon_snorky Guarda i messaggi
ok, lo butto... però era proprio vomitevole?!??!?!
A mio modo di vedere... SI !
Ma non prenderla come una critica "cattiva". Potrei postare codice VB6 scritto da me anni fa... Cose da far venire i brividi...

Quote:
Originariamente inviato da radeon_snorky Guarda i messaggi
p.s. il processo excel rimane in memoria!!! uffiiiiiiiiiiii
E' un problema arci-noto. A volte Excel scompare dal Task Manager, a volte no. Il Processo Excel verrà chiuso comunque alla chiusura della Form, o dell'Application...
Ci sono diverse strategie per evitarlo. Puoi killare il processo...
Personalmente mi sto facendo una classe che gestisce in modo efficiente e definitivo i Processi Office da Interop, ma non penso certo di postarla qui...
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2009, 12:27   #17
radeon_snorky
Senior Member
 
Iscritto dal: Mar 2003
Messaggi: 2188
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
A mio modo di vedere... SI !
Ma non prenderla come una critica "cattiva". Potrei postare codice VB6 scritto da me anni fa... Cose da far venire i brividi...



E' un problema arci-noto. A volte Excel scompare dal Task Manager, a volte no. Il Processo Excel verrà chiuso comunque alla chiusura della Form, o dell'Application...
Ci sono diverse strategie per evitarlo. Puoi killare il processo...
Personalmente mi sto facendo una classe che gestisce in modo efficiente e definitivo i Processi Office da Interop, ma non penso certo di postarla qui...
heheheh ok!
il fatto è che vorrei avviare il programma in esecuzione automatica e usare un timer per avviare lo "scan"... vabbè... avranno un processo excel in più... non è la fine del mondo.

grazie ancora delle dritte (e del codice) ieri ho passato un sacco di tempo fermo sul capitolo che parla di array su un manuale di francesco balena ma non c'ho cavato un ragno dal buco....
radeon_snorky è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
Toyota usa giochi e premi per spingere i...
HarmonyOS ha raggiunto la soglia di sopr...
Le offerte Amazon più convenienti...
Un gruppo di ladri ha usato Google Maps ...
Apple non si fida di Samsung per la real...
Windows 11: un nuovo driver nativo mette...
Vi hanno regalato buoni Amazon? Intanto ...
Via acari, polvere e sporco da materassi...
Cuffie Beats in super offerta su Amazon,...
Xbox Cloud Gaming arriva su Amazon Fire ...
Un blackout a San Francisco manda in til...
Windows 11 è diventato più...
Apple cambia strategia a causa della cri...
007 First Light: uscita rimandata di due...
Samsung Galaxy A37 e A57: il comparto fo...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 19:54.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v