Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

C++: COM, OLE, ActiveX

Войти
Регистрация
Восстановить пароль
 
Kitarius
0 / 0 / 0
Регистрация: 26.02.2016
Сообщений: 6
#1

Программа всегда открывает один и тот же файл excel - C++ COM

23.05.2016, 10:26. Просмотров 493. Ответов 11
Метки нет (Все метки)

Всем здрасти.

Помогите разобраться. Пытаюсь работать с Excel через OLE. Могу считывать данные с вкладок, ячеек, редактировать данные и т.д. Но почему-то всегда программа открывает файл экселя, который был открыт в самый первый раз - например, со старта я работаю с файлом test1.xlsx, провожу с ним необходимые манипуляции, после чего закрываю программу. Затем я хочу открыть файл test2.xslx, но вновь открытая программа все равно производит выборку из файла test1.xlsx. Вот пример кода. Где я косячу?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    if (OpenDialog1->Execute())
    {
        StatusBar1->Panels->Items[1]->Text= OpenDialog1->FileName;
        Excel=CreateOleObject("EXCEL.Application");
        Book=Excel.OlePropertyGet("Workbooks").OlePropertyGet("Open", OpenDialog1->FileName.c_str()); 
 
        Sheet1=Book.OlePropertyGet("Worksheets", 1);
 
        Columns_Sheet1=Sheet1.OlePropertyGet("UsedRange").OlePropertyGet("Columns").OlePropertyGet("Count");
        Rows_Sheet1=Sheet1.OlePropertyGet("UsedRange").OlePropertyGet("Rows").OlePropertyGet("Count");
            
    //далее чтение из файла в стринггрид, после чего файл мне не нужен. 
        
 
    Excel.OleProcedure("Quit");
    ShowMessage("Done");
    }
P.S. Версия экселя 2013, Билдер XE8
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2016, 10:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программа всегда открывает один и тот же файл excel (C++ COM):

Чтение и запись в один и тот же файл с CreateFile - C++
Добрый день. необходимо, чтобы можно было открыть файл, произвести из него чтение, и в процессе считывания при необходимости вносить...

Как не писать один и тот же код, для функции, принимающей разные типы данных в качестве аргумента - C++
Проблема такая: есть некая функция. Внутри нее происходят одни и теже вычисления, вне зависимости от типа входных данных. void...

Закрыть и затем открыть один и тот же файл - VBA
Доброго времени суток помогите пожалуйста в решении задачки следующего плана. Есть файл excel В нем создана кнопка Нужно чтобы при...

Один и тот же файл иконки - разный результат - Windows 8, 8.1
Вообще непонятная система. Изначально хотел задать этот вопрос в разделе программирования, но понял, что это и без программирования...

UTorrent дважды скачивает один и тот же файл - Софт
Добрый день, подскажите стоит utorrent 3.4.2. поставил закачивать 5 файлов они закачались и встали на раздачу всё нормально, весь день...

FileStream или чтение и запись в один и тот же файл - C#
Из темы уже можно было понять суть проблемы - есть файл и например из центра вырезается кусок путем накладывания на него данных что стояли...

11
vxg
Модератор
3172 / 1975 / 222
Регистрация: 13.01.2012
Сообщений: 7,607
23.05.2016, 14:14 #2
Kitarius, чудес не бывает вы открываете то что указано в OpenDialog1->FileName
0
Kitarius
0 / 0 / 0
Регистрация: 26.02.2016
Сообщений: 6
23.05.2016, 14:41  [ТС] #3
Спасибо за ответ. Но я понимаю, что я открываю именно то, что указано в OpenDialog1->FileName. Вот сейчас специально вывел это значение с помощью ShowMessage. Помимо того, что оно выводится в StatusBar. полное имя файла меняется, но в гриде все равно первый открытый екселевский файл, а не тот, который я пытаюсь открыть
0
vxg
Модератор
3172 / 1975 / 222
Регистрация: 13.01.2012
Сообщений: 7,607
23.05.2016, 14:46 #4
Цитата Сообщение от Kitarius Посмотреть сообщение
а не тот, который я пытаюсь открыть
сравните свой код с вот этим
C++
1
2
3
4
5
6
7
8
9
    Variant app = CreateOleObject("Excel.Application");
    Variant wbs = app.OlePropertyGet("Workbooks");
    Variant wb = wbs.OleFunction("Open", "C:\\test.xls");
    Variant wss = wb.OlePropertyGet("Worksheets");
    Variant ws = wss.OlePropertyGet("Item", 1);
    Variant cell = ws.OlePropertyGet("Cells", 1, 1);
    cell.OlePropertySet("Value", 456);
    wb.OleProcedure("Save");
    app.OleProcedure("Quit");
я вижу что у вас open это почему то свойство, но это совсем не свойство, а функция может по этому, дальше не проверял
1
Kitarius
0 / 0 / 0
Регистрация: 26.02.2016
Сообщений: 6
24.05.2016, 08:59  [ТС] #5
vxg, спасибо за ответ. Откомпелировал Ваш код. Первый запуск - открываю файл C:\\test.xls - все замечательно. Закрываю программу. Изменяю в коде файл на "C:\\test1.xls, запускаю программу и у меня все равно открывается файл C:\\test.xls!! При чем программа работает так на нескольких машинах, с разными версиями ОС и Excel!! Единственное, что я не пробовал - это перекомпилировать на другой версии студии
0
vxg
Модератор
3172 / 1975 / 222
Регистрация: 13.01.2012
Сообщений: 7,607
24.05.2016, 09:09 #6
Kitarius, это невозможно, а компилируется ли вообще у вас программа?
1
Kitarius
0 / 0 / 0
Регистрация: 26.02.2016
Сообщений: 6
24.05.2016, 09:15  [ТС] #7
vxg, экзешник при компиляции меняется. Сейчас попробую переставить билдер. Если не поможет, займусь операционкой.
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
23838 / 15830 / 4777
Регистрация: 22.10.2011
Сообщений: 27,999
Записей в блоге: 5
24.05.2016, 09:16 #8
Операционка-то при чем, если откомпилированное приложение работает одинаково неправильно
Цитата Сообщение от Kitarius Посмотреть сообщение
на нескольких машинах, с разными версиями ОС и Excel
?
0
Kitarius
0 / 0 / 0
Регистрация: 26.02.2016
Сообщений: 6
24.05.2016, 09:21  [ТС] #9
Цитата Сообщение от volvo Посмотреть сообщение
Операционка-то при чем, если откомпилированное приложение работает одинаково неправильно
Протупил. Но я уже просто вообще не понимаю, что это может быть.
0
vxg
Модератор
3172 / 1975 / 222
Регистрация: 13.01.2012
Сообщений: 7,607
24.05.2016, 09:45 #10
Kitarius, хоть я и понимаю что занимаюсь ерундой но специально для вас дабы снизить количество кругов нарезаемых вами вокруг трех сосен прямо сейчас проверил тот код что я вам дал - все работает так как должно работать - если test - значит пишет в test, если test1 - в test1. возможно у вас что то со средой или правами доступа из за которых изменения вносимые в исходник не вносятся в приложение или хз что
1
Kitarius
0 / 0 / 0
Регистрация: 26.02.2016
Сообщений: 6
24.05.2016, 09:48  [ТС] #11
vxg, огромное Вам спасибо, что Вы тратите на меня свое время
0
Unknownx
Заблокирован
29.05.2016, 18:40 #12
Kitarius, думаю в ODBC драйвере у тебя тот файл прописан вот и не помогает изменение, покажи свойства своих источников данных Excel
0
29.05.2016, 18:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2016, 18:40
Привет! Вот еще темы с ответами:

Как размножить один и тот же файл, чтобы заполнить жесткий диск - C#
Появилась задачка заполнить пару террабайт файлами, но нет желания вручную все это копипастить, может подскажет кто, как это осуществить в...

ShellExecute. Программа открывает один видеофайл, но оставшиеся 2 - нет - C++
Здравствуйте, уважаемые программисты! Не могли бы вы мне помочь? Прорамма почему-то запускает только один из трёх видеофайлов, третий. НО...

Excel не открывает файл - MS Excel
Доброго времени суток!!! Тема старая не решена по всей видимости. У меня таже проблема с файликом. Все было замечательно, рабочий день...

В заданном каталоге определить, какие имена файлов являются жесткими ссылками на один и тот же файл - Bash
В заданном каталоге определить, какие имена файлов являются жесткими ссылками на один и тот же файл. Команда ls с опцией -l выдает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru