龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

VC中对office的操作

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
以前导出数据的时候都是自己定义格式,自己来解析,或者直接导出到TXT里,这显然不能满足用户的继续编辑的要求,所以我用自动化技术写了几个函数可以将数据导出到word和excel中,

以前导出数据的时候都是自己定义格式,自己来解析,或者直接导出到TXT里,这显然不能满足用户的继续编辑的要求,所以我用自动化技术写了几个函数可以将数据导出到word和excel中,仅仅是标格数据。。。

这个过程是这样的:http://blog.csdn.net/hoya5121

在VC6的类向导中的AUTOMATION页筐中“ADD CLASS”,然后选择“from a type”,浏览到office目录选择导入工程文件 EXCEL9.OLB 和msword9.olb,然后将需要的类导入到工程中,这里出现一个问题,就是excel和word同时导入的时候excel9.h 和msword9.h
两个文件中居然有名字相同的类导致连接出错,我不知道是我使用错误,还是ms没注意到这个问题。。。最终我这样解决了这个问题,在excel.h文件中用namespace将正个文件加入到一个名字空间中。。。

接下来的工作就比较简单了,打开office将你需要的流程录制成vba的宏,然后将宏翻译成vc的代码。。下面将我的导入标格的代码贴出来:
 /**/////////////////对WORD的操作  2005-09-26///////////////////////
//.h
class CStringArrayOut : public CStringArray
...{
public:
    CStringArrayOut& operator = (const CStringArrayOut& strarrarr)
    ...{
        if(&strarrarr == this)
            return *this;
        this->RemoveAll();
        for(int i = 0; i < strarrarr.GetSize(); i++)
        ...{
            this->Add(strarrarr[i]);
        }

        return *this;
    }
};

typedef CArray<CStringArrayOut,CStringArrayOut&> StrVecVecType;

void WordTable(CString tablename,int rowNum,int colNum,StrVecVecType& tablestr,CString strOutDocFile);

void ExcelTable(CString tablename,
                int rowNum,
                int colNum,
                StrVecVecType& tablestr,
                CString strOutExcelFile);

//.cpp
void WordTable(CString tablename,int rowNum,int colNum,StrVecVecType& tablestr,CString strOutDocFile)
...{   
    int i, j;

    /**//////打开word/////////////////////////////////////////////////////////////////////
    _Application app;   
    if(!app.CreateDispatch(_T("Word.Application")))   
    ...{
        AfxMessageBox(_T("您没有安装OFFICE,此功能不能执行!"));
        return;
    }
    //app.SetVisible(TRUE);    //使WORD可见

    /**//////新建文档/////////////////////////////////////////////////////////////////////
    Documents docs = app.GetDocuments();
    CComVariant Template(_T(""));
    CComVariant NewTemplate(false),DocumentType(0),Visible;
    docs.Add(&Template,&NewTemplate,&DocumentType,&Visible);

精彩图集

赞助商链接