一个封装的实用的EXCEL类

/------------------------------------------------------------------------EXCELFILE.H-------------------------------------------------

#pragma once
#include "CApplication.h"
#include "CWorkbook.h"
#include "CWorkbooks.h"
#include "CWorksheet.h"
#include "CWorksheets.h"
#include "CRange.h"
#include "comdef.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);
 bool LoadSheet(char* sheet);
 CString GetSheetName(int iIndex);
 void InitExcel();
 void ReleaseExcel(CString strOutFileName);
 int GetSheetCount();
 bool Open(CString FileName);
 ExcelFile();
 virtual ~ExcelFile();

private:

 CWorkbooks    m_Books;
 CWorkbook     m_Book;
 CWorksheets   m_sheets;
 CWorksheet    m_sheet;
 CRange        m_Rge;

 static CApplication m_ExcelApp;
 
};

/-----------------------excelfile.cpp----------------

#include "StdAfx.h"
#include "./excelfile.h"

COleVariant
        covTrue((short)TRUE),
        covFalse((short)FALSE),
        covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);   

ExcelFile::ExcelFile()
{
}
ExcelFile::~ExcelFile()
{
 m_Rge.ReleaseDispatch();
 m_sheet.ReleaseDispatch();
 m_sheets.ReleaseDispatch();
 m_Book.ReleaseDispatch();
 m_Books.ReleaseDispatch();
}

CApplication ExcelFile::m_ExcelApp;

void ExcelFile::InitExcel()
{
 初始化COM
 //if (::CoInitialize( NULL ) == E_INVALIDARG)
 //{
 // AfxMessageBox(_T("初始化Com失败!"));
 //}

 //创建Excel 2000服务器(启动Excel)
 if (!m_ExcelApp.CreateDispatch("Excel.Application",NULL))
 {
  AfxMessageBox("创建Excel服务失败!");
  exit(1);
 }
}
void ExcelFile::ReleaseExcel(CString strOutFileName)
{
 m_sheets.ReleaseDispatch();
 m_sheet.ReleaseDispatch();
 m_Rge.ReleaseDispatch();
 m_Book.Close(covOptional,COleVariant(strOutFileName),covOptional);
 m_Books.Close();
 m_ExcelApp.Quit();
 m_ExcelApp.ReleaseDispatch();
 m_Books=NULL;
 m_ExcelApp=NULL;
}
bool ExcelFile::Open(CString FileName)
{//打开excel文件
 //利用模板文件建立新文档
 m_Books.AttachDispatch(m_ExcelApp.get_Workbooks(),true);
 
 LPDISPATCH lpDis = NULL;
 lpDis = m_Books.Add(_variant_t(FileName));
 if (lpDis)
 {
  m_Book.AttachDispatch(lpDis);
  //得到Worksheets
  m_sheets.AttachDispatch(m_Book.get_Worksheets(),true);
  return true;
 }
 return false;
}
int ExcelFile::GetSheetCount()
{
 return m_sheets.get_Count();
}
CString ExcelFile::GetSheetName(int iIndex)
{
 CWorksheet sheet;
 sheet.AttachDispatch(m_sheets.get_Item(_variant_t((long)iIndex)),true);
 CString name = sheet.get_Name();
 sheet.ReleaseDispatch();
 return name;
}
bool ExcelFile::LoadSheet(int iIndex)
{
 LPDISPATCH lpDis = NULL;
 m_Rge.ReleaseDispatch();
 m_sheet.ReleaseDispatch();
 lpDis = m_sheets.get_Item(_variant_t((long)iIndex));
 if (lpDis)
 {
  m_sheet.AttachDispatch(lpDis,true);
  m_Rge.AttachDispatch(m_sheet.get_Cells(), true);
  return true;
 }

 return false;
}
bool ExcelFile::LoadSheet(char* sheet)
{
 LPDISPATCH lpDis = NULL;
 m_Rge.ReleaseDispatch();
 m_sheet.ReleaseDispatch();
 lpDis = m_sheets.get_Item(_variant_t(sheet));
 if (lpDis)
 {
  m_sheet.AttachDispatch(lpDis,true);
  m_Rge.AttachDispatch(m_sheet.get_Cells(), true);
  return true;
 }

 return false;
}
int ExcelFile::GetColumnCount()
{
 CRange range;
 CRange usedRange;
 usedRange.AttachDispatch(m_sheet.get_UsedRange(), true);
 range.AttachDispatch(usedRange.get_Columns(), true);
 int count = range.get_Count();
 usedRange.ReleaseDispatch();
 range.ReleaseDispatch();
 return count;
}
int ExcelFile::GetRowCount()
{
 CRange range;
 CRange usedRange;
 usedRange.AttachDispatch(m_sheet.get_UsedRange(), true);
 range.AttachDispatch(usedRange.get_Rows(), true);
 int count = range.get_Count();
 usedRange.ReleaseDispatch();
 range.ReleaseDispatch();
 return count;
}
CString ExcelFile::GetCell(int iRow, int iColumn)
{
 CRange range;
 range.AttachDispatch(m_Rge.get_Item (COleVariant((long)iRow),COleVariant((long)iColumn)).pdispVal, true);
 COleVariant vResult =range.get_Value2();
 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("%0.0f",vResult.dblVal);
  //str.Format("%.0f",vResult.dblVal);
  //str.Format("%1f",vResult.fltVal);
 }
 else if(vResult.vt==VT_DATE)    //时间格式
 {
  SYSTEMTIME st;
  VariantTimeToSystemTime(vResult.date, &st);
  CTime tm(st);
  str=tm.Format("%Y-%m-%d");
  
 }
 else if(vResult.vt==VT_EMPTY)   //单元格空的
 {
  str="";
 } 

 range.ReleaseDispatch();

 return str;
}
int ExcelFile::GetCellInt(int iRow, int iColumn)
{
 CRange range;
 range.AttachDispatch(m_Rge.get_Item (COleVariant((long)iRow),COleVariant((long)iColumn)).pdispVal, true);
 COleVariant vResult =range.get_Value2();
 int num;
 num = (int)vResult.date;

 range.ReleaseDispatch();

 return num;
}
void ExcelFile::ShowInExcel(bool bShow)
{
 m_ExcelApp.put_Visible(bShow);
}

  • 12
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
vc导入excel封装是指在vc(Visual C++)编程环境中,通过封装的方式实现对Excel文件的导入功能。 首先,需要引入Microsoft Excel的相关函数库,例如使用MFC(Microsoft Foundation Class)库中的COleVariant和COleDispatchDriver。这些提供了对Excel应用程序对象和工作簿对象的封装,可以方便地进行Excel文件的操作。 在导入Excel文件之前,需要先创建一个Excel应用程序对象,可以使用COleDispatchDriver的CreateDispatch方法来创建。然后,通过应用程序对象的Workbooks属性获取工作簿集合,并使用Add方法创建一个新的工作簿对象。 接下来,可以使用工作簿对象的Open方法打开待导入的Excel文件,并通过工作簿对象的Sheets属性获取工作表集合,再使用索引或名称来获取具体的工作表对象。 对于每个工作表对象,可以使用其Range属性获取指定单元格范围的数值。例如,可以使用Range对象的GetValue方法获取单元格的数值,并将其存储到自定义的数据结构中,以便后续使用。 最后,完成Excel文件的导入后,需要调用工作簿对象的Close方法关闭文件,并释放相关资源。同时,还需要调用应用程序对象的Quit方法来退出Excel应用程序。 总结起来,实现vc导入Excel封装需要引入Microsoft Excel的相关函数库,并通过封装提供的方法来创建应用程序对象、打开Excel文件、获取工作表对象以及获取单元格范围的数值等操作。最后,记得关闭文件并退出Excel应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值