Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / QT C++, приложение Excel остается открытым после закрытия / 11 сообщений из 11, страница 1 из 1
22.10.2019, 18:43
    #39880077
seg856
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
QT C++, приложение Excel остается открытым после закрытия
Что нужно еще сделать, чтобы приложение Excel закрылось?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
void f_rpt::bOk_click(){

    //QString lcValue1, lcValue2;
    int lnCheck1;
    QSqlQuery query(mdb.db);
    QString txtQuery;
    QDate d1, d2;
    int nRow, nCol;

    d1=this->ui.dDt1->date();
    d2=this->ui.dDt2->date();
    //int nTs;
/*
    lcValue1=this->ui.tValue1->text();
    lcValue2=this->ui.tValue2->text();
    //int i = b?1:0;
    lnCheck1=(this->ui.checkbox1->isChecked())?1:0;
*/
    if (this->theme==1)
    {
       QAxObject *mExcel = new QAxObject("Excel.Application",this);
       // на книги


       QAxObject *workbooks = mExcel->querySubObject("Workbooks");

       mExcel->dynamicCall( "SetVisible(bool)", TRUE );
       // на директорию, откуда грузить книг
       QAxObject *workbook = workbooks->querySubObject( "Open(const QString&)", "D:\\projects\\fox\\spidlab\\template\\spdCarrier.xlt" );

       QAxObject* sheets;
       QAxObject* sheet;
       QAxObject *cell;

       sheets = workbook->querySubObject("Worksheets");
       sheet = workbook->querySubObject("Worksheets(int)", 1);
       //cell = sheet->querySubObject("Cells(int,int)", 2, 2);


       //cell->setProperty("Value","88888");


        txtQuery="call spd_ReportCarrier('"+d1.toString("yyyy-MM-dd")+"','"+d2.toString("yyyy-MM-dd")+"')";

        qDebug() << txtQuery ;

        if (!query.exec(txtQuery)) {
            //qDebug() << "no";
            return;
        }

        nRow=5;

        while (query.next())
        {
            QString column1= query.value(0).toString();
            QString column2= query.value(1).toString();
            QString column3= query.value(2).toString();
            qint32 column4= query.value(3).toInt();
            QString column5= query.value(4).toString();
            QString column6= query.value(5).toString();
            QString column7= query.value(6).toString();
            QString column8= query.value(7).toString();
            QString column9= query.value(8).toString();
            qint32 column10= query.value(9).toInt();
            QDate column11= query.value(10).toDate();

            cell = sheet->querySubObject("Cells(int,int)", nRow, 1);
            cell->setProperty("Value",column1);

            cell = sheet->querySubObject("Cells(int,int)", nRow, 2);
            cell->setProperty("Value",column2);

            cell = sheet->querySubObject("Cells(int,int)", nRow, 3);
            cell->setProperty("Value",column3);

            cell = sheet->querySubObject("Cells(int,int)", nRow, 4);
            cell->setProperty("Value",column4);

            cell = sheet->querySubObject("Cells(int,int)", nRow, 5);
            cell->setProperty("Value",column5);

            cell = sheet->querySubObject("Cells(int,int)", nRow, 6);
            cell->setProperty("Value",column6);

            cell = sheet->querySubObject("Cells(int,int)", nRow, 7);
            cell->setProperty("Value",column7);

            cell = sheet->querySubObject("Cells(int,int)", nRow, 8);
            cell->setProperty("Value",column8);

            cell = sheet->querySubObject("Cells(int,int)", nRow, 9);
            cell->setProperty("Value",column9);

            cell = sheet->querySubObject("Cells(int,int)", nRow, 10);
            cell->setProperty("Value",column10);

            cell = sheet->querySubObject("Cells(int,int)", nRow, 11);
            cell->setProperty("Value",column11);


            //qDebug() << column1;
            nRow++;
        }
        mExcel->setProperty("DisplayAlerts","False");
        //workbook->dynamicCall("xl.DisplayAlerts = False");
        workbook->dynamicCall("SaveAs(const QString&)", "D:\\201019.xls");

        delete cell;
        cell=NULL;
        delete sheet;
        sheet=NULL;
        sheets->clear();
        delete sheets;
        sheets = NULL;
        workbook->clear();
        delete workbook;
        workbook = NULL;
        workbooks->dynamicCall( "Close" );
        workbooks->clear();
        delete workbooks;
        workbooks = NULL;
        mExcel->clear();
        mExcel->dynamicCall( "Quit" );
        delete mExcel;
        mExcel = NULL;

        

    }


}
...
Рейтинг: 0 / 0
22.10.2019, 19:23
    #39880093
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
QT C++, приложение Excel остается открытым после закрытия
...
Рейтинг: 0 / 0
22.10.2019, 19:55
    #39880104
seg856
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
QT C++, приложение Excel остается открытым после закрытия
ёёёёё, все эти строки есть в моем коде. Но результат видите на картинке.
...
Рейтинг: 0 / 0
22.10.2019, 20:10
    #39880106
d7i
d7i
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
QT C++, приложение Excel остается открытым после закрытия
seg856ёёёёё, все эти строки есть в моем коде. Но результат видите на картинке.

workbook->clear(); // удалить строку
delete workbook; // удалить строку
workbook = NULL; // удалить строку
workbooks->dynamicCall( "Close" );
workbooks->clear();
delete workbooks;
workbooks = NULL;
...
Рейтинг: 0 / 0
22.10.2019, 20:13
    #39880107
seg856
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
QT C++, приложение Excel остается открытым после закрытия
d7i, удалил указанные строки, результат тот же
...
Рейтинг: 0 / 0
23.10.2019, 07:32
    #39880213
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
QT C++, приложение Excel остается открытым после закрытия
seg856,
Удалите весь лишний код. Осьтавьте только по сути топика.
...
Рейтинг: 0 / 0
23.10.2019, 08:57
    #39880227
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
QT C++, приложение Excel остается открытым после закрытия
seg856,

да, сделай минимальное приложение, воспроизводящее "проблему".
...
Рейтинг: 0 / 0
23.10.2019, 09:05
    #39880231
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
QT C++, приложение Excel остается открытым после закрытия
Попробуй убрать
Код: plaintext
1.
 mExcel->dynamicCall( "SetVisible(bool)", TRUE );


ЕМНИП изначально эксель запускается без окон и при закрытии файла - процесс экселя завершается, но если сделать его видимым, то автоматом не закрывается, т.е. сам эксель надо еще как-то завершать.
...
Рейтинг: 0 / 0
23.10.2019, 13:39
    #39880440
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
QT C++, приложение Excel остается открытым после закрытия
Раньше техника работы с только что СОЗДАННЫМ файлом была примерно так:
Create() с tmp именем
тут же Save as() под другим именем
тут же Open()
.....
Close()

Но в Qt я не знаю, в билдере так работало. Иначе при якобы Close() выскакивало евойное сообщение, что типа объект был изменён, сохранить, нет?
Вроде даже в ВБА что-то подобное. В принципе в разделе "офис" можно поискать или спросить.
...
Рейтинг: 0 / 0
24.10.2019, 20:09
    #39881228
seg856
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
QT C++, приложение Excel остается открытым после закрытия
Dima T, спасибо. Действительно, скрытый Excel нормально закрывается.
...
Рейтинг: 0 / 0
26.10.2019, 20:10
    #39881938
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
QT C++, приложение Excel остается открытым после закрытия
И чтоб в это время пользователь не редактировал в эксе.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / QT C++, приложение Excel остается открытым после закрытия / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]