Du brauchst keine Transaktion, da du nur lesend zugreifst.
Du solltest nicht jede Zelle einzeln holen, sondern alle auf einen Rutsch.
Dazu muss der Rückgabewert von Double zu Variant geändert werden.
Genauer gesagt du musst die Daten in einem 2-dimensionalen
Variant-Array verpacken.
Wenn du in Excel dann ein Range-Objekt hast, dass die gleiche Anzahl von Reihen und Spalten hat, kann man das Varaint-Array direkt zuweisen. (rangeobj.Value := variantarray
Natürlich ist es nicht ganz einfach Variant-Arrays aus DLLs rauszutransportieren (wer legt es an, wer gibt es frei ?).