#include "qword.h"
#include <QDateTime>
#include <QFileDialog>
#include <QFile>
#include <QTextStream>
#include <ActiveQt/QAxObject>
#include <ActiveQt/QAxWidget>
#include<QTextStream>
#include <ActiveQt/QAxBase>
#include <QTextFormat>
QWord::QWord(QObject *parent)
{
CoInitializeEx(NULL,COINIT_MULTITHREADED);//解决非主线程无法调用word问题
m_word = new QAxObject(parent);
m_documents = NULL;
m_document = NULL;
m_bOpened=false;
}
QWord::~QWord()
{
close();
}
bool QWord::createWord(QString reportname) //创建一个新的word
{
QString ReportName= reportname;
QString defaultFileName = QString("%1").arg(ReportName);
m_saveName=QFileDialog::getSaveFileName(0,tr("Report Information"),defaultFileName,tr("*.doc"));
//CGlobalAppData *pAppData = CAppDataSingleton::instance();
QString SavePath = /*pAppData->m_strAppDirPath + */"/ReportWord"+m_saveName;
QFile file(m_saveName);
if(file.exists())
{
m_strError = tr("abnormal:the file already exists!");
//m_strError = QString::fromLocal8Bit("错误:目标文件已存在!");
return false;
}
if(!m_saveName.isEmpty())
{
if(!m_word->setControl("Word.Application"))
{
m_strError = tr("abnormal:failed to get the word component,please make sure the word is installed!");
//m_strError = QString::fromLocal8Bit("错误:获取word组件失败,请确定是否安装了word!");
return false;
}
m_word->setProperty("Visible",false);
m_word->setProperty("DisplayAlerts", false);//不显示任何警告信息。如果为true那么在关闭是会出现类似“文件已修改,是否保存”的提示
m_documents = m_word->querySubObject("Documents");
m_documents->dynamicCall("Add (void)");
m_document = m_word->querySubObject("ActiveDocument");//获取当前激活的文档
return true;
}else
{
m_strError = tr("abnormal:the file name is empty!");
//m_strError = QString::fromLocal8Bit("错误:文件名为空");
return false;
}
}
bool QWord::createNewWord(const QString& filePath )
{
m_saveName = filePath;
QFile file(m_saveName);
if(file.exists())
{
file.remove(m_saveName);
//m_strError = tr("error:the file already exists!");
//m_strError = QString::fromLocal8Bit("错误:目标文件已存在!");
//return false;
}
if(!m_saveName.isEmpty())
{
if(!m_word->setControl("Word.Application"))
{
m_strError = tr("abnormal:failed to get the word component,please make sure the word is installed!");
//m_strError = QString::fromLocal8Bit("错误:获取word组件失败,请确定是否安装了word!\n");
return false;
}
m_word->setProperty("Visible",false);
m_word->setProperty("DisplayAlerts", false);//不显示任何警告信息。如果为true那么在关闭是会出现类似“文件已修改,是否保存”的提示
m_documents = m_word->querySubObject("Documents");
if(!m_documents)
{
m_strError = tr("abnormal:failed to get the documents!");
//m_strError = QString::fromLocal8Bit("获取文档失败!\n");
return false;
}
m_documents->dynamicCall("Add (void)");
m_document = m_word->querySubObject("ActiveDocument");//获取当前激活的文档
return true;
}else
{
m_strError = tr("abnormal:the file name is empty!");
//m_strError = QString::fromLocal8Bit("错误:文件名为空");
return false;
}
}
bool QWord::openword(bool bVisable)
{
m_word = new QAxObject();
bool bFlag = m_word->setControl("word.Application");
if(!bFlag)
{
bFlag = m_word->setControl("kwps.Application");
}
if(!bFlag)
{
return false;
}
m_word->setProperty("Visible",bVisable);
QAxObject* documents =m_word->querySubObject("Documents");
if(!documents)
{
return false;
}
documents->dynamicCall("Add(QString)",m_strFilePath);
m_bOpened = true;
return m_bOpened;
}
bool QWord::open(const QString& strFilePath,bool bVisable)
{
m_strFilePath = strFilePath;
//close();
return openword(bVisable);
}
bool QWord::isOpen()
{
return m_bOpened;
}
void QWord::save()
{
if(m_document)
m_document->dynamicCall("Save()");
else
return;
}
void QWord::close() //关闭 退出 析构时候也会自动调用一次
{
if(!m_saveName.isEmpty()) //如果不为空 则为新建
{
saveAs();
m_saveName = "";
}
//if(m_document)
// m_document->dynamicCall("Close (boolean)",false);
//if(m_word)
// m_word->dynamicCall("Quit (void)");
if(m_documents)
delete m_documents;
if(m_word)
delete m_word;
m_document = NULL;
m_documents = NULL;
m_word = NULL;
}
void QWord::saveAs()
{
if(m_document)
m_document->dynamicCall("SaveAs(const QString&)",QDir::toNativeSeparators(m_saveName));
else
return;
}
void QWord::setPageOrientation(int flag) //设置页面1 横向 还是 0竖向
{
QAxObject* selection = m_word->querySubObject("Selection");
if(nullptr== selection)
{
return;
}
QString page;
switch (flag)
{
case 0:
page = "wdOrientPortrait";
break;
case 1:
page = "wdOrientLandscape";
break;
}
selection->querySubObject("PageSetUp")->setProperty("Orientation",page);
}
void QWord::setWordPageView(int flag)
{
QAxObject* viewPage = m_word->querySubObject("ActiveWindow");
if(nullptr== viewPage)
{
return;
}
QString view;
switch (flag)
{
case 1:
view = "wdNormalView";
break;
case 2:
view = "wdOutlineView";
break;
case 3:
view = "wdPrintView";
break;
case 4:
view = "wdPrintPreview";
break;
case 5:
view = "wdMasterView";
break;
case 6:
view = "wdWebView";
break;
case 7:
view = "wdReadingView";
break;
case 8:
view = "wdConflictView";
break;
}
viewPage->querySubObject("View")->setProperty("Type",view);
}
void QWord::insertMoveDown() //插入回车
{
QAxObject* selection = m_word->querySubObject("Selection");
if(nullptr== selection)
{
return;
}
selection->dynamicCall("TypeParagraph(void)");
}
void QWord::insertText(const QString& text)
{
QAxObject* selection = m_word->querySubObject("Selection");
if(nullptr== selection)
{
return;
}
selection->dynamicCall("TypeText(const QString&)",text);
}
QString QWord::GetText()
{
QAxObject* selection = m_word->querySubObject("Selection");
QString str;
if(nullptr!= selection)
{
str = selection->dynamicCall("GetText(void)").toString();
}
return str;
}
//设置选中位置文字居中 0 ,居左 1,居右 2
void QWord::setParagraphAlignment(int flag)
{
QAxObject* selection = m_word->querySubObject("Selection");
if(nullptr== selection)
{
return;
}
if(flag == 0)
{
selection->querySubObject("ParagraphFormat")->setProperty("Alignment","wdAlignParagraphCenter");
}else if(flag == 1)
{
selection->querySubObject("ParagraphFormat")->setProperty("Alignment","wdAlignParagraphJustify");
}else if(flag == 2)
{
selection->querySubObject("ParagraphFormat")->setProperty("Alignment","wdAlignParagraphRight");
}
}
void QWord::setRowAlignment(int tableIndex,int row,int flag)
{
QAxObject* tables = m_document->querySubObject("Tables");
if(nullptr== tables)
{
return;
}
QAxObject* table = tables->querySubObject("Item(int)",tableIndex);
if(nullptr== table )
{
return;
}
QAxObject* Row= table->querySubObject("Rows(int)",row);
if(nullptr== Row)
{
return;
}
QAxObject* range = Row->querySubObject("Range");
if(nullptr== range)
{
return;
}
Row->querySubObject("Alignment(int)",flag);
if(flag == 0)
{
range->querySubObject("ParagraphFormat")->setProperty("Alignment","wdAlignParagraphCenter");
}else if(flag == 1)
{
range->querySubObject("ParagraphFormat")->setProperty("Alignment","wdAlignParagraphJustify");
}else if(flag == 2)
{
range->querySubObject("ParagraphFormat")->setProperty("Alignment","wdAlignParagraphRight");
}else if(flag ==3)
{
range->querySubObject("ParagraphFormat")->setProperty("Alignment","wdAlignParagraphLeft");
}
}
void QWord::setFontSize(int fontsize) //设置字体大小
{
QAxObject* selection = m_word->querySubObject("Selection");
if(null
- 1
- 2
- 3
前往页