Нужно в программе получить данные из файла Excel.
Использую чуть модифицированный пример
http://www.qtcentre.org/threads/33584-Excel-and-Qt?p=155530#post155530 #include <qaxobject>
#include <qaxwidget>
#include <qapplication>
#include <QDebug>
int main(int argc, char *argv[])
{
QString strVal;
const char* cp = "Range(B25)";
QApplication a(argc, argv);
QAxWidget excel("Excel.Application");
// because I want to read the file - not display it.
excel.setProperty("Visible", false);
QAxObject *workbooks = excel.querySubObject("WorkBooks");
workbooks->dynamicCall("Open (const QString&)", QApplication::applicationDirPath()+"/ttt.xls");
QAxObject *workbook = excel.querySubObject("ActiveWorkBook");
// I need data from the 2nd worksheet (worksheets are numbered starting from 1)
QAxObject *worksheet = workbook->querySubObject("Worksheets(int)", 1);
// Read fom the second worksheet the contents of cell E11
QAxObject *range = worksheet->querySubObject(cp);
QVariant v = range->property("Value");
QString s = v.toString() ;
qDebug() << "main() | s1 is" << s << s.isEmpty() << v.isNull() << v.isValid() << v.typeName() << v.canConvert<QString>();
QAxObject* cell = worksheet->querySubObject("Cells(QVariant,QVariant)", 12, 1);
QVariant vv = cell->property("Value");
QString ss = vv.toString() ;
qDebug() << "main() | s2 is" << ss << ss.isEmpty() << vv.isNull() << vv.isValid() << vv.typeName() << vv.canConvert<QString>();
// close the excel file
excel.dynamicCall("Quit (void)");
return(0);
}
Проблема в том, что я получаю пустую строку:
main() | s1 is "" true false true QVariant false
main() | s2 is "" true false true QVariant false
Хотя в файле в этом месте точно есть какая-то информация.
Еще пытался делать как в здесь
http://wiki.crossplatform.ru/index.php/%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B5_%D1%81_MS_Office_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_ActiveQt написано, результат вроде почти такой же
Если установить excel.setProperty("Visible", true); , на пару секунд будет показываться окно Excel с моим файлом (т.е. открывается он вроде бы правильно)
Qt 4.7.0
Что делать, куда бежать?