描述:
help
我会插入数据
但是图片如何插入
我一直搞不定
好郁闷
解决方案1:
PicturesPtr不可能被倒出来的,因为它是在IDL中隐藏了。vb还可以使用,不知道vc怎么使用隐藏的方法。我找到一种方法可以插入图片,首先导入excel9.olb(Excel 95 and prior : xl5en32.olb
Excel 97 : excel8.olb
Excel 2000 : excel9.olb
Excel 2002 : excel.exe):
// ExcelPicture.h: interface for the CExcelPicture class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_EXCELPICTURE_H__CA5DFF0B_49DC_4829_BB22_A0010E28A64C__INCLUDED_)
#define AFX_EXCELPICTURE_H__CA5DFF0B_49DC_4829_BB22_A0010E28A64C__INCLUDED_
#include "excel9.h" // Added by ClassView
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class CExcelPicture
{
public:
BOOL InsertPicture(LPCTSTR lpszFilePath);
CExcelPicture();
virtual ~CExcelPicture();
protected:
_Application m_pApp;
Workbooks m_pWorkBooks;
_Workbook m_pWorkBook;
//Sheets* m_pSheets;
_Worksheet m_pWorkSheet;
//Range* m_pRange;
Shapes m_pShapes;
//Shape* m_pShape;
};
#endif // !defined(AFX_EXCELPICTURE_H__CA5DFF0B_49DC_4829_BB22_A0010E28A64C__INCLUDED_)
//---------------------------------------------------------------------------------------
// ExcelPicture.cpp: implementation of the CExcelPicture class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "ExcelPicture.h"
#include "COMDEF.H"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CExcelPicture::CExcelPicture()
{
COleVariant covOptional( (long)DISP_E_PARAMNOTFOUND, VT_ERROR );
if(!AfxOleInit())
{
AfxMessageBox("无法初始化COM的动态连接库!");
return ;
}
if( !m_pApp.CreateDispatch( _T("Excel.Application") ) )
{
AfxMessageBox("无法启动Excel服务器!");
return;
}
m_pWorkBooks.AttachDispatch( m_pApp.GetWorkbooks() );
LPDISPATCH lpdspWork = m_pWorkBooks.Open( _T("C:\\TestPicture.xls"),
covOptional, covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional );
m_pWorkBook.AttachDispatch( lpdspWork );
m_pWorkSheet.AttachDispatch( m_pWorkBook.GetActiveSheet() );
m_pShapes.AttachDispatch( m_pWorkSheet.GetShapes() );
}
CExcelPicture::~CExcelPicture()
{
COleVariant covOptional( (long)DISP_E_PARAMNOTFOUND, VT_ERROR );
if( m_pApp )
{
m_pShapes.ReleaseDispatch();
m_pWorkSheet.ReleaseDispatch();
m_pWorkBook.Save();
m_pWorkBook.Close( covOptional,COleVariant(_T("C:\\TestPicture.xls")),covOptional );
m_pWorkBook.ReleaseDispatch();
m_pWorkBooks.Close();
m_pWorkBooks.ReleaseDispatch();
m_pApp.Quit();
m_pApp.ReleaseDispatch();
}
}
BOOL CExcelPicture::InsertPicture(LPCTSTR lpszFilePath)
{
m_pShapes.AddPicture( lpszFilePath, 1, 1, 100, 100, 53, 53 );
AfxMessageBox( _T("Insert Picture succeed!") );
return TRUE;
}
//-------------------------------CALL METHOD-----------------------------------------
LPCTSTR lpszFile = _T("C:\\Documents and Settings\\WIN XP\\桌面\\image68.gif");
CExcelPicture pic;
pic.InsertPicture( lpszFile );
其实你自己录制一个宏然后单步运行就知道 VBA 代码的了
知道 VBA 代码后自己写就简单了
看看我写的 BCB 代码:
col -= 1; // 0 与 1 的区别
if ( col <= 'Z'-'A' ) wsprintf(strSet, "%c%d", ('A'+col), row );
else wsprintf(strSet, "%c%c%d", ('A'+ col/('Z'-'A'+1) -1), ('A'+ col%('Z'-'A'+1) ), row );
if ( FileExists(asCurrentDir+ "\\JPG\\temp.jpg") ) // 是否存在文件
{
MSExcel.OlePropertyGet("ActiveWorkBook").OlePropertyGet("ActiveSheet").
OlePropertyGet("Range", strSet).OleProcedure("Select");
MSExcel.OlePropertyGet("ActiveWorkBook").OlePropertyGet("ActiveSheet").
OlePropertyGet("Pictures"). // c_str()与标准 C++ 中的string的c_str()函数一样
OleProcedure("Insert", (asCurrentDir+ "\\JPG\\temp.jpg").c_str());
}
Excel::PicturesPtr pts=oSheet->Pictures();
pts->Insert((_bstr_t)strBmp); //strBmp 为图片存放的位置
DeleteFile(strBmp);
pts->PutTop(m_pCanvas->m_nPicturePos);
//COleVariant vstr=strFn;
Office的VBA帮助里有例子.也可以在Office中录制宏
参考
Excel::WorkbooksPtr oBooks;
oBooks=oApp->GetWorkbooks();
Excel::_WorkbookPtr oBook;
oBook=oBooks->Add(vOpt);
Excel::WorksheetsPtr oSheets;
oSheets=oBook->GetWorksheets();
Excel::_WorksheetPtr oSheet;
oSheet=oSheets->GetItem(1L);
Excel::RangePtr oRange;
m_pCanvas->SaveCurveData(oSheet,oRange);
Excel::PicturesPtr pts=oSheet->Pictures();
pts->Insert((_bstr_t)strBmp); //strBmp 为图片存放的位置
DeleteFile(strBmp);
pts->PutTop(m_pCanvas->m_nPicturePos);
// COleVariant vstr=strFn;
COleVariant vTrue((short)TRUE),vFalse((short)FALSE);
oBook->SaveAs(COleVariant(strFn),-4143L,COleVariant(""),COleVariant(""),vFalse,
vFalse,Excel::XlSaveAsAccessMode(1L));