Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Чтение из Excel в Builder |
Автор: Ozerman 5.7.2004, 05:06 |
Записываю в Excel файл данные без труда: Variant ExcelApp; ExcelApp = CreateOleObject("Excel.Application"); ExcelApp.OlePropertyGet("Workbooks").OlePropertyGet("Add"); ExcelApp.OlePropertyGet("WorkBooks").OleProcedure("Open", "c:\\File.xls"); ExcelApp.OlePropertyGet("Range", "A1:C2").OlePropertySet("Value", "111"); ExcelApp.OlePropertyGet("Workbooks", 1).OlePropertyGet("Save"); ExcelApp.OlePropertyGet("Workbooks").OlePropertyGet("Close"); ExcelApp.Clear(); Но прочитать эти же данные не могу: Variant ExcelApp; ExcelApp = CreateOleObject("Excel.Application"); ExcelApp.OlePropertyGet("Workbooks").OlePropertyGet("Add"); ExcelApp.OlePropertyGet("WorkBooks").OleProcedure("Open", "c:\\File.xls"); Variant value; //пробовал так ExcelApp.OlePropertyGet("Range", "A1").OlePropertyGet("Cells", 1, 1).OlePropertyGet("Value", value); //и так ExcelApp.OlePropertyGet("Range", "A1").OlePropertyGet("Value", value); //в отладчике value = { ??? } ExcelApp.OlePropertyGet("Workbooks").OlePropertyGet("Close"); ExcelApp.Clear(); Что делать??? |
Автор: Олег М 5.7.2004, 09:02 | ||
Борландовские объекты, к сожалению не видел. Вообще непонятно нахрена ты автоматизацией пользуешся, а не вызываешь оле-бъекты напрямую. Бейсик что-ли?
Покажи какие типы параметров у OlePropertyGet. ССылка на вариант? |
Автор: Ozerman 5.7.2004, 12:23 |
Объектов я никаких, кроме описанных выше, не использую. Всё, что мне надо, должно работать и без форм. Типы параметров у OlePropertyGet... Пошутил что-ли??? Там куча всякой лажы, о которой однозначно ничего не скажешь. Чтобы работать с этой функцией, нужно знать OLE Excel, чем позвастаться не могу. Может быть, правда, я тебя вообще не понял, за что прошу извинить. А может быть и мой вопрос не понятен. В-общем - не шарю в OLE + Excel + Builder, и помощи не знаю где искать. Если сможешь помочь прочитать кучу данных из Excel таблиц другим способом, буду несоразмерно благодарен!!! |
Автор: Олег М 5.7.2004, 12:34 | ||||
Из хёдера вытащи объявления OlePropertyGet, который с вариантом и покажи - у меня просто здесь нифига нет.
Ты сейчас делаешь с помощью автоматизации ОЛЕ, которая разработана специально для языков типа бейсик. В с++ можно получать указатели на интерфейсы и вызывать методы как у обычных классов. Собственно это и будут обычные классы. Для этого надо импортировать библиотеку типов. Кроме того всё что делаешь в ручную - делается автоматически - создаются классы, методы и т.д. Вручную этого никто не делает. Не знаю как это делается в борланде - поищи, я в вижуале не помню - там, то ли pragma import или что-то ещё. Короче в сишный файл подцепляешь dll или tlb и всё |
Автор: Ozerman 6.7.2004, 02:19 |
Variant OlePropertyGet(const String& name, TAutoArgsBase* args = 0); template <class P1> Variant OlePropertyGet(const String& name, P1 p1); template <class P1, class P2> Variant OlePropertyGet(const String& name, P1 p1, P2 p2); template <class P1, class P2, class P3> Variant OlePropertyGet(const String& name, P1 p1, P2 p2, P3 p3); template <class P1, class P2, class P3, class P4> Variant OlePropertyGet(const String& name, P1 p1, P2 p2, P3 p3, P4 p4); template <class P1, class P2, class P3, class P4, class P5> Variant OlePropertyGet(const String& name, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5); template <class P1, class P2, class P3, class P4, class P5, class P6> Variant OlePropertyGet(const String& name, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6); template <class P1, class P2, class P3, class P4, class P5, class P6, class P7> Variant OlePropertyGet(const String& name, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7); template <class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8> Variant OlePropertyGet(const String& name, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8); template <class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9> Variant OlePropertyGet(const String& name, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9); template <class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10> Variant OlePropertyGet(const String& name, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10); Нравится??? Вот и мне тожа! |
Автор: Олег М 6.7.2004, 08:42 | ||||
И что непонятного?
Здесь скорее всего передаётся не сыылка на вариант, а копия, которая при возврате из функции удаляется. Сделай
всё скорее всего заработает |
Автор: Олег М 6.7.2004, 11:30 | ||||
Или, на худой конец, так:
Добавлено @ 11:32 Или ваще так
Посмотри в хелпе, в конце концов |
Автор: Ozerman 6.7.2004, 16:15 |
УРА!!! Свершилось!!! Variant value; value = ExcelApp.OlePropertyGet("Range", "A1").OlePropertyGet("Cells", 1, 1).OlePropertyGet("Value");//считывает значение из ячейки [1, 1] (1-я строка, 1-ый столбец) value = ExcelApp.OlePropertyGet("Range", "A2").OlePropertyGet("Cells", 1, 1).OlePropertyGet("Value");//считывает значение из ячейки [2, 1] value = ExcelApp.OlePropertyGet("Range", "A1").OlePropertyGet("Cells", 1, 2).OlePropertyGet("Value");//считывает значение из ячейки [1, 2] Спасибо за подсказку!!! |