Torna indietro   Hardware Upgrade Forum > Software > Programmazione

PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu
Il modello "build to order" di PCSpecialist permette di selezionare una struttura base per un sistema, personalizzandolo in base alle specifiche esigenze con una notevole flessibilità di scelta tra i componenti. Il modello Lafité 14 AI AMD è un classico notebook clamshell compatto e potente, capace di assicurare una elevata autonomia di funzionamento anche lontano dalla presa di corrente
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto
Nothing con il suo nuovo Phone 4(a) conferma la sua identità visiva puntando su una costruzione che nobilita il policarbonato. La trasparenza resta l'elemento cardine, arricchita da una simmetria interna curata nei minimi dettagli. Il sistema Glyph si evolve, riducendosi nelle dimensioni ma aumentando l'utilità quotidiana grazie a nuove funzioni software integrate e notifiche visive. Ecco tutti i dettagli nella recensione completa
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale
Nelle ultime settimane abbiamo provato la Corsair Vanguard Air 99 Wireless, una tastiera tecnicamente da gaming, ma che in realtà offre un ampio ventaglio di possibilità anche al di fuori delle sessioni di gioco. Flessibilità e funzionalità sono le parole d'ordine di una periferica che si rivolge a chi cerca un prodotto capace di adattarsi a ogni esigenza e ogni piattaforma
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: 2208
[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: 2208
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: 2208
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: 2208
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: 2208
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: 2208
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: 2208
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: 2208
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: 2208
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: 2208
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


PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu PC Specialist Lafité 14 AI AMD: assemblat...
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto Recensione Nothing Phone 4(a): sempre iconico ma...
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale Corsair Vanguard Air 99 Wireless: non si era mai...
Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lav...
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo Recensione Samsung Galaxy S26 Ultra: finalmente ...
12 MW e oltre 20.000 pannelli: Stellanti...
Sono bastate solo 5 ore per insegnare a ...
Fastweb + Vodafone e TIM: un accordo per...
Scaleway apre una nuova cloud region a M...
Il PC non dà accesso al disco C:/...
Attenzione alle app IPTV: nascondono Per...
Controller Xbox in offerta su Amazon: co...
vivo X300 Pro 5G a 1.199€ su Amazon: il ...
"Portraits of Italians": la ca...
Roborock Qrevo Curv 2 Pro crolla di prez...
Uber ha trovato il partner per i robotax...
Sony pronta a dire addio al marchio PSN:...
ARCTIC Senza AI 370: il PC 'sotto la scr...
Corsair 3200D, il mid-tower sotto i 100€...
Esiste un SSD NVMe M.2 2280 da 16 TB, ma...
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: 07:13.


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