ich arbeite zwar schon eine Weile mit Stata, aber mit Mata hatte ich noch nichts zu tun. Die neue Funktion putexcel ist ja sehr schön, aber ich brächte sowas wie "getexcel", also ich muss aus verschiedenen Exceltabellen einige Werte auslesen. Dabei muss ich die Zellen genau bestimmen können, da die Werte nicht in rechteckigen Tabellen angeordnet sind, import o.ä. fällt also aus.
Auf meiner Suche bin ich dann auf die xl() - Exel file I/O class von Mata gestoßen. Im Prinzip funktioniert das auch ganz gut. Beispiel:
- Code: Alles auswählen
clear all
set more off
mata:
B=xl()
B.load_book("C:\data\Test1")
B.set_sheet("Meldung 1")
real matrix cells()
real rowvector rows, cols
rows=(12,12)
colls= (3,3)
cells=B.get_number(rows, colls)
inh=cells[1,1]
st_numscalar("inhalt", inh)
end
di inhalt
exit
Dieses kleine do-file liest also aus der Datei Test1.xls, Blatt Meldung 1 die Zelle C12 aus und gibt sie an Stata als Scalar inhalt zurück. Da ich so etwas sehr oft machen muss, möchte ich eine kleine Funktion daraus machen, der ich nur noch die Koordinaten übergebe. Doch ich bekomme immer nur Fehlermeldungen:
- Code: Alles auswählen
clear all
set more off
mata:
B=xl()
B.load_book("C:\data\Test1")
B.set_sheet("Meldung 1")
B.get_number((12,12), (3,3))
void function getcell()
{
B.get_number((12,12), (3,3))
}
end
mata: getcell()
exit
Der erste Aufruf von B.get_number() funktioniert, die Funktion getcell() aber nicht, Fehler 3999 system assertion false. (Koordinaten werden bei diesem Beispiel noch nicht übergeben. Auch wenn ich die xls-Datei explizit in der Funktion öffne (B.load_book und B.set_sheet) erscheint dieser Fehler.
Hat jemand ne Idee?