您的位置:首页 > 编程语言 > Qt开发

QT加载office文件简单方法

2016-02-24 16:51 579 查看

记录下:

QT 使用COM组件加载office的文件,使用需要安装MS office。WORD,EXCEL文件可以直接嵌入;PPT文件无法直接嵌入。能嵌入的同志望回复告知。下面描述了 加载;*.doc;*.docx;*.docm;*.xls;*.xlsx;*.xlsm;*.xlsb,*.ppt;*.pptx;*.pptm;*.txt;*.xml;这几种文件。源代码如下:

一:组件皮肤文件 utofficewidget.ui



<?xml version="1.0" encoding="UTF-8"?>

<ui version="4.0">

<class>UTOfficeWidget</class>

<widget class="QWidget" name="UTOfficeWidget">

<property name="geometry">

<rect>

<x>0</x>

<y>0</y>

<width>400</width>

<height>300</height>

</rect>

</property>

<property name="windowTitle">

<string>UTOfficeWidget</string>

</property>

<layout class="QVBoxLayout" name="verticalLayout">

<item>

<widget class="QTextEdit" name="textEdit"/>

</item>

</layout>

</widget>

<layoutdefault spacing="6" margin="11"/>

<resources/>

<connections/>

</ui>

二:头文件 utofficewidget.h

#ifndef UTOFFICEWIDGET_H

#define UTOFFICEWIDGET_H

#include <QWidget>

#include<QAxObject>

#include<QAxWidget>

#include <QTextStream>

#include<QFile>

#include "ui_utofficewidget.h"

class UTOfficeWidget : public QWidget

{

Q_OBJECT

public:

UTOfficeWidget(QWidget *parent = 0);

~UTOfficeWidget();

public:

//打开文件 ;*.doc;*.docx;*.docm;*.xls;*.xlsx;*.xlsm;*.xlsb,*.ppt;*.pptx;*.pptm;*.txt;*.xml;

void Open(QString filePath);

//关闭 是否需要保存 默认不保存

void Close(bool isSave=false);

//保存

void Save();

//另存为。。

void SaveAs(QString newFilePath);

private:

//文档打开控件

QAxWidget* officeContent;

//当前打开文件的路径

QString currentFilePath;

Ui::UTOfficeWidget ui;

};

#endif // UTOFFICEWIDGET_H

三:CPP文件:

#include "utofficewidget.h"

UTOfficeWidget::UTOfficeWidget(QWidget *parent)

: QWidget(parent)

,officeContent(NULL)

{

ui.setupUi(this);

}

UTOfficeWidget::~UTOfficeWidget()

{

Close();

}

void UTOfficeWidget::Open( QString filePath )

{

if (filePath.isEmpty())

{

return;

}

if (officeContent)

{

Close();

}

if (filePath.endsWith(".docx") ||filePath.endsWith(".doc") || filePath.endsWith(".doc"))

{

officeContent=new QAxWidget ("Word.Document", ui.textEdit);

officeContent-> setGeometry (QRect (10, 10, this->width()-10, this->height()-10));

officeContent->setControl (filePath);

officeContent-> show ();

}

else if (filePath.endsWith(".xlsx") || filePath.endsWith(".xls") ||filePath.endsWith(".xlsm"))

{

officeContent=new QAxWidget ("Excel.WorkBook", ui.textEdit);

officeContent-> setGeometry (QRect (10, 10, this->width()-10, this->height()-10));

officeContent->setControl (filePath);

officeContent-> show ();

}

else if (filePath.endsWith(".ppt") || filePath.endsWith(".pptx") ||filePath.endsWith(".pptm"))

{

//"Powerpoint.Presentation"

officeContent=new QAxWidget ("Powerpoint.Application",ui.textEdit);

//pptPresentation->setControl("{048EB43E-2059-422F-95E0-557DA96038AF}");

//pptPresentation->setControl("{91493441-5A91-11CF-8700-00AA0060263B}");

officeContent-> setGeometry (QRect (10, 10, this->width()-10, this->height()-10));

QAxObject *presentations = officeContent->querySubObject( "Presentations" );

presentations->dynamicCall("Open(QString)",filePath);

}

else if (filePath.endsWith(".txt") || filePath.endsWith(".xml"))

{

QFile sfile(filePath);

if (sfile.open(QFile::ReadOnly | QFile::Text))

{

QTextStream in(&sfile);

ui.textEdit->setText(in.readAll());

sfile.close();

}

}

else

{

return;

}

currentFilePath=filePath;

}

void UTOfficeWidget::Close( bool isSave/*=false*/ )

{

if (officeContent)

{

if (currentFilePath.endsWith(".ppt") || currentFilePath.endsWith(".pptx") ||currentFilePath.endsWith(".pptm"))

{

officeContent->dynamicCall("Quit(void)");

}

else if (currentFilePath.endsWith(".txt") || currentFilePath.endsWith(".xml"))

{

ui.textEdit->clear();

}

else

{

officeContent->dynamicCall("Close(bool)",true);

}

}

}

void UTOfficeWidget::Save()

{

}

void UTOfficeWidget::SaveAs( QString newFilePath )

{

}

四:调用测试:

UTOfficeWidget *officeConent=new UTOfficeWidget(this);



officeConent->setFixedSize(this->width(),this->height());

officeConent->Open(QString("D:/123.docx"));

ui.horizontalLayout->addWidget(officeConent);











内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: