用户登录
用户注册

分享至

vcword数据 在VC中如何将数据导入Word中

  • 作者: 女施主让你受精了
  • 来源: 51数据库
  • 2020-04-21

在给企业开发的项目中,客户经常要求将 在给企业开发的项目中,客户经常要求将数据汇总显示并打印。站在程序员的立场上,简单数据的汇总打印可以采用VB自带报表,对复杂的数据用水晶报表或第三方打印控件。在企业中,汇总数据另一个目的是为了便于交流和共享资源,报表的格式通常固定,内容可以自己调整,他们对 Excel 和 Word 情有独钟。

刚完成的项目中,客户要求将汇总的数据以三种方式进行显示和打印:AutoCad、Excel 和 Word 文档中。前两种方式网上资源很多,对 Word 文档我找到例子不是很多。由于需要和 AutoCad 开发程序结合,不能将 Word 文档以 OLE 的方式 嵌入到程序中,文档只能在内存中形成,这将占用大量的CPU资源,另开一个线程进行处理,线程间以发送消息的方式进行通信。

首先在VC引入Word, 对格式相同的地方一定使用模版的方式进行处理,这可以大大的提高运行速度,Word中的模版为*.dot。加载模版的代码为:

sDocs=sApp.GetDocuments();

sDocs.AttachDispatch(sApp.GetDocuments(),true);

COleVariant vFalse((long)0),vTrue((long)1);

sDoc.AttachDispatch(sDocs.Add(COleVariant(_variant_t(strFileName)), vFalse,vFalse, vTrue));

需要注意的是,如果Word中使用到表格,VBA录制的全是Selection对象的处理方法,在VC中使用Selection对象的MoveUp和MoveDown函数时会出现不确定现象(如果你知道为什么的话请告诉我)。如果你需要绘制表格,不要用程序来动态形成,绘制表格的代码是很繁琐的,而且在页眉中绘制单元格是很难控制的。可以先在模版中绘出你要的表格格式,然后用程序复制单元格或者直接使用模版中的单元格。由于我做的项目表格的行数不确定,我采用的是复制单元格的方式(速度比较慢,谁有更好的方法?)。

vc中 怎样把word文档转换为二进制数据

word文档本来就是二进制的

所有文件都是以二进制存放在硬盘的,只是存放结构不一样而已

请高手帮忙解决一下,如何在VC中读取word文件的内容并进行处理。

vc6测试成功,写的有点乱你自己好好看看吧.

_Application app;

Documents docs;

_Document doc;

Tables WordTables;

Table WordTable;

Cell WordCell;

Range WordRange;

Columns WordCols;

Rows WordRows;

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

{

MessageBox("创建Word服务失败!",_T("提示"),MB_ICONERROR);

return;

}

docs.AttachDispatch(app.GetDocuments());

app.SetVisible(true);

//打开文件

IDispatch *dispatch=docs.Open(&_variant_t(_T("d:\\test.doc")),&vtMissing,&vtMissing,&vtMissing,

&vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing,

&vtMissing,&vtMissing,&vtMissing,&vtMissing);

if(dispatch)

{

doc.AttachDispatch(dispatch);

}

else

{//出错了

CString szErr="";

szErr.Format("打开文件出错,请查看文件是否存在!");

::AfxMessageBox(szErr);

//退出程序,释放对象

app.Quit(&vtMissing,&vtMissing,&vtMissing);

docs.ReleaseDispatch();

app.ReleaseDispatch();

return;

}

dispatch=doc.GetTables();

if(dispatch)

{

WordTables.AttachDispatch(dispatch);

}

else

{//出错了

CString szErr="";

szErr.Format("取得表格集合出错!");

::AfxMessageBox(szErr);

//退出程序,释放对象

app.Quit(&vtMissing,&vtMissing,&vtMissing);

docs.ReleaseDispatch();

app.ReleaseDispatch();

doc.ReleaseDispatch();

return;

}

int nTableCount=WordTables.GetCount();

if(nTableCount>0)

{

for(int i=1;i<=nTableCount;i++)

{

WordTable.AttachDispatch(WordTables.Item(i));

WordCols.AttachDispatch(WordTable.GetColumns());

WordRows.AttachDispatch(WordTable.GetRows());

int nCols=WordCols.GetCount();

int nRows=WordRows.GetCount();

for(int j=1;j<=nRows;j++)

{

for(int k=1;k<=nCols;k++)

{

dispatch=WordTable.Cell(j,k);

WordRange.AttachDispatch(dispatch);

CString szText=WordRange.GetText();

this->MessageBox(szText);

}

}

}

}

app.Quit(&vtMissing,&vtMissing,&vtMissing);

doc.ReleaseDispatch();

docs.ReleaseDispatch();

app.ReleaseDispatch();

vc 拷贝数据到WORD或EXCEL

FILE *fp;

fp=fopen("X:\\File.xls","w");

按

fprintf(wfp,"%s\t%s\t",v1,v2v...);

fclose(fp);

这种格式写入文本,就是Excel了.

使用VC编程操作Word的时候,有些参数不知道意思怎么办?

你可以把操作录制到宏里面,然后编辑宏,里面有这个操作相关的代码作为参考。

关于如何用VC读取word表格的问题

我现在是在做利用VC 实现WORD表格与ACCESS数据库相互转换的系统 ,在读取WORD表格数据,并转换到ACCES出了问题,怎么样读取WORD文档的表格数据?

我只能写出读取WORD文本的程序 但是肯定不行的 请大家帮忙改正下 我需要读取表格数据,对应到ACCESS里面 我有 m_strId, m_strName, m_nScore

void CDb005Dlg::OnButtonRead()

{

// TODO: Add your control notification handler code here

CLSID clsid;

HRESULT hr;

hr = CLSIDFromProgID(L"Word.Application",&clsid);

if(FAILED(hr))

{

AfxMessageBox(_T("您没有安装OFFICE"));

return;

}

IUnknown *pUnknown=NULL;

IDispatch *pDispatch=NULL;

_Application app=NULL;

hr = GetActiveObject(clsid, NULL, &pUnknown);

if(FAILED(hr))

{

AfxMessageBox(_T("没有正在运行中的MS WORD"));

return;

}

hr = pUnknown->QueryInterface(IID_IDispatch, (LPVOID *)&app);

if(FAILED(hr))

{

pUnknown->Release();

AfxMessageBox(_T("没有取得Application"));

return;

}

pUnknown->Release();

pUnknown = NULL;

Selection Sel = app.GetSelection();

if(!Sel)

{

Sel.ReleaseDispatch();

AfxMessageBox(_T("没有正在编辑的MS WORD"));

return;

}

Sel.WholeStory(); //全部选择

CString str = Sel.GetText(); //取得文本

m_strReada = str; //显示到编辑窗中

UpdateData(FALSE);

Sel.ReleaseDispatch();

app.ReleaseDispatch();

///////

if(m_nOperate == 1) //增加

{

UpdateData(TRUE);

if(m_strId.IsEmpty())

{

AfxMessageBox(_T("学生学号不能为空."));

return;

}

if(m_strName.IsEmpty())

{

AfxMessageBox(_T("学生姓名不能为空."));

return;

}

CString strSql;

strSql.Format(_T("Insert into StudentInfo values('%s','%s',%d)"), m_strId, m_strName, m_nScore);

try

{

m_pConnection->Execute(_bstr_t(strSql), 0, adCmdText);

}

catch(_com_error e)

{

AfxMessageBox(_T("增加记录失败!"));

}

AfxMessageBox(_T("增加记录成功!"));

FreshList();

}

VC下操作word,按指定格式把替换文本。

word里面录制宏看下,然后用对应的ole方法操作

Selection.Font.Bold = wdToggle

Selection.Font.UnderlineColor = wdColorAutomatic

Selection.Font.Underline = wdUnderlineSingle

如果你引用了Office的lib,可以直接使用这些枚举,如果用的自动化接口,可以查下这些枚举对应的值,直接给属性赋值也可以

谢谢你的回答 你说的这个方法是试过了 行不通 运用CFind里的Excute方法替换文本只能按照原先文本的格式进行替换,它不能把替换后的文本改为你想要的自定义格式。关于这个问题,经过我和同学的讨论,昨天已经解决了。谢谢。

来自:求助得到的回答

转载请注明出处51数据库 » vcword数据 在VC中如何将数据导入Word中

软件
前端设计
程序设计
Java相关