高分寻教

happylamb 2003-12-08 10:49:15
小弟我近日碰到一个问题,需要在VC下读取数据,形成WORD和EXCEL文件,另外能否把VC中列表中的数据如实在WORD文档中形成表格
小弟我恳求各位大侠赐教方法文档和代码例程,并高分致谢
...全文
34 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
enoloo 2003-12-13
  • 打赏
  • 举报
回复
不懂,关注。
呵呵~
happylamb 2003-12-13
  • 打赏
  • 举报
回复
期盼中
孤必有邻 2003-12-13
  • 打赏
  • 举报
回复
(Word操作通常要复杂得多吧,这里只是一个简单说明)
如何访问Word文件:

1、通过ClassWizard添加相关类:

ClassWizard->MessageMaps->AddClass->From a type library
选择文件 Program Files\Microsoft Office\Office\Msword8.olb(没有8就有9,只要安装了Office,总会有一个)
在上面的列表中选择类
(如果不能确定选哪些,按下Shift全选上)
(东西多多,不知道要用哪些类,实现哪些功能)
(慢慢研究吧)

2、引用头文件

#include "msword8.h"

3、添加代码

示例代码一:
打开MS Word写入一段文字
void Test()
{
COleVariant covTrue((short)TRUE), covFalse((short)FALSE);
_Application wordapp;
Documents docs;
_Document doc;
if(!wordapp.CreateDispatch("Word.Application",NULL))
{
AfxMessageBox("not!");
exit(1);
}
wordapp.SetVisible(TRUE);// FALSE
docs=wordapp.GetDocuments();
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
COleVariant start_line,end_line;
start_line.intVal=2;
end_line.intVal=50;
//doc=docs.Add(COleVariant("c:\\Text.doc"),covOptional);
doc=docs.Add(COleVariant("D:\\Program Files\\Microsoft Office\\Templates\\Normal.dot"),covOptional);
Range oRange;
oRange=doc.Range(start_line,end_line);
oRange.SetText("我是王进我怕谁");
try
{
doc.SaveAs(COleVariant("c:\\temp.doc"),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_CHINESE,SUBLANG_CHINESE_SIMPLIFIED), (LPTSTR) &lpmsg,0,NULL);
}
catch(COleDispatchException *e)
{
char msg[512];
sprintf(msg,"程序运行出错'%d',系统提示信息为:\n\n%s",e->m_wCode & 0x0000ffff,e->m_strDescription);
::MessageBox(NULL,msg,"无法保存文件",MB_OK|MB_SETFOREGROUND);
}
Sleep(5000);
wordapp.Quit( covFalse, covTrue, covFalse );
wordapp.ReleaseDispatch();
}
孤必有邻 2003-12-13
  • 打赏
  • 举报
回复
先贴一段操作Excel的:
如何访问Excel文件:

1、通过ClassWizard添加相关类:

ClassWizard->MessageMaps->AddClass->From a type library
选择文件 Program Files\Microsoft Office\Office\Excel8.olb(没有8就有9,只要安装了Office,总会有一个)
在上面的列表中选择类(可以多选,不能少选)
_Application
_Workbook
_Worksheet
Workbooks
Worksheets
Range

2、引用头文件

#include "excel8.h"

3、在应用程序或对话框初始化中调用

CoInitialize(NULL);

4、添加代码

示例代码一:
读一Excel文件数据,按一定格式写入文本文件
(说明:没有读出行数和列数,固定为99*99)
void Els2Txt()
{
CString xls="c:\\test.xls";
CString txt="c:\\test.txt";
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
//// 操作对象、操作步骤
// 应用
_Application oApp;
oApp.SetVisible(TRUE);
oApp.CreateDispatch("Excel.Application");
// 窗口
Workbooks oBooks;
_Workbook oBook;
oBooks = oApp.GetWorkbooks();
oBook = oBooks.Open(xls,
covOptional,
covOptional,
covOptional,
covOptional,
covOptional,
covOptional,
covOptional,
covOptional,
covOptional,
covOptional,
covOptional,
covOptional);
// 表格
Worksheets oSheets;
_Worksheet oSheet;
oSheets = oBook.GetWorksheets();
oSheet = oSheets.GetItem(COleVariant((short)1));
// 数据
Range oRange;
oRange = oSheet.GetCells();
// 字段
COleVariant ItemID;
_Application pApp;
//
COleVariant row, col, value;

long nRow=oRange.GetRow();
long nCol=oRange.GetColumn();
CString text, temp;
nRow=99;
nCol=99;
BOOL bNO;
int NOCount=0;
CFile file;
if(file.Open(txt,CFile::modeCreate|CFile::modeWrite))
{
for(int r=1;r<=nRow&&NOCount<3;r++)
{
bNO=TRUE;
for(int c=1;c<=nCol;c++)
{
row = (short)r;
col = (short)c;
ItemID = oRange.GetItem(row,col);
pApp.AttachDispatch(ItemID.pdispVal,TRUE);
text = pApp.GetValue();
if(text!="")
{
bNO=FALSE;
temp.Format("\"%02d%02d\",%s%c%c",r,c,text.GetBuffer(0),0x0d,0x0a);
//AfxMessageBox(temp);
file.Write(temp.GetBuffer(0),temp.GetLength());
}
}
if(bNO)NOCount++;
else NOCount=0;
}
file.Close();
}
//
oApp.Quit();
oApp.ReleaseDispatch();
text.Format("处理完成: %s",filename);
SetDlgItemText(IDC_EDIT4,text);
}

示例代码二:
胡乱打开一个文件,写入一些数据
void Test()
{
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
int i,j;
CString ssbuf;
COleVariant x;
COleVariant y;
COleVariant data;
COleVariant ItemId;
_Application pApp;
_Application pXlsApp;
Workbooks pXlsBooks;
Range pXlsRange;


pXlsApp.CreateDispatch("Excel.Application");
pXlsApp.m_bAutoRelease = TRUE;
pXlsApp.SetVisible(TRUE);
LPDISPATCH pWkBooks = pXlsApp.GetWorkbooks();
CString strFile = "C:\\work\\BOOK1.XLS";
pXlsBooks.AttachDispatch(pWkBooks,TRUE);
pXlsBooks.Open("c:\\Book1.xls",
covOptional,
covOptional,
covOptional,
covOptional,
covOptional,
covOptional,
covOptional,
covOptional,
covOptional,
covOptional,
covOptional,
covOptional);


LPDISPATCH pCells = pXlsApp.GetCells();
pXlsRange.AttachDispatch(pCells,TRUE);


y = (short)1;
x = (short)1;
ItemId = pXlsRange.GetItem(y,x);
pApp.AttachDispatch(ItemId.pdispVal,TRUE);
ssbuf = pApp.GetValue();

for(i=1; i<11; i++)
{
for(j=2; j<11; j++)
{
x = (short)i;
y = (short)j;
ssbuf.Format("%c%d",'A'+i-1,j);
data.SetString(ssbuf,VT_BSTR);
pXlsRange.SetItem(y,x,data);
}
}

pApp.DetachDispatch();
pApp.ReleaseDispatch();

pXlsRange.DetachDispatch();
pXlsRange.ReleaseDispatch();

pXlsBooks.Close();
pXlsBooks.DetachDispatch();
pXlsBooks.ReleaseDispatch();

pXlsApp.Quit();
pXlsApp.ReleaseDispatch();
}
zjg751206 2003-12-13
  • 打赏
  • 举报
回复
导入msword9.lib肯定可以.那些类不好记忆.不好操作.vc中有个automation选项是支持自动化宏的,就是这方面,您试试
beyondtkl 2003-12-13
  • 打赏
  • 举报
回复
不懂 学习
catf1sh 2003-12-13
  • 打赏
  • 举报
回复
学习

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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