Excel-Zellen auslesen

Mata, die Matrizen-Programmiersprache von Stata.

Excel-Zellen auslesen

Beitragvon mangel76 » Fr 24. Jan 2014, 10:40

Hallo,

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?
mangel76
 
Beiträge: 38
Registriert: Do 9. Jan 2014, 16:44
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Excel-Zellen auslesen

Beitragvon mangel76 » Fr 24. Jan 2014, 10:47

Hat sich schon erledigt. Ich muss folgendes einfügen:

Code: Alles auswählen
class xl scalar B


Dann läuft es. Allerdings muss ich wohl auch jedesmal Datei und Tabelle neu öffnen. Oder hat jemand ne andere Idee?
mangel76
 
Beiträge: 38
Registriert: Do 9. Jan 2014, 16:44
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post


Zurück zu Mata

Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 1 Gast

cron