wieder mal: DB-Werte per Script in Excel

Jelly

Level-1
Beiträge
217
Reaktionspunkte
6
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen!

Ich muss das Thema wiedermal aufnehmen, habe schon etwa 100 Beiträge hier gefunden, allerdings fehlt jedesmal der entscheidende Teil:

Eine Anlage prüft Ventile auf Funktion und die Messdaten sollen in eine Excel-Tabelle hinterlegt werden. Bei meiner Runtime funktioniert das auch schon gut, die Daten werden per Script in die Tabelle geschrieben, wobei auch die Tabelle, die Datei und auch der Ordner erst erstellt wird. Nun sind das recht viele Prüfungen pro Tag, wodurch eben sehr viele Excel-Dateien entstehen würden. Ich hätte gerne, dass ich die Datei wieder öffnen kann und diese um eine Tabelle ergänze, dann die Daten eintragen und wieder speichern und schliessen.

Wie gesagt, das Grundprinzip hab ich:

Code:
Dim IP
Dim FrgName
Dim OrdnerName
Dim DateiName
Dim erw
Dim pfad

'Parameter für Skript
IP = "192.168.1.10"
FrgName = "ewj"
OrdnerName = "zgt"
DateiName = "asd"
erw = ".xls"
pfad = "\\" & IP & "\" & FrgName & "\" & OrdnerName

Dim fso
Dim fil
Dim ord
Dim xlApp
Dim xlWB
Dim xlWS

'File-Objekt erstellen
    Set fso = CreateObject("Scripting.FileSystemObject")                    'File-Objekt erstellen
        
'Ordner erstellen, sofern nicht vorhanden
    If Not fso.FolderExists(pfad) Then
        Set ord = fso.CreateFolder(pfad)                                    'Ordner erstellen
    End If
    
'Excel-Applikationen
    Set xlApp = CreateObject("Excel.Application")                            'Excel-Applikation aufrufen        
    xlApp.Visible = True                                                    'Sichtbarkeit von Excel
    
'Excel-Datei erstellen, sofern nicht vorhanden
    If Not fso.FileExists(pfad & "\" & DateiName & erw) Then
        Set xlWB = xlApp.Workbooks.Add()                                    'Datei erstellen
        xlWB.SaveAs(pfad & "\" & DateiName & erw)                            'Datei speichern unter bestimmten Namen    
    End If    

'Worksheet erstellen und Namen vergeben
    Set xlWS = xlWB.Worksheets.Add                                            'Tabelle aussuchen
    xlWS.name = (DateiName)                                                    'Tabellennamen ändern




    
'AB HIER TEST                                            
    Dim xlWS2
    Set xlWS2 = xlWB.Worksheets.Add
    xlWS2.name = ("11123")    
    
'ENDE TEST




    
'Rohtabellen löschen        
    If Not xlWB.Worksheets("Tabelle1") Is Nothing Then
        xlWB.Worksheets("Tabelle1").Delete        
    End If        
    If Not xlWB.Worksheets("Tabelle2") Is Nothing Then
        xlWB.Worksheets("Tabelle2").Delete        
    End If    
    If Not xlWB.Worksheets("Tabelle3") Is Nothing Then
        xlWB.Worksheets("Tabelle3").Delete        
    End If    

'Daten eintragen    
    xlWS.range("c3").Value = "Name"
    xlWS.range("d3").Value = "Jehle"
    xlWS.range("c4").Value = "Vorname"
    xlWS.range("d4").Value = "jippie"
    xlWS.range("c5").Value = "Alter"
    xlWS.range("d5").Value = "sag ich nich"
    xlWS.range("c6").Value = "Song"
    xlWS.range("d6").Value = "Pokerface"
    xlWS.range("c7").Value = "noch mehr Text"
    xlWS.range("d7").Value = "und noch mehr..."
    xlWS.range("c8").Value = "Name 1"
    xlWS.range("d8").Value = "Name 2"
    
'Datei speichern und schliessen    
    xlApp.ActiveWorkbook.Save                                                'Datei speichern
    xlApp.ActiveWorkbook.Close                                                'Datei schliessen
    xlApp.ActiveWorkbook.Quit
    xlApp.Quit                                                                'Excel beenden
    xlApp.Visible = False                                                    'Sichtbarkeit von Excel
    Set xlApp = Nothing
Zwischen "AB HIER TEST" und "ENDE TEST" bin ich nun dran. Denn wenn die Datei einmal geöffnet und geschlossen wurde, kann ich sie nicht mehr öffnen bzw. bekomme eben keine weitere Tabelle zugefügt. Für jeden Prüfling hätte ich gerne nur eine neue Tabelle und nicht eine komplett neue Excel-Datei.

Also falls jemand helfen kann, wäre ich sehr dankbar, sitze schon Tage dran, VBS ist auch neu für mich, aber das obenstehende hab ich ja schon mal.

was ich nachher habe: WCF 2008 Adv, MP277 Key per Ethernet mit Rechner mit fester IP verbunden.

Nice day!
 
Hast du dazu auch schon den Beitrag in der FAQ gelesen?
http://www.sps-forum.de/showthread.php?t=15348
Dort schreibt Larry unter anderem
Zitat von Larry Laffer
Hallo Volker,
zu dem genannten FAQ hätte ich noch ein schönes Addon.
Wenn man ständig auf Excel zugreifen möchte, um Daten dahin zu schreiben, dann kann man es auch als Instanz geöffnet lassen (mit dem richtigen Workbook) und dann ständig auf die geöffnete Instanz zugreifen. Das spart Systemresourcen ...

die datei (EXCEL-Script.doc) ist im anhang
 
Zuviel Werbung?
-> Hier kostenlos registrieren
jep

Danke, aber die hab ich schon etwa 47 mal angesehen. und hier wird die tabelle auch nur 1x geöffnet, seh ich das richtig? klar scheint logisch, die datei geöffnet zu lassen. aber ich weiss nie, was nach dem Prüfungsende passiert. die lassen die anlage genauso laufen, auch übers wochenende, alles bleibt an. dies könnte man in der sps erkennen, klar.
schliessen und öffnen wäre mir nun lieber.
 
Hallo,
ich habe das gerade mal gegen-gechecked.
In meinem Script Schliesse (und speichere) ich das Workbook und und beende die Applikation - also so :
Code:
xlWB.Close
xlApp.Quit
... versuch das doch mal ...

Gruß
LL
 
danke das prüf ich mal.

was ich eben gesehen habe:
Code:
'Excel-Datei erstellen, sofern nicht vorhanden
    If Not fso.FileExists(pfad & "\" & DateiName & erw) Then
        Set xlWB = xlApp.Workbooks.Add()                                    'Datei erstellen
        xlWB.SaveAs(pfad & "\" & DateiName & erw)                            'Datei speichern unter bestimmten Namen    
    End If
d.h. wenn die datei schon existiert, wird "Set xlWB = xlApp.Workbooks.Add()" ja nicht bearbeitet, was widerum heisst, dass die Datei gar nicht GEÖFFNET WIRD, sondern nur die Applikation, richtig? ich habe das nun so:

Code:
'Excel-Datei erstellen, sofern nicht vorhanden
    If Not fso.FileExists(pfad & "\" & DateiName & erw) Then
        Set xlWB = xlApp.Workbooks.Add()                                    'Datei erstellen und automatisch öffnen
    Else
        Set xlWB = xlApp.Workbooks.Open (pfad & "\" & DateiName & erw)        'Datei öffnen, wenn sie bereits existiert
    End If    
    xlWB.SaveAs(pfad & "\" & DateiName & erw)
damit kann ich die datei auch wieder öffnen. klapt prima nun!

nur was noch ist, dass beim speichern die Datei überschrieben wird, worauf eine Rückfrage erscheint. Das überschreiben soll aber automatisch gehen.
und KILL geht nicht, da ich sonst meine anderen daten lösche...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... da gab es auch noch was ... versuch mal :
Code:
xlWB.Close [B][COLOR=red]true[/COLOR][/B]
.. die Meldung müßte beim Schliessen desd Workbooks kommen und nicht beim Speichern ...

Gruß
LL
 
nun so weit...

also soweit hab ich es mal. Nun läufts per Runtime sehr gut, freu!

nun kommt das große ABER:
was ich nicht beachtet habe (sicher ein Neulings-Fehler): mit der Runtime funzt es ja, nur nicht im Panel.
der bisherige Text sieht so aus:

Code:
Dim IP
Dim FrgName
Dim OrdnerName
Dim DateiName
Dim erw
Dim pfad

'Parameter für Skript
IP = "192.168.1.10"
FrgName = "ewj"
OrdnerName = "zgt"
DateiName = "asd"
erw = ".xls"
pfad = "\\" & IP & "\" & FrgName & "\" & OrdnerName

Dim fso
Dim fil
Dim ord
Dim xlApp
Dim xlWB
Dim xlWS

'File-Objekt erstellen
      Set fso = CreateObject("Scripting.FileSystemObject")                        'File-Objekt erstellen
        
'Ordner erstellen, sofern nicht vorhanden
    If Not fso.FolderExists(pfad) Then
        Set ord = fso.CreateFolder(pfad)                                    'Ordner erstellen
    End If
    
'Excel-Applikationen
    Set xlApp = CreateObject("Excel.Application")                            'Excel-Applikation aufrufen        
    xlApp.Visible = True                                                    'Sichtbarkeit von Excel
    
'Excel-Datei erstellen, sofern nicht vorhanden und dann öffnen
    If Not fso.FileExists(pfad & "\" & DateiName & erw) Then
        Set xlWB = xlApp.Workbooks.Add()                                    'Datei erstellen und automatisch öffnen
        xlWB.SaveAs(pfad & "\" & DateiName & erw)                            'Datei speichern unter bestimmten Namen    
    Else
        Set xlWB = xlApp.Workbooks.Open (pfad & "\" & DateiName & erw)        'Datei öffnen, wenn sie bereits existiert
        xlWB.Save                                                            'Datei speichern
    End If    
                                    
        
'Worksheet erstellen und Namen vergeben
    Set xlWS = xlWB.Worksheets.Add                                            'Tabelle aussuchen
    xlWS.name = ("6680")                                                    'Tabellennamen ändern

'Rohtabellen löschen        
    If Not xlWB.Worksheets("Tabelle1") Is Nothing Then
        xlWB.Worksheets("Tabelle1").Delete        
    End If        
    If Not xlWB.Worksheets("Tabelle2") Is Nothing Then
        xlWB.Worksheets("Tabelle2").Delete        
    End If    
    If Not xlWB.Worksheets("Tabelle3") Is Nothing Then
        xlWB.Worksheets("Tabelle3").Delete        
End If    

'Daten eintragen    
    xlWS.range("c3").Value = "Prüfprogramm"    
    xlWS.range("c4").Value = "Prüflingsnummer"
    xlWS.range("c8").Value = "Datum"
    xlWS.range("d8").Value = "Uhrzeit"
    
'Datei speichern und schliessen    
    xlApp.ActiveWorkbook.Save                                                'Datei speichern
    xlApp.ActiveWorkbook.Close                                                 'Datei schliessen
    xlApp.ActiveWorkbook.Quit
    xlApp.Quit                                                                'Excel beenden
    xlApp.Visible = False                                                    'Sichtbarkeit von Excel
    Set xlApp = Nothing
das nützt aber recht wenig, richtig?

weiss nun jemand, ob das alles fürn Eimer ist?
was sicher sein muss ist, dass ich in eine neue Excel-Tabelle Daten eintragen soll, eine csv oder so tuts nicht...
und eigentlich ist es ja nur der code der die Datei erzeugt usw. richtig?
hat jemand hilfe?
 
Hallo,
damit das Ganze funktioniert muß auf dem Rechner Excel installiert sein. Wenn dein Panel ein Panel-PC ist, dann sehe ich da kein Problem - allerdings schon bei einem Multipanel oder noch darunter ... :rolleyes:

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hm

dann hab ich wohl ins schwarze gegriffen....:cry:
habe ein mp277 Key

auf dem Empfangs-rechner ist excel drauf, ja. auf dem panel natürlich nicht.

oje...
 
... du mußt dabei berücksichtigen, dass in dem Script die Fähigkeiten und Eigenschaften von Excel (lokal installiert) genutzt werden ...

Was hast du nun vor ?
CSV wäre ja auch noch ein Weg und auf dem PC ggf. eine Art Import initiieren ...
 
... du mußt dabei berücksichtigen, dass in dem Script die Fähigkeiten und Eigenschaften von Excel (lokal installiert) genutzt werden ...
...

ja das habe ich mittlerweile auch befürchtet.

Werd nun folgendes probieren:

Ich erstelle eine csv-Datei und trage mir die Werte und Texte ein, muss eben alles schön mit ";" trennen, damit ich eine passende Aufteilung erhalte. aber letztendlich kann ich diese ja sicher einmal als *.csv oder am ende als *.xls speichern. das werd ich jetzt noch probieren...
und wenn das funzt, kann der user diese xls-datei auf SEINEM rechner öffen, nehme ich an...
 
Moin!

ja wie schon erwähnt, diese Seite ist mittlerweile meine Startseite im Browser geworden. aber kann das sein, dass die programmzeilen bei wince auch nur auf dem Panel funktionieren und in der Runtime nicht?

Wäre für mich jedenfalls logisch... kann nämlich nicht mal einen Ordner erstellen.
 
:confused: hattest du denn geplant, die gleiche Applikation in eine Runtime und in ein MP zu spielen ? Das macht doch gar keinen Sinn ...
 
ja sorry, muss auch erst lernen. hatte bisher nicht mit so was zu tun... dachte wenigstens, dass ich die "wince-befehle" in der RT laufen lassen kann, aber ok, ich sehs ja ein...
werd glei mal wieder zur Firma fahren und am Panel probieren.
Trotzdem Dankeschön!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
steht schon alles in dem FAQ

kann das sein, dass die programmzeilen bei wince auch nur auf dem Panel funktionieren und in der Runtime nicht?
Wenn Du in dem von Jesper verlinkten FAQ
Es steht alles in Volker's FAQ, unter "wince".
auch den Beitrag #2 liest, dann findest Du die Antwort auf Deine Frage.
Beachte und vergleiche die unterschiedlichen Befehle, je nachdem, ob das Skript unter WinCE (MP270)
oder Win32 (PC-Windows) läuft.
Und Du findest eine Lösung für das Testen eines Panel-Projektes mit der PC-Runtime:
Damit ich meine Panel-Projekte komplett unter Windows XP testen/simulieren kann,
habe ich im WCCflexible-Projekt eine interne Panel-Variable "_System\!_RT-Sim_!"
vom Typ Byte, deren Startwert ich auf 0 oder 1 festlege, je nachdem, ob die Runtime
auf dem Panel oder auf dem WinXP-Testsystem laufen soll:
0=RT auf WinCE-OP / 1=RT auf PC (Simulation/Test)
Alle bei WinCE und Win32 unterschiedlichen Programmzeilen sind dann doppelt in den Scripten vorhanden und mit der
Panel-Variable "_System\!_RT-Sim_!" wird dann gesteuert, welche Zeilen die Runtime ausführen soll:
Code:
If SmartTags("_System\!_RT-Sim_!") Then [COLOR="SeaGreen"]' PC-Windows
    ' Programmzeilen für Ablauf unter Win32
    ' ...[/COLOR]
Else [COLOR="SeaGreen"]' WinCE
    ' Programmzeilen für Ablauf unter WinCE
    ' ...[/COLOR]
End If
Gruß
Harald
 
Zuletzt bearbeitet:
Zurück
Oben