Hallo,
ich soll ein aktuell bestehendes Programm das via VBA und Excel arbeitet neu schreiben in C#. Bisher ist es so das nach einer Aufnahme mit einer Kamera von FLIR die Daten in einer Sequenz (.seq) Datei gespeichert werden danach wird diese via Makro in Excel eingelesen und verarbeitet. Da die Excel Variante langsam und Fehlerhaft ist soll ich das nun neu schreiben.
Ich habe nun schon seit ein paar Monaten (habe mehrere Projekte) das Problem das ich es einfach nicht schaffe auf die Sequenz Datei zuzugreifen damit ich an die Daten rankomme. Die Datei ist fast 8Mb groß und aufgrund der Datenschutzrichtlinien meiner Firma kann ich diese leider hier nicht zur Verfügung stellen.
Ich kann hier allerdings den Code aus der aktuellen VBA Variante posten ich hoffe das ihr damit vielleicht etwas anfangen könnt.
Danach kommt noch Code das ist dann aber nur das schreiben der bereits eingelesen Informationen in Excel und erstellen von Diagramme. Die Deklaration der Variablen habe ich auch weg gelassen da es nur Integer, Double oder String Variablen sind was dem Kontext aber leicht zu entnehmen ist.
Hoffe ihr könnt mir hier weiterhelfen komme von alleine nicht weiter 😦
Dim sess As Object
Sub Auswertung()
program_name = "IR Autograb V. 3.1
xls_path = "C:\Thermographie\Auswertungen\"
Cam_vers = "SC 2000"
Call InputFrames
Call GrabValues
Call Store_File
End Sub
Sub InputFrames()
'Eingabe Sequenzen
seq_anzahl = InputBox("Wieviele Sequenzen möchten sie auswerten ?", program_name)
'Eingabe Sequenzname
seq_set = 0
Do Until seq_set = seq_anzahl
seq_set = seq_set + 1
seq_title(seq_set) = InputBox("Name von Sequenz " & seq_set & "?", program_name)
Loop
'Eingabe Areas
area_anzahl = InputBox("Wieviele Areas enthalten die Sequenzen ?", program_name)
'Eingabe Areaname
x_set = 0
Do Until x_set = area_anzahl
x_set = x_set + 1
area_name(x_set) = InputBox("Name von Area " & x_set & "?", program_name)
Loop
'Eingabe Spots
spot_anzahl = InputBox("Wieviele Hotspots enthalten die Sequenzen ?", program_name)
'Eingabe Spotname
x_set = 0
Do Until x_set = spot_anzahl
x_set = x_set + 1
spot_name(x_set) = InputBox("Name von Spot " & x_set & "?", program_name)
Loop
'Eingabe Anzahl Messwerte
seq_set = 0
Do
seq_set = seq_set + 1
messwert_anzahl(seq_set) = InputBox("Wieviele Meßwerte möchten sie aus Sequenz " & _
seq_set & " (" & seq_title(seq_set) & ") übertragen ?", program_name)
Loop Until seq_set = seq_anzahl
'Eingabe des Dateinamens
xls_filename = InputBox("Unter welchem Namen soll die Auswertung abgelegt werden ?", _
program_name) & ".xls"
End Sub
Sub GrabValues()
seq_set = 0 'Start der Routine
Do
seq_set = seq_set + 1
anfx = 2
anfy = 8
'Selektieren der neuen Sequenz
Sheets("Stand-by Bilder").Activate
ActiveSheet.Shapes(seq_set).Select
Selection.Verb Verb:=xlPrimary
Range("A1").Select
Set sess = Worksheets("Stand-by Bilder").OLEObjects(seq_set).Object
sess.GotoFirstImage
seq_filename = sess.GetNamedValue("filename")
seq_date = sess.GetNamedValue("Date")
'Erstellen und Beschriften der Wertetabelle
If seq_set = 1 Then Sheets.Add After:=Worksheets("Diagramme") Else Sheets.Add _
After:=Worksheets("Sequenz " & seq_set - 1)
Sheets("Tabelle" & (seq_set)).Name = "Sequenz " & (seq_set)
Sheets("Sequenz " & seq_set).Activate
Cells(anfy - 7, anfx - 1) = "Sequenz:"
Cells(anfy - 7, anfx).Value = sess.GetNamedValue("filename")
Cells(anfy - 6, anfx - 1) = "Titel:"
Cells(anfy - 6, anfx).Value = seq_title(seq_set)
Cells(anfy - 5, anfx - 1) = "Aufnahme"
Cells(anfy - 5, anfx).Value = sess.GetNamedValue("Date")
Cells(anfy - 4, anfx - 1) = "Start"
Cells(anfy - 4, anfx).Value = sess.GetNamedValue("time")
Cells(anfy - 3, anfx - 1) = "Bilder"
Cells(anfy - 3, anfx).Value = (messwert_anzahl(seq_set))
Cells(anfy + 1, anfx - 1) = "Maxtemp/°C"
Cells(anfy, anfx - 1) = "Meßpunkte:"
ZeIndex = 8
SpIndex = 3
x_set = 0 'Areanamen in Sequenzsheet und SG-Daten einfügen
Do Until x_set = area_anzahl
x_set = x_set + 1
Sheets("Sequenz " & seq_set).Activate
Cells(ZeIndex, SpIndex).Value = area_name(x_set)
Sheets("SG-Daten").Activate
Cells(x_set + 17, 1).Value = area_name(x_set)
SpIndex = SpIndex + 1
Loop
x_set = 0 'Spotnamen in Sequenzsheet und SG-Daten einfügen
Do Until x_set = spot_anzahl
x_set = x_set + 1
Sheets("Sequenz " & seq_set).Activate
Cells(ZeIndex, SpIndex).Value = spot_name(x_set)
Sheets("SG-Daten").Activate
Cells(x_set + 17 + area_anzahl, 1).Value = spot_name(x_set)
SpIndex = SpIndex + 1
Loop
Sheets("Sequenz " & seq_set).Activate
'Einfügen der Messwerte
SpIndex = anfx 'Set=2(Spalte B)
ZeIndex = anfy + 3 'Set=11(Zeile11)
messwert_set = 0
Do
messwert_set = messwert_set + 1
Cells(ZeIndex, SpIndex - 1).Value = sess.GetNamedValue("time")
Cells(ZeIndex, SpIndex).FormulaR1C1 = "=RC[-1]-R" & anfx + 9 & "C1"
'Einfügen Areas
x_set = 0
Do Until x_set = area_anzahl
x_set = x_set + 1
SpIndex = SpIndex + 1
area_temp = sess.GetNamedValue("ar" & x_set & ".max")
Cells(ZeIndex, SpIndex).Value = area_temp
Loop
'Einfügen Spots
x_set = 0
Do Until x_set = spot_anzahl
x_set = x_set + 1
SpIndex = SpIndex + 1
spot_temp = sess.GetNamedValue("sp" & x_set & ".temp")
Cells(ZeIndex, SpIndex).Value = spot_temp
Loop
Cells(1, 100).Value = ZeIndex 'Diagrammsteuerwert EndZeile
Cells(2, 100).Value = SpIndex 'Diagrammsteuerwert EndSpalte
Cells(3, 100).Value = anfy 'Diagrammsteuerwert AnfangsZeile
Cells(4, 100).Value = anfx 'Diagrammsteuerwert AnfangsSpalte
Cells(5, 100).Value = seq_anzahl 'Diagrammsteuerwert Anzahl der Sequenzen
ZeIndex = ZeIndex + 1
SpIndex = anfx
sess.StepForward
Loop Until messwert_set = messwert_anzahl(seq_set)
'Einfügen der maxtemp in Sequenzsheet und SG-Daten
ZeIndex = 9
x_set = 0
Do
x_set = x_set + 1
SpIndex = anfx + x_set
Cells(ZeIndex, SpIndex).FormulaR1C1 = "=MAX(R[1]C:R[" & _
messwert_anzahl(seq_set) & "]C)"
max_temp = Range(Cells(ZeIndex, SpIndex), Cells(ZeIndex, SpIndex)).Value
Sheets("SG-Daten").Activate
Range(Cells(17, seq_set + 1), Cells(17, seq_set + 1)).Value = seq_title(seq_set)
Range(Cells(x_set + 17, seq_set + 1), Cells(x_set + 17, seq_set + 1)). _
Value = max_temp '& " °C" (mit °C anzeigen)
Range(Cells(x_set + 17, seq_set + 1), Cells(x_set + 17, seq_set + 1)).Font.Size = 14
Sheets("Sequenz " & seq_set).Activate
Loop Until x_set = area_anzahl + spot_anzahl
Call SG_Daten
Call Frame("A1:B5")
Loop Until seq_set = seq_anzahl
End Sub
Sub SG_Daten()
Sheets("SG-Daten").Activate
Cells(12, 2).Value = Date 'Datum einfügen
Cells(10, 2).Value = Cam_vers 'Kameraversion einfügen
Cells(8, 2).Value = xls_filename 'Dateiname einfügen
esp = seq_anzahl + 1
eZe = area_anzahl + spot_anzahl + 17
NumAlphaInterpreter
Frame ("A17:" & x & eZe)
Sheets("Sequenz " & seq_set).Activate
End Sub
Hi Tackles,
ich befürchte, auf diese Frage wirst du keine zufriedenstellende Antwort bekommen. Das liegt zum einen daran, daß dein Text nahezu unlesbar (so ganz ohne Satzzeichen). Zum anderen ist die einzige Information über die fraglichen Dateien (daß sie etw 8 MB groß sind) nicht wirklich von Interesse. Was dort drin steht, und welche Informationen du auslesen willst, enthältst du uns ja vor. Und es ist nicht ersichtlich, wo das Problem eigentlich liegt. Geht es dir darum, welche Informationen in der Datei enthalten sind, wie man Daten aus Dateien liest, oder wie man die Daten auswertet?
Nachdem du angeblich schon monatelang an dem Problem arbeitest, solltest du eigentlich in der Lage sein, mehr als ein paar Zeilen Excel/VBA-Code zu posten. Siehe dazu auch unsere Forenregeln: [Hinweis] Wie poste ich richtig? (Punkt 5).
Christian
Weeks of programming can save you hours of planning
Hi Sparkle,
mein Problem ist das ich zwar weiß das in der Sequenz Datei Bilder und die Messwerte gespeichert sind, ich aber nicht weiß wie die darin gespeichert sind.
Des weiteren habe ich keine Ahnung wie ich überhaupt an die Daten rankommen soll, für viele gängige Formate wie Excel gibt es ja Bibliotheken aber ich gehe mal stark davon aus das es das hier nicht gibt.
Ich habe bisher einfach nur im Internet nach C#, Sequenz und solchen Tags gesucht in der Hoffnung ein ähnliches Thema zu finden. Ich kann auch mit VBA Programmieren und verstehe auch was der damalige Coder gemacht hat aber ich kann den Code in welchem er auf die Datei zugreift nicht in C# übersetzen.
"Set sess = Worksheets("Stand-by Bilder").OLEObjects(seq_set).Object"
Nachdem er hier die Datei ausgewählt hat kann er jetzt einfach mit Befehlen (ich vermute die werden von der Datei selber gestellt) durch die Bilder Navigieren.
"sess.GotoFirstImage"
Mein Grundsätzliches Problem ist also nicht wie Werte ich die Daten aus sondern eher wie komme ich überhaupt an diese ran.
Was genau würde sich ändern wenn ich die Datei online stellen würde die Datei kann man mit keinem Editor öffnen da die Information alle kryptisch und unlesbar sind.
Du solltest einfach mal bei FLIR nachfragen - wird bestimmt ein SDK geben.
Du solltest einfach mal bei FLIR nachfragen - wird bestimmt ein SDK geben.
Habe ich bereits versucht aber keine Antwort bekommen wobei mein Betreuer schon davor gesagt hat, dass die Chancen das die Kamera noch unterstützt wird sehr gering sind, da diese schon relativ alt ist und auch nicht mehr auf der HP zu finden ist.
OLEObjects ist doch schon der entscheidende Begriff.
Wenn Excel die Datei öffnen und verarbeiten kann, ist es doch wirklich nicht schwer da etwas zu zu finden.
Hallo Zelle,
das habe ich schonmal versucht allerdings muss ich gestehen das ich das OLE nicht so richtig verstehe. Mein Versuch ist damals immer gescheitert und irgendwann habe ich das dann aus frust auf die Seite geschoben.
Der letzte Stand sieht so aus (nicht funktionsfähig)
using System;
using System.Data.OleDb;
namespace ole_test
{
class Program
{
public static void Main(string[] args)
{
OleDbConnection myConnection = new OleDbConnection();
try
{
myConnection = new OleDbConnection(@"C:\Users\ked7rt\Downloads\PWR0001.SEQ");
}
catch(Exception ex)
{
Console.WriteLine("Error! \n{0}", ex.Message);
}
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}
Da hast Du etwas falsch verstanden.
OleDb und OleObject sind 2 verschiedene Dinge.
Bist du über Flir Custhelp gegangen? Wenn nein, solltest es du es da versuchen. Die Reaktionszeit ist normalerweise weniger als 24h.
Grüße
spooky