[VB.NET2008] Realizzare scadenzario

mercoledì 11 novembre 2009 - 17.44

snorky Profilo | Newbie

salve a tutti!
come mio primo post spero di aver scelto la stanza giusta...
mi chiamo massimo e sono un totale ignorante in vb...
però vorrei realizzare un programma tipo scadenzario per utilizzarlo sul mio pc e su quello dei colleghi d'ufficio.
ho già scritto un pò di codice, preso qua e là in vari siti.
ho ancora una form vuota... anche perché non mi serve!!!
mi spiego:
il mio programma deve poter leggere un file excel realizzato in questo modo:
un solo foglio con colonna A testo e colonna B data
il fatto di utilizzare excel è più per comodità nel gestire i dati... (per questo prog potrei usare anche un txt...)
comunque, ho excel su tutti i pc, ho il file su un server di rete, ho caricato la dll di excel e ho aperto il collegamento con il file.
ho aggiunto una icona nella system tray (ed è da qui che vorrei far tutto... ecco perché non mi serve la form!)
un messo un paio di voci di menu
e qui mi fermo!
ora:
devo poter indirizzare il programma a leggere le date contenute nel foglio
devo dirgli che se ne trova una "vicina"
si ferma e mi notifica il fatto con un messaggio (più in là vediamo di aggiungere una mail...)
poi ricomincia a cercare
tutto questo ogni 5, 10, 30 minuti o ore/giorni ecc.

chi mi da una mano?
andiamo con ordine:
1) lettura celle
2) timer

per cicli, frizzi & lazzi vedo di informarmi...

grazie a tutti

Jeremy Profilo | Guru

Ciao Max.
Innanzitutto Benvenuto.
Prendi il mio come un consiglio per ottenere il meglio da questa community, piuttosto che una critica per fare polemica.

Il mio consiglio è quello di fare delle domande un pò più specifiche .... del tipo:
Devo fare questo. Ho provato così .... ma ricevo questo errore .... oppure ottengo questo risultato inaspettato.

In questo modo, è più produttivo per te, (perchè ragioni con la tua testa) e per chi, in futuro, potrebbe avere le tue stesse problematiche.

Ad ogni modo, venendo al tuo problema, comincia a cercare informazioni orientate all'interoperabilità con Excel ... esistono delle classi nel Framework che si occupano di interoperare con excel ma, sostanzialmente puoi usare un foglio di excel come se fosse la tabella di un Database.

Per quanto riguarda i timer ..... cosa non ti è chiaro?

Facci sapere....
Ciao

snorky Profilo | Newbie

hai ragione su tutto, però... io sono come un bambino caduto in un pozzo: so solo che voglio uscirci... e mi devo affidare alle capacità di chi sta sopra!
intanto questo è il codice:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
come vedi ho scritto poco codice
il form ha formborderstyle "none" e size "0,0" quindi niente pulsanti e menu
tutto va nella icona di notifica in tray, che ho già aggiunto
ora credo di sapere cosa viene adesso, il problema è che non so quali informazioni cercare in internet...
sempre su form1_load devo accedere ad un range di celle, devo creare un ciclo che legga il valore e lo metta in relazione con due dati, "data di oggi" e "giorni di anticipo" se trova il valore che soddisfa il requisito (cioè è in scadenza...) mostra un messaggio di avviso contenente la cella data e la cella testo immediatamente a fianco della data.
mi sarò ripetuto... e me ne scuso! prometto di cercare ancora! se però mi deste una dritta su come iniziare...

1000 grazie

Jeremy Profilo | Guru

Ciao Max.
Ora non vorrei complicarti troppo la vita .... ma perchè proprio un file di excel ?.
Vorrei cominciare a capire una cosa ..... questa applicazione è lo spunto per orientarti a qualcosa di più complicato in futuro .... o è un'applicazione fine a se stessa dopo il quale non farai più nulla?
Se si alla prima ipotesi ..... conviene di più pensare di appoggiarsi ad un database (SqlServer o Access poco importa per il momento .... le differenze le capirai da solo con il tempo).
Se si alla seconda ipotesi .... allora devi cercare informazioni in merito alla classe Excel del Framework, il quale, ti permette di interoperare con Excel (appunto) e pertanto manipolare i dati al suo interno ..... in alternativa puoi sempre trattare Excel come una sorta di database e quindi fare una select per recuperare i dati depositati al suo interno, appoggiarli ad un oggetto DataTable, e fare poi tutti i ragionamenti del caso per ottenere il risultato che desiseri.
Comincia a dare un occhio a questo articolo:
http://www.dotnethell.it/articles/Import-Excel-.NET-ODBC-OLEDB-Drag-and-Drop.aspx
Ad ogni modo ... noi siamo qui.
Facci sapere....
Ciao

Teech Profilo | Expert

Due input veloci sui quali ragionare secondo le tue esigenze te li posso dare...
1. Perchè usare un form? Il form è una classe con comportamenti specifici (che a te presumibilmente non servono) e quindi perchè proprio un form e non una classe "standard"?
2. Hai dichiarato la variabile 'appExcel' all'interno di una subroutine (più precisamente un Costruttore) utilizzando 'Dim' e quindi questa variabile sarà "distrutta" al raggiungimento dell'istruzione End Sub... Dai un occhio alla gestione dello Scope delle variabili in .NET...

P.S.: sono stato volutamente criptico perchè anche se sei in un pozzo è meglio che impari come uscire piuttosto che farti issare
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole

snorky Profilo | Newbie

rispondo ad entrambi... come base vorrei usare excel per il fatto che in ufficio ne girano moltissimi e se imparassi a gestirli semplificherei un poco la vita a me e ai colleghi.
datatable e affini ho provato ad usarli ma mi sono incagliato nella realizzazione di un "gestore pratiche ufficio" basato su database mdb (anagrafica clienti, tipo pratiche, note, date, scadenze, ecc.) (NB a parte la mia inettitudine... avevo un problema a far funzionare l'applicazione su i vari s.o. in ufficio abbiamo w2k winxp e winvista e io avevo xp...)
così ho ridotto il progetto ad un file excel con macro e maschere che leggono e scrivono i dati con un controllo basato sulla differenza date e la formattazione delle celle (varia il colore delle righe "pratiche" a seconda che siano + o - urgenti)
ora però mi serve realizzare un controllo su quelle pratiche che devono essere aggiornate una volta ogni 4, 5, 6 o addirittura 10 anni...
così ho passato quelle singole pratiche in un nuovo foglio contenente appunto solo una colonna testo e una colonna data per poter tenerne traccia con un allert, un messaggio o altro.
ecco perché l'idea di un mini programmino, ho reinstallato vb.netEE08 (lo avevo disinstallato dopo l'esperienza precedente) e ho avviato una "WindowsApplication" senza preoccuparmi se potessero esserci strade migliori. (mi informerò su questa "CLASSE STANDARD..." che manco so cos'è)
ho modificato un poco il codice, ora il controllo lo fa cliccando una voce di menu nella tray:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
sto facendo delle prove con gli array... ma se uso un array di dimensione 37, 2 e comprendo nel range anche la colonna b mi da errore perché legge il testo e io ho dichiarato una data... non so come "bloccare" la ricerca del valore alla sola "colonna 2" dell'array (scusate ma non so come si chiama...)

in effetti... alla fine il codice deve poter operare autonomamente tramite un time che controlla l'avvio della sub...

Teech Profilo | Expert

>
>in effetti... alla fine il codice deve poter operare autonomamente tramite un time che controlla l'avvio della sub...
>

Quindi credo ti serva un Windows Service e non un Windows Form
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole

snorky Profilo | Newbie

>>
>>in effetti... alla fine il codice deve poter operare autonomamente tramite un time che controlla l'avvio della sub...
>>
>
>Quindi credo ti serva un Windows Service e non un Windows Form
>
>--------------
>Maurizio Brini
>--------------
>Nessuna impresa è mai stata compiuta da un uomo ragionevole

cripticissimo!!!!....

che faticaccia che mi fate fare! dopo questa discussione mi sa che diventerò un genio della programmazione...
il fatto è che, per la complessità del programma e per la mole di dati da gestire, non credo ci siano differenze operative, o sbaglio? una applicazione con form nascosta credo vada più che bene.

Teech Profilo | Expert

Sono criptico perchè noi possiamo darti degli input, mica fare il programma...
Giusto per capire cos'è un Windows Service qui trovi le linee guida per creare un Windows Services: http://www.codeproject.com/KB/dotnet/simplewindowsservice.aspx
e qui trovi come creare un Windows Services che usa un Timer: http://en.csharp-online.net/Creating_a_.NET_Windows_Service%E2%80%94The_Timer_Approach
(Sempre se vuoi creare un servizio per Windows)

Se decidi di non usare i Windows Services per questioni di facilità ti sconsiglio di creare un form visto che di form non ne hai bisogno...
Considera che i form sono delle classi che ereditano dalla classe base System.Windows.Forms.Form, ma sono a tutti gli effetti classi, nulla di particolarmente diverso: ora, considerato ciò, puoi pensare di creare un programma che restituisce dei messaggi attraverso una NotifyIcon senza utilizzare i Form...
Insisto perchè questo approccio ti permette di comprendere cos'è una classe e quindi potrai capire come utilizzare anche i vari componenti come il Timer e comunque di poter porre domande più specifiche alle quali possiamo rispondere in modo più mirato...
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole

snorky Profilo | Newbie

vado a leggermi le pagine che mi hai linkato!
spero di avere più tempo nel fine settimana di quanto non ne abbia avuto fin'ora (la programmazione è solo un piccolo hobby e non riesco mai a ritagliarmi abbastanza tempo per "studiare", gli unici momenti per leggere manuali e affini, se devo essere sincero, è quando sono al cesso...)

snorky Profilo | Newbie

ma è spiegato per il C... io ho solo VB... e tra l'altro non credo possa creare un servizio... quindi la form me la tengo a dimensione 0;0 e morta lì... :(

che fatica! che fatica! :)

snorky Profilo | Newbie

con l'aiuto di un conoscente ho "risolto" così:
avvio il timer
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
codice di verifica
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
e lo richiamo col timer
Private Sub Timer1_Tick(ByVal Sender As Object, ByVal e As EventArgs) Handles Timer1.Tick Call verifica() End Sub

mi ero fissato con gli array...
chi mi spiega la differenze con le list?!?!?!

p.s. non riesco a creare un servizio... sicuri che si possa fare con la versione express!?!?!?
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5