Я бы воспользовался методом чтения из Excel (он подходит и для Spreadsheet), предложенным AndyD'ом здесь:
Построчный импорт из Excel через COM . Скорость выполнения вас приятно удивит. Нужно будет скачать и зарегистрировать dll.
Что же касается того, как определить, что из ячеек изменилось (пересчиталось), то я бы воспользовался возможностью статического метода Set::difference, который может сравнить состав двух множеств и вернуть несовпадения (из первого множества). На псевдокоде это выглядит примерно так:
Код:
setРасхожденияПосле = Set::difference( setПослеОперации, setДоОперации );
Все множества - из контейнеров (а по физическому смыслу - ячеек) вида [строка,столбец,значение].
Перед грядущим изменением пробегаетесь по всем ячейкам и заполняете множество setДоОперации. После изменения опять пробегаетесь по всем ячейкам и заполняете множество setПослеОперации. Наконец, вычисляете множество setРасхожденияПосле (изменившиеся ячейки), которое затем циклом перебираете и записываете в нужную таблицу Аксапты (ну, или куда там вам надо).