声明:上次写这篇文章的时候用的是截图,导致看不见东西,不是故意的。
本文的内容有两部分:
第一部分是手动打开一个excel表格以后,Ctrl+C复制表格中的内容,点击程序中的一个按钮,跳到OnTreePop_CopyForExcelOle()函数中。走的是
ExcelCopyObject()接口。该函数是把刚才复制的excel表格以Microsoft Excel 工作表 对象插入到一个临时建立的word文件中,在该函数中,需要把对象粘贴到richEdit控件中,但是直接粘贴只能显示一部分。只有在word中把对象转换成嵌入型以后才能全部粘贴到richEdit控件中。所以进行了环绕方式的转换。
第二部分是手动打开一个word文件,里面有组织结构图等不能直接复制到richEdit控件中的图形。为了把这些图形复制到richEdit控件中,需要先把其转换成OLE对象。同样复制以后,点击按钮跳到OnTreePop_CopyForWordOle()函数中。走WordCopyObject()和PasteOleToWord(flag)接口。第一个接口是把图片复制到word临时文件中。第二个接口是把临时文件以OLE对象插入到另一个临时word文件。最后把这个OLE对象粘贴到richEdit控件中
//word 1
void CMainFrame::OnTreePop_CopyForWordOle()
{
TreePop_CopyForOle( 1 );
}
//excel 0
void CMainFrame::OnTreePop_CopyForExcelOle()
{
TreePop_CopyForOle( 0 );
}
//visio 2
void CMainFrame::OnTreePop_CopyForVisioOle()
{
TreePop_CopyForOle( 2 );
}
void CMainFrame::TreePop_CopyForOle( int flag )
{
int res;
if (flag == 0)
res = ExcelCopyObject();
else if (flag == 1)
{
res = WordCopyObject();
if (res != -1)
PasteOleToWord(flag);
}
}
/
//
// 从word文件中按下Ctrl + C后,复制到a.docx中,并且保存。每次复制时,a.docx都会清空,保证a.docx中保存的是最新复制的内容
//
// 2015年1月6日10:43:05 hjz
int CMainFrame::ExcelCopyObject()
{
char pFileName[MAX_PATH];
int nPos = GetCurrentDirectory( MAX_PATH, pFileName);
CString csFullPath(pFileName);
CString csFullPathA = csFullPath + "\\System\\Module\\CopyForWord.docx";
//查找是否有CopyForWord.docx,如果有删除它
HANDLE h;
LPWIN32_FIND_DATA pFD=new WIN32_FIND_DATA;
BOOL bFound = FALSE;
if(pFD)
{
h=FindFirstFile(csFullPathA, pFD);
bFound=(h!=INVALID_HANDLE_VALUE);
if(bFound)
{
FindClose(h);
DeleteFile(csFullPathA);
}
delete pFD;
}
CWordApplication wordapp;
CWordDocuments docs;
CWordDocument doc;
if (!wordapp.CreateDispatch(_T("Word.application")))
{
AfxMessageBox(_T("Word初始化时出错!"));
return -1;
}
wordapp.SetVisible(FALSE);
docs = wordapp.GetDocuments();
CComVariant Template(_T(""));
CComVariant NewTemplate(fal