qt操作Excel com方式

来源:互联网 发布:java求圆的面积和周长 编辑:程序博客网 时间:2024/04/29 10:53
//--------------------------------------------------------------------------------------------------void OExcelWnd::openExcel(){excel = new QAxObject("Excel.Application");excel->setProperty("UserControl", false);excel->setProperty("Visible", true);workbooks = excel->querySubObject("WorkBooks");workbook = workbooks->querySubObject("Open(QString, QVariant)", curFile);worksheets = workbook->querySubObject("WorkSheets");int sheetCount = worksheets->property("Count").toInt();worksheet = workbook->querySubObject("WorkSheets(int)", 1);//sheet选择框事件:Todo:不改变不触发connect(worksheet,SIGNAL(SelectionChange(IDispatch*)),this,SLOT(OnExcelSheetRangedClicked(IDispatch*)));}//--------------------------------------------------------------------------------------------------void OExcelWnd::OnExcelSheetRangedClicked(IDispatch* selectedRange){QAxObject *userSelectedRange = new QAxObject((IUnknown*)selectedRange);QAxObject * rows = userSelectedRange->querySubObject("Rows");QAxObject * columns = userSelectedRange->querySubObject("Columns");int intRowCount = rows->property("Count").toInt();int intColCount = columns->property("Count").toInt();if(intRowCount == 1 && intColCount == 1){int intRow = userSelectedRange->property("Row").toInt();int intCol = userSelectedRange->property("Column").toInt();QAxObject * cellRange = worksheet->querySubObject("Cells(int,int)",intRow,intCol);  QString cellValue = cellRange->dynamicCall("Value2()").toString(); qDebug()<<cellValue;}}//--------------------------------------------------------------------------------------------------void OExcelWnd::readExcel1(){excel = new QAxObject("Excel.Application");    excel->setProperty("Visible", false);workbooks = excel->querySubObject("WorkBooks");workbook = workbooks->querySubObject("Open(QString, QVariant)", curFile);worksheets = workbook->querySubObject("WorkSheets");int sheetCount = worksheets->property("Count").toInt();tabWidget->clear();for (int i = 1 ; i <= sheetCount; i++) {QAxObject *worksheet = workbook->querySubObject("WorkSheets(int)", i);QString sheetName = worksheet->property("Name").toString();QAxObject * usedrange = worksheet->querySubObject("UsedRange");QAxObject * rows = usedrange->querySubObject("Rows");QAxObject * columns = usedrange->querySubObject("Columns");int intRows = rows->property("Count").toInt();int intCols = columns->property("Count").toInt();int intRowStart = usedrange->property("Row").toInt();int intColStart = usedrange->property("Column").toInt();QTableWidget *onetable = new QTableWidget(intRows,intCols,this);connect(onetable, SIGNAL(itemClicked(QTableWidgetItem*)),this, SLOT(OnTableWidgetItemClicked(QTableWidgetItem*)));onetable->setObjectName(sheetName);tabWidget->addTab(onetable, sheetName);for (int i = intRowStart; i < intRowStart + intRows; i++)  {for (int j = intColStart; j < intColStart + intCols; j++)  {QAxObject * range = worksheet->querySubObject("Cells(int,int)", i, j );  QString itemValue = range->dynamicCall("Value2()").toString(); QTableWidgetItem *newItem = new QTableWidgetItem(itemValue);onetable->setItem(i,j,newItem);}// end for}//end for}}



////Test: shape嵌入在表中的图片和表,//QAxObject *shapes;//shapes = worksheet->querySubObject("Shapes");//int shapecount = shapes->property("Count").toInt();//qDebug()<<shapecount;//QAxObject *shape;//shape = worksheet->querySubObject("Shapes(int)",1);//QString shapename = shapes->property("Name").toString();//qDebug()<<shapename;//shape->querySubObject("IncrementLeft(int)",100);


原创粉丝点击