Προς το περιεχόμενο

Excel Web Query:Save data πριν το refresh...


kapages

Προτεινόμενες αναρτήσεις

Δημοσ.

Γειά σας παιδιά, χρησιμοποιώ Excel 2003 και θέλω ένα τρόπο το Excel να αποθηκεύει τα δεδομένα που παίρνει από ένα απλό Web Query πριν κανει ανανέωση και χαθούν για πάντα. Η ανανέωση θα γίνεται σε τακτά χρονικά διαστήματα όπου εγώ θα λείπω, οπότε θέλω να αποθηκεύονται τα δεδομένα πριν ανανεωθούν.

Δε με απασχολεί που θα τα αποθηκεύει, σε άλλο sheet, παρακάτω, σε άλλο αρχείο.

Κάτι έχω δει στο web για VBEditor, Class module, να καθορίσω event before και after refresh, αλλά δε κατάλαβα τίποτα.

Ίσως στα ελληνικά καταλάβω περισσότερα.

 

Ευχαριστώ εκ των προτέρων!

Δημοσ.

Δεν το γνωρίζω, αλλά να μια άλλη ιδέα:

 

Ένα script (σε VBSCript ή JScript) που θα διαβάζει τη web σελίδα που σε ενδιαφέρει (με MSXML2.XMLHTTP), θα απομονώνει ένα μέρος του HTML κώδικα (προαιρετικά), και θα αποθηκεύει το string ως εγγραφή ενός table μίας Access database. Μετά με τον Windows Scheduler θα ρυθμίσεις να τρέχει το script κάθε λίγες ώρες. Μπορεί να γίνεται έλεγχος πριν την αποθήκευση αν τα δεδομένα έχουν αλλάξει σε σχέση με την προηγούμενη εγγραφή. Η εμφάνιση των δεδομένων μπορεί να γίνεται απευθείας από την Access, με μεταφορά στο Excel, με ένα άλλο script, ή με ένα custom προγραμματάκι.

 

Αν σ' ενδιαφέρει κάτι τέτοιο, μπορώ να σου δώσω οδηγίες πώς θα το φτιάξεις.

Δημοσ.

ευχαριστώ! Όταν έχεις χρόνο και διάθεση μου λες πως γίνεται!

 

Τα δεδομένα που παίρνω έχουν την εξής φορμα¨

 

αριθμός, όνομα, είδος, μέγεθος, αξία,

 

και από κάτω έχω 5 σειρές με δεδομένα. Ίσως όντως να ταιριάζει στην Access η δουλειά καλύτερα.

Δημοσ.

Επειδή έχω ασχοληθεί και εγώ με το θέμα για αποθήκευση δεδομένων σε excel από asp θα σου δώσω 2-3 χρησιμα tips! Απλά η απάντηση θα σου είναι χρήσιμη μόνο αν το query σου γίνεται από asp σελίδα η έστω κάτι τέτοιο!

 

Πρώτα θα πρέπει όπως είπε και ο φίλος πριν να αποθηκευσεις τα δεδομένα που θέλεις να εκτυπωθούν στο excel σε ένα string!

 

Για παράδειγμα βάζεις σε string (sData) τόν κώδικα που θα έβαζες σε μία html σελίδα για να φτιάξεις τον πίνακα που θέλεις:

 

sData = "<table><tr><td>αριθμός</td><td>όνομα</td><td>είδος</td>

<td>μέγεθος</td><td>αξία</td></tr>"

 

Και στην συνέχεια χτίζεις το string με τα δεδομένα που θέλεις! Ως εξής:

 

sData = sData & "<tr><td>"&number&"</td><td>"&name&"</td><td>"&kind&"</td><td>"&size&"%</td><td>&price&</td></tr>"

 

όπου number, price, name, kind, size είναι μεταβλητές που περιέχουν τα δεδομένα που θέλεισ να εκτυπώσεις σε κάθε σειρα!

 

Τώρα αυτό που δεν ξέρω να σου πω ακριβώς είναι πως να αποθηκεύεται μόνο του το αρχείο σαν excel εκεί που θέλεις! Αυτό που ξέρω να σου πω είναι πως να σου ανοίγει popup που να σου ζητάει πως να σωσεις η να ανοίξεις το συγκεκριμένο excel! ΠΧ

 

FileName = "Οnoma_pou_theleis.xls"

 

response.write sData //εκτυπωνεται το string σου

Response.ContentType = "application/vnd.ms-excel"

Response.AddHeader "content-disposition","attachment; filename=" & FileName //Και έτσι θα σου ανοίξει το popup που σου είπα πριν!

 

Πλέον για να κάνεισ αυτό που θέλεις, θα πρέπει με κάποιο τρόπο όταν γίνεται refresh αυτό που θέλεις να καλείται ο παραπάνω κώδικας!

 

Συνολικά όλο:

 

 

FileName = "Οnoma_pou_theleis.xls"

 

sData = "<table><tr><td>αριθμός</td><td>όνομα</td><td>είδος</td>

<td>μέγεθος</td><td>αξία</td></tr>"

 

sData = sData & "<tr><td>"&number&"</td><td>"&name&"</td> <td>"&kind&"</td> <td>"&size&"%</td><td>&price&</td></tr></table>"

 

response.write sData //εκτυπωνεται το string σου

 

Response.ContentType = "application/vnd.ms-excel"

 

Response.AddHeader "content-disposition","attachment; filename=" & FileName //Και έτσι θα σου ανοίξει το popup που σου είπα πριν!

 

Scripting language Του παραπάνω είναι προφανώς η vbscript!

 

Καλή τύχη

Δημοσ.

Αν θέλεις μας λες τη σελίδα που διαβάζεις με το WebQuery καθώς και ποιος είναι ο πίνακας (αν έχει πολλούς) που σε ενδιαφέρει? Θα βοηθήσει να είναι τα παραδείγματα πιο συγκεκριμένα.

Δημοσ.

Αν θέλω λέει; :)

 

http://www.badstaile.com/chaos/?

 

Πίνακας "Τop 5 Losing Provinces"

έχει 5 σειρές δεδομένα.

 

Βασικά φαντάζομαι πως με την ίδια λογική θα μπορούσε ακόμα και να είναι μια τιμή, ένας αριθμός (πχ τιμή μετοχής, θερμοκρασία περιοχής) την οποία "παρακολουθεί" το excel περιοδικά και βγάζει σειρά δεδομένων που μετά χρησιμεύουν ως βάση για ανάλυση (πχ διάγραμμα). Ούτε κάτι τέτοιο ξέρω πως γίνεται.

Αλλα στη συγκεκριμένη περίπτωση πρόκειται για πίνακα 5 επί 7 που παρακολουθεί.

Δε θέλω συγκριση ενος πινακα με άλλον, θέλω να βλέπω όλους τους πίνακες, όλες τις τιμές.

Δημοσ.

http://www.dicks-blog.com/archives/2004/08/17/graphing-web-data/

 

Για να βοηθήσω λίγο ,βρήκα αυτήν εδώ τη σελίδα για οδηγίες, αλλά δε κατάφερα να το κάνω να δουλέψει.

Ο τύπος κάνει refresh ανα λεπτό και παίρνει την ώρα ως εισερχόμενο δεδομένο.

Στη συνέχεια φτιάχνει ένα διάγραμμα εξέλιξης της ώρας ανά λεπτό (10¨00, 10¨01, 10¨02). Στοιχειώδες αλλά καλό.

 

ο κώδικας που χρησιμοποιεί είναι εδώ:

 

Now we’ll need to create a class module with QueryTable Events to save the data before it’s refreshed and lost forever. In a standard module:

 

Public clsQueryEvent As CQtEvent

 

In the ThisWorkbook module

 

Private Sub Workbook_Open()

 

Set clsQueryEvent = New CQtEvent

 

Set clsQueryEvent.qtTime = WQuery.QueryTables(1)

 

End Sub

 

In a Class module named CQtEvent:

 

Public WithEvents qtTime As QueryTable

 

Private Sub qtTime_AfterRefresh(ByVal Success As Boolean)

 

WData.Range(”a” & WData.Rows.Count).End(xlUp).Offset(1, 0).Value = _

WQuery.Range(”B3″).Value

 

End Sub

 

Range(”B3″) is where the time ends up when I put the query in A1. Note that I have changed the code names of my two worksheets (F4 to show the properties window in the VBE) to WData and WQuery.

Δημοσ.

Το παρακάτω script χρησιμοποιεί τον Internet Explorer (αόρατα) για το κατέβασμα της σελίδας. Είναι λίγο πιο εύκολη λύση από το MSXML2.XMLHTTP αν και λίγο πιο βαριά (αργεί λίγο). Αφού κατέβει η σελίδα διαβάζει το source και το αποθηκεύει σε μία μεταβλητή. Μετά δημιουργεί ένα νέο αρχείο με όνομα π.χ. chaos-2005-6-3-19-21-41.htm, που προκύπτει από την τρέχουσα μέρα και ώρα. Έτσι τα διαδοχικά δημιουργούμενα αρχεία θα ταξινομούνται εύκολα από το όνομά τους. Γράφει το source στο αρχείο και τέλος. Το παράδειγμα αυτό είναι απλό και δε χρησιμοποιεί Access. Το script είναι γραμμένο σε JScript και πρέπει να σωθεί σε αρχείο με κατάληξη .js, π.χ. chaos.js. Τρέχει με διπλό κλικ πάνω στο αρχείο.

 

>var URL = "http://www.badstaile.com/chaos/?"

var d = new Date()
var file_name = "chaos"
file_name += "-" + d.getFullYear()
file_name += "-" + (d.getMonth() + 1)
file_name += "-" + d.getDate()
file_name += "-" + d.getHours()
file_name += "-" + d.getMinutes()
file_name += "-" + d.getSeconds()
file_name += ".htm"

var ie = WScript.CreateObject("InternetExplorer.Application")
ie.Navigate(URL)

while(ie.Busy) {
 WScript.Sleep(1000)
}

var source = ie.document.documentElement.outerHTML
ie.Quit()

var fso = WScript.CreateObject("Scripting.FileSystemObject")
var stream = fso.CreateTextFile(file_name, false) // don't overwrite.
stream.Write(source)
stream.Close()

Για να κάνεις το script να τρέχει κάθε ορισμένο χρονικό διάστημα θα κάνεις μία νέα Scheduled Task:

 

Start - Settings - Control Panel - Scheduled Tasks - Add Scheduled Task

 

Θα ορίσεις επανάληψη Daily και μόλις ολοκληρώσεις τον wizard θα κάνεις edit για να ορίσεις Repeat Task κάθε π.χ. μία ώρα για 24 ώρες. Λογικά θα έπρεπε να είσαι έτοιμος.

 

Όμως μάλλον δεν είσαι. Ο Scheduler σου ζήτησε όνομα χρήστη και password. Αν άφησες το password κενό (πολύ πιθανό να μην έχεις), τότε το task μάλλον δε θα τρέξει. Υπάρχει μία πολιτική των Windows να μην επιτρέπει κενά passwords, την οποία μπορείς να αλλάξεις αλλά δε στο συνιστώ. Καλύτερα να βάλεις ένα password στο δικό σου account. Μετά δώσε στη Scheduled Task το password που έβαλες. Αν δε θέλεις να βάλεις password θα πρέπει να βρεις κάποιο άλλο τρόπο να τρέχεις περιοδικά το script. Θα υπάρχουν σίγουρα προγράμματα που κάνουν αυτή τη δουλειά, αλλά μπορείς να κάνεις ένα και με scripting. Εδώ που τα λέμε μπορείς να κάνεις το ίδιο το script να τρέχει συνέχεια και να εκτελεί περιοδικά το κατέβασμα-σώσιμο. Απλά βάζεις τον κώδικα σε ένα βρόγχο while και το κάνεις να ξεκινά μόλις ανοίγει ο υπολογιστής:

 

>while(true) {
 //κώδικας
 WScript.Sleep(60*60*1000) // Κάθε μία ώρα.
}

Για να ξεκινά με το άνοιγμα του υπολογιστή βάζεις το script ή ένα shortcut στο φάκελο Startup:

 

C:\Documents and Settings\το όνομά σου\Start Menu\Programs\Startup

 

Αυτά. Αν θέλεις να το ψάξεις περισσότερο με Access κ.λπ., μερικά post που έχω κάνει μπορεί να σε βοηθήσουν. Φυσικά μπορείς να βρεις παρόμοιο κώδικα κοιτώντας κατευθείαν στο Internet.

 

- Δημιουργία βάσης δεδομένων Access μόνο με κώδικα (LINK).

- Κατέβασμα σελίδας με MSXML2.XMLHTTP (LINK).

- Δημιουργία βάσης Access με επιλεγμένα δεδομένα μίας web σελίδας σωσμένης στο δίσκο (LINK).

________________________________

EDIT 4-6-2005 10:15

 

Λίγες αλλαγές στο script, βασικά outerHTML αντί για innerHTML ώστε να γράφει και το tag <html>

Δημοσ.

Φίλε Skeftomile σε προσκυνώ! :)

Φιλε makaveli και η δική σου προσέγγιση φαίνεται σωτή, I'll just go with the easy way!

 

ευχαριστώ πολύ παιδιά!

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...