application = new Excel::Application( this );Q_ASSERT( application != 0 );if( !application ) return;application->SetSheetsInNewWorkbook( 1 );Excel::Workbook * workbook = application->Workbooks()->Add( Excel::xlWBATExcel4MacroSheet );IDispatch * tempWorksheet = workbook->Worksheets()->Add();Q_ASSERT( tempWorksheet != 0 );if( !tempWorksheet ) return;Excel::_Worksheet * worksheet = new Excel::_Worksheet( tempWorksheet, workbook );Q_ASSERT( worksheet != 0 );if( !worksheet ) return;worksheet->SetName( "data" );Excel::Range * range = worksheet->Range( "a1", "b2" );Q_ASSERT( range != 0 );if( !range ) return;
//Создаем объект Excel.ApplicationQAxObject * application_ = new QAxObject( "Excel.Application", this );//Выбрасываем исключение, если объект application_ невалидныйif( !application_ ) throw AxException( "Excel.Application" );//Устанавливаем количество листов на новой книге равным 1application_->dynamicCall( "SetSheetsInNewWorkbook(int)", QVariant( 1 ) );//После этого Excel перестает выбрасывать пердупрежденияapplication_->dynamicCall( "SetDisplayAlerts", QVariant( false ) );//Создаем объект Workbooks (коллекция книг)QAxObject * workbooks = application_->querySubObject( "Workbooks" );//Выбрасываем исключение, если объект workbooks невалидныйif( !workbooks ) throw AxException( "Application.Workbooks" );//Добавляем новую книгуQAxObject * workbook = workbooks->querySubObject( "Add()" );//Выбрасываем исключение, если объект workbook невалидныйif( !workbook ) throw AxException( "Workbooks.Add()" );//Получаем доступ к активному листуQAxObject * worksheet = workbook->querySubObject( "ActiveSheet" );//Выбрасываем исключение, если объект worksheet невалидныйif( !worksheet ) throw AxException( "Workbook.ActiveSheet" );//Устанавливаем имя листаworksheet->dynamicCall( "Name", "Data sheeet" );//Получаем объект Range из активного листа (ячейки A1:B10)QAxObject * range = worksheet->querySubObject( "Range(const QVariant&)", QVariant( "A1:B10" ) );//Выбрасываем исключение, если объект range невалидныйif( !range ) throw AxException( "Worksheet.Range(const QVariant&)" );//Устанавливаем в выбранные ячейки формулу вычисления случайного числаrange->dynamicCall( "SetValue(const QVariant&)", QVariant( QTextCodec::codecForLocale()->toUnicode( "=СЛЧИС()" ) ) );//Создаем объект Charts (коллекция областей диаграмм)QAxObject * charts = workbook->querySubObject( "Charts" );//Выбрасываем исключение, если объект charts невалидныйif( !charts ) throw AxException( "Workbook.Charts" );//Добавляем новую область диаграммQAxObject * chart = charts->querySubObject( "Add()" );//Выбрасываем исключение, если объект chart невалидныйif( !chart ) throw AxException( "Charts.Add()" );//Устанавливаем имя области диаграммchart->dynamicCall( "Name", "Test chart" );//Устанавливаем тип области диаграммchart->dynamicCall( "ChartType", QVariant( "xlXYScatter" ) );//Получаем доступ к текущему ряду области диаграммQAxObject * series = chart->querySubObject( "SeriesCollection(const QVariant&)", QVariant( 1 ) );//Выбрасываем исключение, если объект series невалидныйif( !series ) throw AxException( "SeriesCollection(const QVariant&)" );//Устанавливаем имя рядаseries->dynamicCall( "Name", "New series" );//Получаем объект Range для оси X в виде QVariantQVariant source = worksheet->dynamicCall( "Range(const QVariant&)", QVariant( "A1:A10" ) );//Устанавливаем диапазон значаний X для рядаseries->dynamicCall( "XValues", source );//Получаем объект Range для оси Y в виде QVariantsource = worksheet->dynamicCall( "Range(const QVariant&)", QVariant( "B1:B10" ) );//Устанавливаем диапазон значаний Y для рядаseries->dynamicCall( "Values", source );//Делаем приложение видимым application_->dynamicCall( "SetVisible(bool)", QVariant( true ) );
Excel::Application* app = new Excel::Application;app->SetVisible(true); app->SetSheetsInNewWorkbook( 1 );Excel::Workbooks* wbks = app->Workbooks(); wbks->Add();