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);
}