首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

vc 操作excel 链接报错,该怎么处理

2012-08-27 
vc操作excel链接报错网上找了个操作excel封装好的类。编译通过。链接报错.h文件:C/C++ code#include comdef

vc 操作excel 链接报错
网上找了个操作excel封装好的类。编译通过。链接报错

.h文件:  

C/C++ code
 
#include "comdef.h" 
#include "excel.h" 
class ExcelFile   

public: 
void ShowInExcel(bool bShow); 
CString GetCell(int iRow, int iColumn); 
int    GetCellInt(int iRow, int iColumn); 
int GetRowCount(); 
int GetColumnCount(); 
bool LoadSheet(int iIndex); 
CString GetSheetName(int iIndex); 
static void InitExcel(); 
static void ReleaseExcel(); 
int GetSheetCount(); 
bool Open(CString FileName); 
ExcelFile(); 
virtual ~ExcelFile(); 

protected: 
private: 
static _Application m_ExcelApp;  Workbooks    m_Books;   
_Workbook    m_Book;   
Worksheets  m_sheets;   
_Worksheet  m_sheet;   
Range        m_Rge;   
}; 




.cpp 文件
C/C++ code
 
#include "stdafx.h"
#include "ExcelFile.h"
ExcelFile::ExcelFile() 




ExcelFile::~ExcelFile() 

m_Rge.ReleaseDispatch();   
m_sheet.ReleaseDispatch();   
m_sheets.ReleaseDispatch();   
m_Book.ReleaseDispatch();   
m_Books.ReleaseDispatch();   


void ExcelFile::InitExcel() 

//创建Excel 2000服务器(启动Excel)   
if (!m_ExcelApp.CreateDispatch("Excel.Application",NULL))   
{   
AfxMessageBox("创建Excel服务失败!");   
exit(1);   
}   


void ExcelFile::ReleaseExcel() 

m_ExcelApp.ReleaseDispatch(); 

bool ExcelFile::Open(CString FileName) 

//打开excel文件 
//利用模板文件建立新文档   
m_Books.AttachDispatch(m_ExcelApp.GetWorkbooks(),true);   
LPDISPATCH lpDis = NULL; 
lpDis = m_Books.Add(_variant_t(FileName)); // 如何判断文件是否打开? 
if (lpDis) 

m_Book.AttachDispatch(lpDis);   
//得到Worksheets   
m_sheets.AttachDispatch(m_Book.GetWorksheets(),true);   
return true; 

return false; 


int ExcelFile::GetSheetCount() 

return m_sheets.GetCount(); 


CString ExcelFile::GetSheetName(int iIndex) 

_Worksheet sheet; 
sheet.AttachDispatch(m_sheets.GetItem(_variant_t((long)iIndex)),true); 
CString name = sheet.GetName(); 
sheet.ReleaseDispatch(); 
return name; 


bool ExcelFile::LoadSheet(int iIndex) 

LPDISPATCH lpDis = NULL; 
m_Rge.ReleaseDispatch(); 
m_sheet.ReleaseDispatch(); 
lpDis = m_sheets.GetItem(_variant_t((long)iIndex)); 
if (lpDis) 

m_sheet.AttachDispatch(lpDis,true); 
m_Rge.AttachDispatch(m_sheet.GetCells(), true); 
return true; 

return false; 


int ExcelFile::GetColumnCount() 

Range range; 
Range usedRange; 
usedRange.AttachDispatch(m_sheet.GetUsedRange(), true); 


range.AttachDispatch(usedRange.GetColumns(), true); 
int count = range.GetCount(); 
usedRange.ReleaseDispatch(); 
range.ReleaseDispatch(); 
return count; 


int ExcelFile::GetRowCount() 

Range range; 
Range usedRange; 
usedRange.AttachDispatch(m_sheet.GetUsedRange(), true); 
range.AttachDispatch(usedRange.GetRows(), true); 
int count = range.GetCount(); 
usedRange.ReleaseDispatch(); 
range.ReleaseDispatch(); 
return count; 

CString ExcelFile::GetCell(int iRow, int iColumn) 

Range range; 
range.AttachDispatch(m_Rge.GetItem (COleVariant((long)iRow),COleVariant((long)iColumn)).pdispVal, true); 
COleVariant vResult =range.GetValue2(); 
CString str; 
if(vResult.vt == VT_BSTR)      //字符串 

str=vResult.bstrVal; 

else if (vResult.vt==VT_INT) 

str.Format("%d",vResult.pintVal); 

else if (vResult.vt==VT_R8)    //8字节的数字   

str.Format("%f",vResult.dblVal); 
//str.Format("%.0f",vResult.dblVal); 
//str.Format("%1f",vResult.fltVal); 

else if(vResult.vt==VT_DATE)    //时间格式 

SYSTEMTIME st; 
VariantTimeToSystemTime(vResult.date, &st); 

else if(vResult.vt==VT_EMPTY)  //单元格空的 

str="(NULL)"; 
}   
range.ReleaseDispatch(); 
return str; 


int ExcelFile::GetCellInt(int iRow, int iColumn) 

Range range; 
range.AttachDispatch(m_Rge.GetItem(COleVariant((long)iRow),COleVariant((long)iColumn)).pdispVal, true); 
COleVariant vResult =range.GetValue2(); 
int num; 
num = (int)vResult.date; 
range.ReleaseDispatch(); 
return num; 
}

void ExcelFile::ShowInExcel(bool bShow) 

m_ExcelApp.SetVisible(bShow); 





要运行上面程序还需要导入几个类:
下面要从Office的安装目录中找到对VC操作excel文件的动态库,在某些版本下这个文件是Excel8.olb或者Excel9.olb,在我的版本中是excel.exe这个exe也是动态库的形式,是微软公司主要的文件结果之一。选择vc的View菜单里面的ClassWizad命令,会弹出一个对话框;然后点击Add Class…按钮选择From a type library,会弹出一个打开对话框,从这里打开Office安装目录下…\Office11\EXCEL.EXE文件,从里面选择几个要用到的类:_Application, Workbooks, _Wrokbook, Worksheets, _WorkSheet, Range,点击OK按钮。会在程序中生成一个excel.h和excel.cpp文件,这些文件中包含了刚才我们选择的几个类的代码。


各位大侠帮帮忙。这个链接错误怎么改呀


[解决办法]
C/C++ code
//操作word的导入库--Excel的可以类似改一下#import   "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB"#import   "C:\Program Files\Microsoft Office\OFFICE11\msword.olb"  rename("FindText","_FindText"), rename("ExitWindows","_ExitWindows")
[解决办法]
报什么错?

热点排行