您的位置:首页 > 其它

vc2008 操作excel 和ppt (插入图片)

2015-09-23 17:00 676 查看
一. vc2008实现打开指定excel文件,在指定位置插入图片


1: 新建一个基于对话框的工程

2:在类视图里点击添加新类



3:如下图,选中“TypeLib 中的MFC类”:



4:根据所按安装的office版本,添加EXCEl所对应的库



添加接口,可根据需要选择性的添加,也可以全部添加,每一个被选择的接口都会生成一个.h 文件



所生成的.h 文件会自动加载到工程中:



5 修改头文件:打开这些加入工程的头文件,将 #import "C:\\Program Files\\Microsoft Office\\Office12\\EXCEL.EXE" no_namespace 注释掉

6:在stdafx.h 中添加头文件

#include "CApplication.h"
#include "CRange.h"
#include "CRanges.h"
#include "CShape.h"
#include "CShapes.h"
#include "CWorkbook.h"
#include "CWorkbooks.h"
#include "CWorksheet.h"
#include "CWorksheets.h"


7:编译工程,出现报错:

…\crange.h(335): warning C4003: “DialogBoxW”宏的实参不足

…\crange.h(335): error C2059: 语法错误:“,”

修改 :将该函数名“DialogBox()”前面加“_”下划线,即“_DialogBox()”:

8:在TestExcel.cpp 中的InitInstance()中添加代码:AfxOleInit()

if (!AfxOleInit())
{
AfxMessageBox("初始化Ole出错!");
return FALSE;
}


9:添加相应按钮:

void CTestWordDlg::OnBnClickedInsertPic()
{
OpenExcel(_T("F:\\test.xlsx"),_T("F:\\test.bmp"),_T("B2"),_T("J10"));
}


void CTestWordDlg::OpenExcel(CString strFilePath,CString strPicPath, CString strPicPointBegin, CString strPicPointEnd)
{
CApplication app;
CWorkbooks books;
CWorkbook book;

CWorksheets sheets;
CWorksheet sheet;

CRange rang;

CShapes m_shapes;
CShape  m_shape;
LPDISPATCH lpDisp;

COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);

if (!app.CreateDispatch(_T("Excel.Application")))
{
this->MessageBox(_T("can not create Application"));
return ;
}

books = app.get_Workbooks();
lpDisp = books.Open(strFilePath,covOptional,covOptional,covOptional,covOptional,covOptional,
covOptional,covOptional,covOptional,covOptional,covOptional,
covOptional,covOptional,covOptional,covOptional);
//book = books.Add(covOptional);
book.AttachDispatch(lpDisp);

sheets = book.get_Sheets();
sheet = sheets.get_Item(COleVariant((short)1));

//m_shapes.AttachDispatch(sheet.get_Shapes(),TRUE);
m_shapes = sheet.get_Shapes();

rang = sheet.get_Range(COleVariant(strPicPointBegin),COleVariant(strPicPointEnd));
//rang = sheet.get_Range(COleVariant(_T("B1")),COleVariant(_T("j9")));
m_shape = m_shapes.AddPicture(strPicPath,false,true,(float)rang.get_Left().dblVal,(float)rang.get_Top().dblVal,(float)rang.get_Width().dblVal,(float)rang.get_Height().dblVal);

rang.ReleaseDispatch();
m_shape.ReleaseDispatch();
m_shapes.ReleaseDispatch();
m_shape.ReleaseDispatch();
m_shapes.ReleaseDispatch();
book.ReleaseDispatch();
books.ReleaseDispatch();

book.Close(covOptional,covOptional,covOptional);
books.Close();

app.ReleaseDispatch();
app.Quit();

}



二. 打开指定位置的PPT文档,在指定页面的指定位置加入指定图片

void CTestWordDlg::OpenPPT(CString strFilePath,CString strPicPath,CString strPageNum, CString strShapeNum)
{
CApplication0 app;
CPresentation presentation;
CPresentations presentations;
CShape0 shape0;
CShapes0 shapes0;
CSlide slide;
CSlides slides;
CSlideShowView slideShowView;
CSlideShowWindow slideShowWindow;
CSlideShowWindows slideShowWindows;
CView0 view0;

if (!app.CreateDispatch(_T("Powerpoint.Application")))
{
AfxMessageBox(_T("Could't start PowerPoint"));
}
else
{
app.put_Visible(TRUE);
}

presentations = app.get_Presentations();
presentation = presentations.Open(strFilePath,0,0,1);

slides = presentation.get_Slides();
long lPageNum = _ttol(strPageNum);
slide = slides.Item(COleVariant(lPageNum));

shapes0 = slide.get_Shapes();
long lShapeNum = _ttol(strShapeNum);
shape0 = shapes0.Item(COleVariant(lShapeNum));

float fleft = shape0.get_Left();
float ftop = shape0.get_Top();
float fwidth = shape0.get_Width();
float fheight = shape0.get_Height();

shapes0.AddPicture(strPicPath,false,true,fleft,ftop,fwidth,fheight);

app.Quit();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: