Why export excel in windows10 normal, in windows7 export will crash?
-
@duncan98
you mean this part ?
QString file_path=QFileDialog::getSaveFileName(nullptr,"save file",file_name,"(.xlsx);;(.xls);;(*.csv)"); -
@mrjj
In debugging, I found the same code that workbooks created in windows10 but not in windows7
-
@duncan98
SinceQAxObject
is only a thin layer over accessing ActiveX objects, I would look in the Excel VBA model for differences rather than in Qt. Did you try your code from within Excel macros/VBA to see how it works quite outside Qt? -
The application output shows:
QAxBase::setControl: requested control Excel.Application could not be instantiated
QAxBase::dynamicCallHelper: Object is not initialized, or initialization failed@duncan98 said in Why export excel in windows10 normal, in windows7 export will crash?:
QAxBase::setControl: requested control Excel.Application could not be instantiated
This is the error message which matters. It indicates
Excel.Application
could not be instantiated.You can Google for
QAxBase::setControl: requested control Excel.Application could not be instantiated
to see others reporting similar. One suggestion is:The control requested in QAxBase::setControl() is not installed on this system, or is not accessible for the current user.
The control might require administrator rights, or a license key. If the control is licensed, pass the license key to QAxBase::setControl as documented.
Your issue seems to be reported in https://stackoverflow.com/questions/67901747/qaxwidget-is-in-use-and-an-error-occurs-when-reading-excel-in-qt-creator, I don't know whether you are the author of that question.
One small thought is: how do you create/what kind of Qt application?
You might try finding and passing the desired GUID/CLSID in place of
Excel.Application
, just in case.I believe PowerShell allows you to do Automation? I would try that, or something similar, to verify you can connect successfully from a non-Qt application on the failing machine.
-
@duncan98 said in Why export excel in windows10 normal, in windows7 export will crash?:
QAxBase::setControl: requested control Excel.Application could not be instantiated
This is the error message which matters. It indicates
Excel.Application
could not be instantiated.You can Google for
QAxBase::setControl: requested control Excel.Application could not be instantiated
to see others reporting similar. One suggestion is:The control requested in QAxBase::setControl() is not installed on this system, or is not accessible for the current user.
The control might require administrator rights, or a license key. If the control is licensed, pass the license key to QAxBase::setControl as documented.
Your issue seems to be reported in https://stackoverflow.com/questions/67901747/qaxwidget-is-in-use-and-an-error-occurs-when-reading-excel-in-qt-creator, I don't know whether you are the author of that question.
One small thought is: how do you create/what kind of Qt application?
You might try finding and passing the desired GUID/CLSID in place of
Excel.Application
, just in case.I believe PowerShell allows you to do Automation? I would try that, or something similar, to verify you can connect successfully from a non-Qt application on the failing machine.
-
@JonB
The problem has been found. However, it cannot be initialized without software installed, which is more limited -
@mrjj
Yes, this problem is very strange. You must install Microsoft Excel, but you can't install other Excel software -
@duncan98
Well its clear it needs Excel.
But what do you mean by
"l, but you can't install other Excel software"You mean rest of the office or what other software ?
-
@mrjj
I mean you can't initialize it with any other Excel processor installed.
Can you take a look at this for me? Thank you
https://forum.qt.io/topic/128391 -
@duncan98
So you mean with another version of Excel installed, the same code no longer works? -
@mrjj
Yes, this problem is very strange. You must install Microsoft Excel, but you can't install other Excel software@duncan98 said in Why export excel in windows10 normal, in windows7 export will crash?:
Yes, this problem is very strange. You must install Microsoft Excel
To use ActiveX of course you have to have the target application installed! It would help if you had mentioned this, the problem has nothing to do with Windows 7 vs Windows 10 and would have shown up if you had tried communicating with it from any other non-Qt application, as I suggested you do.
-
@duncan98 said in Why export excel in windows10 normal, in windows7 export will crash?:
Yes, this problem is very strange. You must install Microsoft Excel
To use ActiveX of course you have to have the target application installed! It would help if you had mentioned this, the problem has nothing to do with Windows 7 vs Windows 10 and would have shown up if you had tried communicating with it from any other non-Qt application, as I suggested you do.
-
@JonB
Can this Excel component be referenced independently? I want to package it into the installer -
@JonB
Can this Excel component be referenced independently? I want to package it into the installer@duncan98 said in Why export excel in windows10 normal, in windows7 export will crash?:
Can this Excel component be referenced independently? I want to package it into the installer
The "Excel component" is called Microsoft Excel. I am sure that Microsoft will allow you to bundle a copy of Microsoft Excel inside your application if you send them enough legal paperwork and money ;)
There are other ways to generate a file that Microsoft Excel, or another spreadsheet program, can open. These range from writing simple CSV files to OpenDocument or Office Open format XML. There are also some third-party libraries that can generate these formats (or subsets) or the older XLS. What will work for you depends on the end goal.
-
@mrjj
In debugging, I found the same code that workbooks created in windows10 but not in windows7
@duncan98
At the frist make sure that your office excel is activated then use
CoInitialize(nullptr);
befire taking export.
this function can find in #include <objbase.h>