小弟我近日碰到一个问题,需要在VC下读取数据,形成WORD和EXCEL文件,另外能否把VC中列表中的数据如实在WORD文档中形成表格
小弟我恳求各位大侠赐教方法文档和代码例程,并高分致谢

解决方案 »

  1.   

    导入msword9.lib肯定可以.那些类不好记忆.不好操作.vc中有个automation选项是支持自动化宏的,就是这方面,您试试
      

  2.   

    先贴一段操作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
    Range2、引用头文件#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();
    }
      

  3.   

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