vc com接口html,VC利用COM接口操作Word总结

void CWordDlg::OnBnClickedButtonCreate()

{

// TODO: Add your control notification handler

code here

//初始化COM库

AfxOleInit();

//定义变量

COleVariant varstrNull("");

COleVariant varTrue(short(1),VT_BOOL);

COleVariant varFalse(short(0),VT_BOOL);

COleVariant vTure(SHORT(TRUE)),

vFalse(SHORT(FALSE));

COleVariant vE(_T(""));

COleVariant v0(SHORT(0)), v1(SHORT(1)),

v2(SHORT(2)), v5(SHORT(5)), v6(SHORT(6)), v12(SHORT(12)),

v22(SHORT(22));

CString strPath =

"..\\Perforation.tdt";

//根据模版创建Word文档

ExportMessage(1);

CApplication app;

app.CreateDispatch("Word.Application");

app.put_Visible(TRUE);

//word文档

CDocuments docs = app.get_Documents();

docs.AttachDispatch(app.get_Documents()); //将Documents类对象m_Docs和Idispatch接口关联起来;

//打开文档

docs.Open2000(COleVariant(strPath),varFalse,varFalse,varFalse,

varstrNull,varstrNull,varFalse,varstrNull,

varstrNull,varTrue,varTrue,varTrue);

ExportMessage(2);

CDocument0 doc0 = app.get_ActiveDocument();

CSelection select = app.get_Selection();

//写入文本

select.TypeText("The First Table!");

//选择表格

CTables0 tabs = doc0.get_Tables();

CTable0 tab1 = tabs.Item(1);

CTable0 tab2 = tabs.Item(2);

CCell0 cell =

tab1.Cell(1,2);

cell.Select();

select.TypeText("12");

cell = tab1.Cell(1,6);

cell.Select();

select.TypeText("16");

cell = tab1.Cell(4,2);

cell.Select();

select.TypeText("42");

//获得当前页信息

COleVariant

vAllPag(select.get_Information(4));

int nAllPag = vAllPag.intVal;

int nCurPag = nAllPag;

CString strData;

int i,j;

i=1;

while(nAllPag >= nCurPag)

{

for(j=1;j<=13;j++)

{

cell =

tab2.Cell(i,j);

cell.Select();

strData.Format("%d",i);

select.TypeText(strData); //输入数据

select.MoveRight(v1,v1,v0); //右移

}

select.Collapse(v1); //换行

COleVariant

vAllPagNew(select.get_Information(4));

nCurPag =

vAllPagNew.intVal;

i++;

}

//查找END字符,删除行

COleVariant vEnd(_T("END")),vT(SHORT(TRUE)),

vF(SHORT(FALSE));

CDocument0

Fnd(select.get_Find()); //Fnd和select相关联

Fnd.Exe(vEnd, vF, vF, vF,

vF, vF, vT, v1, vF, COleVariant(""), vT, vF, vF, vF, vF);

select.MoveRight(v1,v1,v0);

select.TypeBackspace();

select.TypeBackspace();

//释放对象

cell.ReleaseDispatch();

tab1.ReleaseDispatch();

tab2.ReleaseDispatch();

tabs.ReleaseDispatch();

//保存word

ExportMessage(3);

CFile file;

CString strSaveFile;

BOOL bUse = TRUE;

while(bUse)

{

CFileDialog

fileDialog(FALSE);

fileDialog.m_ofn.lpstrTitle =

"保存Word文档";

fileDialog.m_ofn.lpstrFilter =

"Word Document(*.doc)\0*.doc\0All Files(*.*)\0*.*\0\0";

fileDialog.m_ofn.lpstrDefExt =

".doc";

if(IDOK ==

fileDialog.DoModal())

{

strSaveFile =

fileDialog.GetPathName();

if(file.Open(strSaveFile,

CFile::modeWrite | CFile::modeCreate))

{

file.Close();

bUse

= FALSE;

doc0.SaveAs(COleVariant(strSaveFile),

v0, vF, vE, vF, vE, vF, vF, vF, vF, vF, vF, vF, vF, vF, vF);

}

else

{

bUse

= TRUE;

AfxMessageBox("文件正在编辑,无法进行存储!");

}

}

else

{

bUse =

FALSE;

AfxMessageBox("取消存储!如要使用数据,请再次输出!");

}

}

//打印

ExportMessage(4);

if(IsPrint())

{

ExportMessage(5);

ShellExecute(NULL,"print",strSaveFile,"","",SW_HIDE);

}

select.ReleaseDispatch();

doc0.ReleaseDispatch();

docs.ReleaseDispatch();

app.Quit(vFalse, vFalse, vFalse);

app.ReleaseDispatch();

ExportMessage(0);

}

void CWordDlg::ExportMessage(int nType)

{

CString strMessage;

switch(nType)

{

case 0:

strMessage = "就绪";

break;

case 1:

strMessage =

"创建Word文档...";

break;

case 2:

strMessage =

"写入数据...";

break;

case 3:

strMessage =

"保存Word文档...";

break;

case 4:

strMessage =

"正在检查当前打印机是否可用 ...";

break;

case 5:

strMessage =

"打印Word文档...";

break;

default:

break;

}

GetDlgItem(IDC_MESSAGE)->SetWindowText(strMessage);

}

BOOL CWordDlg::IsPrint()

{

CApplication App;

COleVariant vF(SHORT(FALSE));

if(!App.CreateDispatch("Word.Application"))

{

AfxMessageBox("当前打印机安装有问题,无法打印!");

return FALSE;

}

CString strPrt(App.get_ActivePrinter());

strPrt =

strPrt.Left(strPrt.ReverseFind('on')-1);

strPrt.TrimRight();

App.Quit( vF, vF, vF);

HANDLE hPrt;

if(!OpenPrinter(strPrt.GetBuffer(), &hPrt,

NULL))

{

AfxMessageBox("当前打印机安装有问题,无法打印!");

return FALSE;

}

return ClosePrinter(hPrt);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值