请问在vc中如何通过程序在word文当中插入表格,以及在表格的特定位置中写入字符?

myazhe 2003-08-21 01:07:08
请问在vc中如何通过程序在word文当中插入表格,以及在表格的特定位置中写入字符
...全文
162 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
廿间楼主 2003-08-22
  • 打赏
  • 举报
回复
首先,用ClassWizard添加word vba类库,Add Class-->From a type library,从office安装目录“c:\program files\Microsoft office\office”中选择MSWORD9.OLB,然后选择所有类,完成后,ClassWizard会自动添加Msword9.h,Msword9.cpp两个文件。

然后,在程序文件中#include "msword9.h",在你的函数中添加如下代码:

COleVariant vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

_Application WordApp;

if (!WordApp.CreateDispatch("Word.Application",NULL))
{
AfxMessageBox("创建MS-WORD服务失败!");
exit(1);
} ;
WordApp.SetVisible(TRUE);
Documents oDocs;
oDocs = WordApp.GetDocuments();
_Document oDoc;
oDoc = oDocs.Add(vOpt, vOpt, vOpt, COleVariant((short)true));
oDoc.Activate();

Range oRange;
Selection oSelection;
oSelection = WordApp.GetSelection();
oRange = oSelection.GetRange();

Tables oTables;
Table oTable;
oTables = oDoc.GetTables();
oTable = oTables.Add(oRange, 2, 2, COleVariant((short)1), COleVariant((short)0));//第二、第三个参数:2,2,表示建立2×2表格

Cell oCell;
oCell = oTable.Cell(0, 0);//选择第一行,第一列所在的单元格
oRange = oCell.GetRange();
oRange.SetText("12345");
karlson0211 2003-08-21
  • 打赏
  • 举报
回复
楼上已经非常充分了,在补充一句,你要先建立一个WORD摸板
bootmark:在WORD中插入了书签的地方
Cell:表格单元格
gzshd 2003-08-21
  • 打赏
  • 举报
回复

void CReportDemoDlg::OnStartword()
{
Table table;
Tables tables;
if (!WordApp.CreateDispatch("Word.Application",NULL))
{
AfxMessageBox("创建MS-WORD服务失败!");
exit(1);
} ;

WordApp.SetVisible(true);
docs=WordApp.GetDocuments();
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
COleVariant start_line,end_line;
COleVariant Dot("c:\\test.dot");
//使用test.dot作为模板建立新文档
doc=docs.Add(&Dot,&covOptional);
//获得DOC文档的书签集
bootmarks=doc.GetBookmarks();
//第一到三列的的书签名分别是rol1、rol2、rol3
COleVariant tem1("rol1");
bootmark=bootmarks.Item(&tem1);
range=bootmark.GetRange();
//设置列标题
range.SetText("列标题1");
COleVariant tem2("rol2");
bootmark=bootmarks.Item(&tem2);
range=bootmark.GetRange();
range.SetText("列标题2");
COleVariant tem3("rol3");
bootmark=bootmarks.Item(&tem3);
range=bootmark.GetRange();
range.SetText("列标题3");
//设置报表报送时间
COleVariant tem4("time");
bootmark=bootmarks.Item(&tem4);
range=bootmark.GetRange();
range.SetText("2002年1月1日");
//设置单元格内容
tables=doc.GetTables();
table=tables.Item(1);
Cell cell;
for(int i=2;i<=9;i++)
{
for(int ii=1;ii<=3;ii++)
{
cell=table.Cell(i,ii);
range=cell.GetRange();
range.SetText("????");
}
}
}

//进行打印预
void CReportDemoDlg::OnPrintpreview()
{
//如果没有DOC文档打开
if(docs.m_lpDispatch==NULL)
{
AfxMessageBox("尚未输出报表到WORD,无法进行打印预览");
return;
}
else
{
if(!WordApp.GetPrintPreview())
//开始打开预览
WordApp.SetPrintPreview(1);
else
WordApp.SetPrintPreview(0);
}

}
//向打印机输出报表
void CReportDemoDlg::OnPrint()
{
if(docs.m_lpDispatch==NULL)
{
AfxMessageBox("无报表可供打印!");
return;
}
else
{
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
//直接向打印机输出报表
doc.PrintOut(covOptional,covOptional,covOptional,
covOptional,covOptional,covOptional,
covOptional,covOptional,covOptional,
covOptional,covOptional,covOptional,
covOptional,covOptional);
}
}


//保存报表文档
void CReportDemoDlg::OnSaveAs()
{
if(docs.m_lpDispatch==NULL)
{
AfxMessageBox("尚未输出报表到WORD,无法保存");
return;
}
else
{
OPENFILENAME ofn;
TCHAR lpstrFilename[MAX_PATH] = "";
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = m_hWnd;
ofn.lpstrFilter ="Microsoft Word文档(.doc)\0*.doc\0";
ofn.nMaxFile = MAX_PATH;
ofn.lpstrFile=lpstrFilename;
ofn.hInstance=AfxGetInstanceHandle();
ofn.Flags=OFN_EXPLORER;
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
//出现“另存为”对话框
if(GetSaveFileName( &ofn)==IDOK)
{
CString sFile =ofn.lpstrFile;
try
{
doc.SaveAs(COleVariant(sFile),
covOptional,
covOptional,
covOptional,
covOptional,
covOptional,
covOptional,
covOptional,
covOptional,
covOptional,
covOptional);
}
catch(COleException *e)
{
LPVOID lpMsg;
::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS, NULL, e->m_sc,
MAKELANGID(LANG_NEUTRAL,
SUBLANG_DEFAULT),(LPTSTR) &lpMsg,
0, NULL);
::MessageBox(NULL, (LPCTSTR)lpMsg, "COM Error",
MB_OK | MB_SETFOREGROUND);
::LocalFree( lpMsg );
}

catch(COleDispatchException *e)
{
char msg[512];
sprintf(msg, "程序运行出错'%d',系统提示信息为:\n\n%s",
e->m_scError & 0x0000FFFF, e->m_strDescription);
::MessageBox(NULL, msg, "无法保存文件",
MB_OK | MB_SETFOREGROUND);
}
//退出
COleVariant vOpt(DISP_E_PARAMNOTFOUND, VT_ERROR);
WordApp.Quit(COleVariant((short)true), vOpt, vOpt);

}
}
}
myazhe 2003-08-21
  • 打赏
  • 举报
回复
楼上,能不能提供一下源程序
karlson0211 2003-08-21
  • 打赏
  • 举报
回复
建议用摸板,如果通过程序来插,要看导入的文件的接口
gzshd 2003-08-21
  • 打赏
  • 举报
回复
使用word模板会容易一些,不知楼主是想做什么样的,如果是固定格式的,先在word里做好一个模板,用的时候只要用程序往里放数据会比较简单
-燕赤侠- 2003-08-21
  • 打赏
  • 举报
回复
有相关的对象模型,你可以查一下office自带的帮助

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧