Arbeiten mit externen Excel-Arbeitsmappen
Neben dem Zugriff auf die in INOSIM eingebaute Excel-Arbeitsmappe (siehe Tipp Nutzen Sie Ihr Excel-VBA-Wissen bei der Arbeit mit INOSIM), kann mit Hilfe von Visual Basic auch auf im Windows-Dateisystem gespeicherte Excel-Dateien zugegriffen werden oder es können neue Arbeitsmappen erstellt werden.
Vorbereitung
- Aktivieren Sie die Microsoft Excel Object Library im INOSIM Basic-Editor (Menü Extras > Verweise > COM):
- Definieren Sie eine neue Objektvariable (z. B. Excel) als globale Public-Variable:
Public Excel As Object 'As public variable at top of the Macro
Weisen Sie der Objektvariable in der Initialisierung Ihrer Simulation die Excel-Applikation mittels der CreateObject-Funktion zu:
Excel = CreateObject("Excel.Application")
Nun haben Sie Zugriff auf MS Excel über die gleichnamige Objektvariable. Sie können entweder eine neue Arbeitsmappe erstellen oder bereits vorhandene öffnen.
Öffnen einer bestehenden externen Excel-Arbeitsmappe
Um eine bereits vorhandene Excel-Arbeitsmappe zu öffnen, können Sie die Open-Methode verwenden.
Die folgende Code-Ausschnitte bieten eine praktische Funktion, um eine Excel-Arbeitsmappe in einer Zeile zu öffnen und zu zeigen, wie die Arbeitsmappe durch VBA bearbeitet werden kann.
Private Function OpenExternalWorkbook(pathToWorkbook As String) As Workbook
'Open external Excel Workbook
' returns Workbook object myExtWorkbook
Dim myExtWorkbook As Workbook
Excel = CreateObject("Excel.Application")
myExtWorkbook = Excel.Workbooks.Open(pathToWorkbook)
OpenExternalWorkbook = myExtWorkbook
End Function
Public Excel as Object ' Don't forget the declaration of the global variable "Excel", as explained above
Private Sub Simulation_Init() Handles Simulation.Init
Dim myWorkbookPath As String
Dim myWorkbook As Workbook
Dim myWorksheet As Worksheet
Dim numBatchesA As Integer
Dim numBatchesB As Integer
Dim numBatchesC As Integer
'Change this to the path to your workbook
myWorkbookPath = "C:\Users\INOSIMUser\Data\externalWorkbook.xlsx"
myWorkbook = OpenExternalWorkbook(myWorkbookPath)
myWorksheet =myWorkbook.Worksheets("Number of Batches")
'Read number of Batches myWorksheet
numBatchesA = myWorksheet.Cells(1,2).value '=10
numBatchesB = myWorksheet.Cells(2,2).value '=15
numBatchesC = myWorksheet.Cells(3,2).value '=12
'myWorkbook.Save 'Use to save changes to the workbook, if desired
myWorkbook.Close 'Important!
Console.Information("Batches of Product A: " & numBatchesA)
Console.Information("Batches of Product B: " & numBatchesB)
Console.Information("Batches of Product C: " & numBatchesC)
End Sub
In dem oben aufgeführten Beispiel wird die externe Arbeitsmappe geöffnet und Werte aus dem angegebenen Arbeitsblatt werden eingelesen.
Falls Änderungen an dem Arbeitsblatt vorgenommen wurden, können diese durch Anwendung der Save-Methode gespeichert werden. Schließen Sie die Arbeitsmappe, wenn Sie diese nicht mehr benötigen, über die Close-Methode. Achten Sie darauf, geöffnete Arbeitsmappen auch wieder zu schließen, um unerwartetes Verhalten sowie Datenverlust zu vermeiden.
Tipp: Sie können mit Hilfe der GetFilePath-Funktion auch eine manuelle Auswahl bei Simulationsstart initiieren.
Eine neue Excel-Arbeitsmappe erstellen
Wollen Sie eine neue Excel-Arbeitsmappe erstellen, um beispielsweise nach jedem Simulationslauf die Ergebnisse separat abzuspeichern, können Sie die Add-Methode verwenden.
Der folgende Beispiel-Code führt die dafür nötigen Schritte auf:
' Don't forget the declaration of the global variable "Excel", as explained above
Private Function WriteResultsToNewWorkbook()
Dim savePath As String
Dim myWorkbook As Workbook
Dim myWorksheet As Worksheet
Excel = CreateObject("Excel.Application")
'Create a new workbook and
'Add a worksheet and rename it
myWorkbook = Excel.Workbooks.Add
myWorksheet = myWorkbook.Worksheets.Add
myWorksheet.Name = "Results 1"
'Write results into the new workbook
myWorksheet.Cells(1,1) = "Storage Product A"
myWorksheet.Cells(1,2) = "Storage Product B"
myWorksheet.Cells(1,3) = "Storage Product C"
myWorksheet.Cells(2,1) = 5000
myWorksheet.Cells(2,2) = 11250
myWorksheet.Cells(2,3) = 4800
'Save and close the new workbook
savePath = "C:\Users\INOSIMUser\Data\externalWorkbookResults.xlsx"
myWorkbook.SaveAs(savePath) 'Updates the path of the workbook, too, so it can be used with .Save now as well
'Console.Information(myWorkbook.FullName) 'Shows the full path of the new workbook
myWorkbook.Close
End Function
Zunächst wird eine neue Excel-Arbeitsmappe erstellt und in dieser ein neues Arbeitsblatt hinzugefügt. Im vorliegenden Beispiel wird der Inhalt der Tanks Storage A, Storage B und Storage C in das Arbeitsblatt Results 1 geschrieben. Nachdem die Ergebnisse geschrieben wurden, muss die neue Arbeitsmappe gespeichert werden. Verwenden Sie die SaveAs-Methode, um den Dateipfad und den Dateinamen der neu erstellten Arbeitsmappe zu definieren. Dadurch wird der im Arbeitsmappen-Objekt gespeicherte Dateipfad aktualisiert, so dass Sie anschließend die Save-Methode, wie oben beschrieben, verwenden können. Abschließend sollten die Sie die Arbeitsmappe mit der Close-Methode wieder schließen.
Weitere Informationen zu hilfreichen Funktionen und Anwendungen sowie dem Umgang mit workbook und worksheet Objekten finden Sie in der offiziellen Microsoft Dokumentation: https://docs.microsoft.com/de-de/office/vba/api/excel.workbook.
Verwendung des Range-Objekts
Beim Schreiben von Daten in Excel-Tabellen kann es hilfreich sein, mehrere Werte, die in einer Array-Variablen gespeichert sind, in einem Befehl mit dem Range-Objekt zu schreiben. Leider ist das Range-Objekt in der VBA .NET-Version schreibgeschützt. Es kann jedoch weiterhin in einem separaten .COM-Makro verwendet werden, das sich leicht über Einfügen – Makro im Visual Basic Editor einfügen lässt. Das Demomodell in der .NET-Version, das Sie im Downloads-Bereich finden, zeigt ein praktisches Beispiel.
Downloads
(Nur für angemeldete INOSIM Nutzer)
- INOSIM Projekt
- Beispiel Excel-Arbeitsmappe
- PDF-Ausdruck zu diesem Tipp & Trick
Fragen?
Möchten Sie mehr über dieses Thema erfahren oder haben weitere Fragen? Bitte kontaktieren Sie uns.
Mehr Tipps & Tricks
Benutzerdefinierte Farben im INOSIM Gantt-Diagramm
Das INOSIM Gantt-Diagramm bietet die Möglichkeit, Belegungsbalken auf Basis verschiedener vordefinierter Attribute zu färben. In der Auftragssicht ist es möglich, das Farbschema sowohl mit dem…
Benutzerdefinierte Graphen und Eigenschaften von Graphen in INOSIM Gantt
Custom Curves and Properties Of Curves in INOSIM Gantt In Ihrem Modell wird derselbe Rohstoff in mehreren Tanks aufbewahrt und Sie möchten den gesamten Lagerbestand…
Transfer-Graph Visualisierung mit Tableau
Dieser Tipp & Trick stellt Ihnen ein praktisches Werkzeug zur Visualisierung und Analyse von Transfers in Ihrem Modell mit der BICON-Erweiterung zur Verfügung. Die Tableau-Arbeitsmappe…