# Excel Daten zur Laufzeit in WinCC/STEP 7 importieren



## Dav (27 Oktober 2011)

Hallo zusammen,
ich suche verzweifelt eine Lösung, Daten mit Zeitstempel aus Excel in WinCC zu importieren. Die Daten sollen mit dem WinCC Online Trend Control der ActiveX-Controls dargestellt werden. Weiter sollen die Daten in STEP 7 zur Verarbeitung verfügbar sein. Mittels Button in WinCC soll zur Laufzeit ein gewünschter Datensatz importiert werden können.

Meine Internetrecherche führte mich zur Lösung mittels OPC-Server. Allerdings habe ich keine Ahnung wie die Implementierung aussehen soll, ob es überhaupt ein Lösungsansatz ist und welche Zusatzsoftware ich unter Umständen benötige.?
Ich verwende übrigens STEP 7 V5.5 und WinCC V7.0.

Vielen Dank für eure Hilfe!

Dav


----------



## Schablone (27 Oktober 2011)

```
'Variablendeklaration
Dim objExcelApp
Dim objWorkbooks
Dim objSheet

'zuweisen der Excel-Applikation
Set objExcelApp = CreateObject ("excel.application")
    
'zuweisen der Excel-Datei
Set objWorkbooks = objExcelApp.Workbooks
    
'vorhandene Tabelle öffnen
objWorkbooks.Open ("C:\Daten\Vorlagen\Rollenprotokoll.xls")

'Auswahl der Tabelle 1
Set objSheet = objWorkbooks.Item(1).Worksheets(1)


With objSheet
         'übertragen der Kopfdaten Datum und Uhrzeit
        .Cells(1,2).Value = HMIRuntime.Tags("Datum").Read
        .Cells(43,2).Value = HMIRuntime.Tags("Datum").Read
        .Cells(85,2).Value = HMIRuntime.Tags("Datum").Read
        .Cells(127,2).Value = HMIRuntime.Tags("Datum").Read

End With    

objWorkbooks.Close
objExcelApp.Quit
Set objExcelApp = Nothing
```
Beispiel zum schreiben von einer Excel-Tabelle.
Lesen ist dann dementsprechend.


----------



## Dav (27 Oktober 2011)

Danke für die schnelle Antwort. Aber sorry, des ist mir zu knapp formuliert. Der Quellcode gehört jetzt wo genau hin? Soll der in eine C-Aktion in WinCC eingetragen werden oder verstehe ich das falsch? Wohin werden die Daten dann geschrieben? Ist .Cells(x,y).Value die Bezeichnung für ein Objekt in WinCC? Was genau bewirkt das Item(1) unter dem Kommentar 'Auswahl der Tabelle 1? Worksheet(1) steht wohl für Tabellenblatt(1)? 
Versteh mich nicht falsch, die Antwort macht echt was her, aber ich habe noch etwas Erklärungsbedarf...
Danke!

Dav


----------



## Schablone (27 Oktober 2011)

Dav schrieb:


> Der Quellcode gehört jetzt wo genau hin? Soll der in eine C-Aktion in WinCC eingetragen werden oder verstehe ich das falsch?



Das ist ein VB-Script für WinCC. Mit diesem Script wird eine Excel-Datei geöffnet und Werte in Zellen geschrieben.



Dav schrieb:


> Ist .Cells(x,y).Value die Bezeichnung für ein Objekt  in WinCC?



.Cells(x,y).Value ist deine Zelle in der Excel-Tabelle



Dav schrieb:


> Was genau bewirkt das Item(1) unter dem Kommentar 'Auswahl der  Tabelle 1? Worksheet(1) steht wohl für Tabellenblatt(1)?


 
Tabellen-Blatt 1 der Excel-Tabelle.

Bis dann

Schablone


----------



## Dav (27 Oktober 2011)

Danke! Hab den Code mal folgendermaßen für mich angepasst:

```
Sub OnClick(ByVal Item)       
'Variablendeklaration
Dim objExcelApp
Dim objWorkbooks
Dim objSheet
'zuweisen der Excel-Applikation
Set objExcelApp = CreateObject ("excel.application")
    
'zuweisen der Excel-Datei
Set objWorkbooks = objExcelApp.Workbooks
    
'vorhandene Tabelle öffnen
objWorkbooks.Open ("D:\Simulation\Tests\Archiv.xls")
'Auswahl der Tabelle 1
Set objSheet = objWorkbooks.Item(1).Worksheets(1)

With objSheet
         'übertragen der Kopfdaten Datum und Uhrzeit
        .Cells(10,1).Value = HMIRuntime.Tags("P_Last").Read
        '.Cells(43,2).Value = HMIRuntime.Tags("P_Last").Read
        '.Cells(85,2).Value = HMIRuntime.Tags("P_Last").Read
        '.Cells(127,2).Value = HMIRuntime.Tags("P_Last").Read
        'HMIRuntime.Tags("P_Last_1").Write = .Cells(11,1).Value
        .Cells(11,1).Value = HMIRuntime.Tags("P_Last_1").Write 
End With    
objWorkbooks.Close
objExcelApp.Quit
Set objExcelApp = Nothing
End Sub
```
Das Schreiben in Excel funktioniert einwandfrei. Das Lesen aus .Cells(11,1) funktioniert aber leider nicht. Weist du zufällig hierfür auch noch die Syntax? 
Das ganze scheint ja einfacher zu sein, als ich anfangs angenommen habe. 
Vielen, vielen Dank für deine Hilfe!
Dav


----------



## Schablone (27 Oktober 2011)

```
With objSheet
         'übertragen der Kopfdaten Datum und Uhrzeit
        .Cells(10,1).Value = HMIRuntime.Tags("P_Last").Read
        '.Cells(43,2).Value = HMIRuntime.Tags("P_Last").Read
        '.Cells(85,2).Value = HMIRuntime.Tags("P_Last").Read
        '.Cells(127,2).Value = HMIRuntime.Tags("P_Last").Read
        'HMIRuntime.Tags("P_Last_1").Write = .Cells(11,1).Value
        .Cells(11,1).Value = HMIRuntime.Tags("P_Last_1").Write 
End With
```

Schmeiss die letzte Zeile vor "End With" mal raus.


----------



## Dav (28 Oktober 2011)

Wenn ich die Zeile rausschmeise, schreibt er ja wieder nur in die Excel-Datei. Das Problem ist aber, wie ich eine Zelle aus der Excel Datei lesen kann.
Hab jetz folgendes probiert, nachdem ich nochmal gegoogeld habe, aber leider auch ohne Erfolg.

```
Sub OnClick(ByVal Item)              
'Variablendeklaration
Dim objExcelApp
Dim objWorkbooks
Dim objSheet
'zuweisen der Excel-Applikation
Set objExcelApp = CreateObject ("excel.application")
    
'zuweisen der Excel-Datei
Set objWorkbooks = objExcelApp.Workbooks
    
'vorhandene Tabelle öffnen
objWorkbooks.Open ("D:\Simulation\Tests\Archiv.xls")
'Auswahl der Tabelle 1
Set objSheet = objWorkbooks.Item(1).Worksheets(1)

With objSheet
         'übertragen der Kopfdaten Datum und Uhrzeit
        .Cells(10,1).Value = HMIRuntime.Tags("P_Last").Read
        '.Cells(43,2).Value = HMIRuntime.Tags("P_Last").Read
        '.Cells(85,2).Value = HMIRuntime.Tags("P_Last").Read
        '.Cells(127,2).Value = HMIRuntime.Tags("P_Last").Read
        '.Cells(11,1).Value = HMIRuntime.Tags("P_Last_1").Write
        HMIRuntime.Tags("P_Last_1") = .Cells(11,1).Value
  '.Cells(11,1).Value = HMIRuntime.Tags("P_Last_1").Write
End With    
objWorkbooks.Close
objExcelApp.Quit
Set objExcelApp = Nothing
End Sub
```
Wie kann ich eine Zelle aus Excel auslesen und im WinCC TAg speichern?


----------



## Schablone (28 Oktober 2011)

Hallo Dav.

Ich habs jetzt nochmal selber ausprobiert.
Bei mir klappt das hier.


```
'Variablendeklaration
Dim objExcelApp
Dim objWorkbooks
Dim objSheet
'zuweisen der Excel-Applikation
Set objExcelApp = CreateObject ("excel.application")
    
'zuweisen der Excel-Datei
Set objWorkbooks = objExcelApp.Workbooks
    
'vorhandene Tabelle öffnen
objWorkbooks.Open ("E:\Projekte\HOB\Test\Test.xls")

'Auswahl der Tabelle 1
Set objSheet = objWorkbooks.Item(1).Worksheets(1)

With objSheet
        'übertragen der Kopfdaten Datum und Uhrzeit
        HMIRuntime.Tags("Test_1").Write .Cells(1,1).Value
End With    

objWorkbooks.Close
objExcelApp.Quit
Set objExcelApp = Nothing
```
Kein Witz!!


----------



## Dav (28 Oktober 2011)

Juhu! Es geht! Super! Vielen Dank! Hab mich da mit dem "=" vertütelt...
Danke!


----------



## Dav (31 Oktober 2011)

Hi nochmal,
also sorry, aber dieses VBScript bringt mich zur Verzweiflung...
Folgender Code schreibt zwar in Excel, liest aber nicht aus Excel und scheint Excel auch nicht richtig zu schließen.? 

```
Sub OnClick(Byval Item)                                                           
'Variablendeklaration
Dim objExcelApp
Dim objWorkbooks
Dim objSheet
'zuweisen der Excel-Applikation
Set objExcelApp = CreateObject ("excel.application")
    
'zuweisen der Excel-Datei
Set objWorkbooks = objExcelApp.Workbooks
    
'vorhandene Tabelle öffnen
objWorkbooks.Open ("D:\Simulation\Tests\Archiv.xls")
'Auswahl der Tabelle 1
Set objSheet = objWorkbooks.Item(1).Worksheets(1)
With objSheet
        'Schreiben nach Excel
        .Cells(11,1).Value = HMIRuntime.Tags("P_Last").Read
        'Lesen aus Excel
        HMIRuntime.Tags("P_Last_1").Write.Cells(10,1).Value
End With    
objWorkbooks.Close
objExcelApp.Quit
Set objExcelApp = Nothing
End Sub
```
Hat jemand eine Ahnung woran das liegen könnte?

Danke!
Dav


----------



## Schablone (2 November 2011)

```
HMIRuntime.Tags("P_Last_1").Write.Cells(10,1).Value
```
Das gibt es auch nicht!


```
HMIRuntime.Tags("P_Last_1").Write .Cells(10,1).Value
```
Das schon!

Mach mal zwischen ".Write" und ".Cells" ein Leerzeichen. 

Bis dann

Martin


----------



## Dav (14 November 2011)

Jezt geht es wirklich! Vielen Dank! Du hast mir sehr geholfen!
Dav


----------

