VC操作excel(读写操作)
2017-09-25 11:45
495 查看
1 安装有office2007以上版本的excel
2.向项目工程中添加基本的7个类(Excel作为OLE/COM库插件,定义好了各类交互的接口,这些接口是跨语言的接口。VC可以通过导入这些接口,并通过接口来对Excel的操作),由于本文只关心对Excel表格中的数据的读取,主要关注7个接_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range、Font0。
VS2012导入OLE/COM组件的接口的步骤为:项目->类向导->添加类->类型库中的MFC类(TypeLib中的MFC类),先选择要导入的组件所在的路径,即Excel.exe所在的路径,然后再选择要导入的Excel类型库中的接口。组件路径一般为C:\Program Files\Microsoft Office\Office15\EXCEL.exe;格式类似。
导入后会在项目中自动导入相关类,使用时需要添加其头文件,主要的头文件有:
#include "CApplication.h"
#include "CWorkbook.h"
#include "CWorkbooks.h"
#include "CWorksheet.h"
#include "CWorksheets.h"
#include "CRange.h"
#include "CFont0.h"
3. 导入之后需要“#import "C:\\Program Files\\Microsoft Office\\Office12\\EXCEL.EXE" no_namespace”注释掉,然后添加头文件:#include <afxdisp.h>到上面7个文件中去。
4.如果有错误error C2059双击error C2059,将VARIANT DialogBox()改成VARIANT _DialogBox() 再次编译,通过!!
void CMFCApplicationWriteExcelDlg::OnBnClickedButton3()
{
/*
1 安装有office2007以上版本的excel
2.向项目工程中添加基本的7个类(Excel作为OLE/COM库插件,定义好了各类交互的接口,
这些接口是跨语言的接口。VC可以通过导入这些接口,并通过接口来对Excel的操作),由
于本文只关心对Excel表格中的数据的读取,主要关注7个接_Application、Workbooks、
_Workbook、Worksheets、_Worksheet、Range、Font0。
VS2012导入OLE/COM组件的接口的步骤为:项目->类向导->添加类->类型库中的MFC类
(TypeLib中的MFC类),先选择要导入的组件所在的路径,即Excel.exe所在的路径,然后再
选择要导入的Excel类型库中的接口。组件路径一般为C:\Program Files\Microsoft Office
\Office15\EXCEL.exe;格式类似。
导入后会在项目中自动导入相关类,使用时需要添加其头文件,主要的头文件有:
#include "CApplication.h"
#include "CWorkbook.h"
#include "CWorkbooks.h"
#include "CWorksheet.h"
#include "CWorksheets.h"
#include "CRange.h"
#include "CFont0.h"
3. 导入之后需要“#import "C:\\Program Files\\Microsoft Office\\Office12\\EXCEL.EXE"
no_namespace”注释掉,然后添加头文件:#include <afxdisp.h>到上面7个文件中去。
4.如果有错误error C2059双击error C2059,将VARIANT DialogBox()改成VARIANT _DialogBox()
再次编译,通过!!
*/
//默认使用第一个sheet
int nSheetNumber=1;
//创建对象
CApplication app;
if( !app.CreateDispatch(_T("Excel.Application")))
{
AfxMessageBox("没有安装office2007以上版本,无法操作excel文件");
return ;
}
//定义其他内部对象
CWorkbooks books;
CWorkbook book;
CWorksheets sheets;
CWorksheet sheet;
CFont0 font;
CRange range;
CString FieldName,FieldValue;
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
books=app.get_Workbooks();
//需要在c盘建立一个excel文件,也可以改成系统自带的excel文件
// book=books.Add(COleVariant("c:\\aa.xlsx"));
book = books.Add(covOptional);
book.put_Title("Mybooks");
sheets=book.get_Sheets();
sheet=sheets.get_Item(COleVariant((short)nSheetNumber));
sheet.put_Name("wxpSheet");
//---------------------
app.put_Visible(TRUE);//可见性
app.put_UserControl(TRUE);//只读
//设置标题
FieldName="a1";
FieldValue="数据A";
range=sheet.get_Range(COleVariant(FieldName),COleVariant(FieldName));
range.put_Value2(COleVariant(FieldValue));
FieldName="B1";
FieldValue="数据B";
range=sheet.get_Range(COleVariant(FieldName),COleVariant(FieldName));
range.put_Value2(COleVariant(FieldValue));
//填充数据-------------------------------------------------------
for(int row=1;row<10;++row)
{
//每一行的数据
for(int col=0;col<10;++col)
{
//放置自己的指定数据------------------------------
FieldName.Format("%c%d",'a'+col,(row+1));
FieldValue.Format("(%d,%d)",row+1,col+1);
range=sheet.get_Range(COleVariant(FieldName),COleVariant(FieldName));
// range.put_Value2(COleVariant(FieldValue));
range.put_Formula(_variant_t("=RAND()*100"));
range.put_NumberFormat(_variant_t("00.00"));
//设置隔行颜色
if(row %2==0)
{
font=range.get_Font();
font.put_Bold(COleVariant((short)TRUE));
font.put_Color(COleVariant((long)RGB(255, 0, 0)));
// font.put_Name(COleVariant(_T("黑体")));
}
}//end of col
}//end of row
//设计计算公式,所有excel中的公式都可以使用-------------------------
FieldName="a11";
range=sheet.get_Range(COleVariant(FieldName),COleVariant(FieldName));
range.put_Formula(COleVariant(_T("=sum(a2:a10")));
//自适应列宽度--------------------------------
CRange cols;
cols=range.get_EntireColumn();
cols.AutoFit();
//::Sleep(5000);
//读取内容-----------------------------------------------------
FieldName="a11";
range = sheet.get_Range(COleVariant(FieldName),COleVariant(FieldName));
COleVariant cov = range.get_Value2();
CString str="success";
cov.ChangeType(VT_BSTR);
str=cov.bstrVal;
AfxMessageBox(str);
//------------------------------------------------------------------
//关闭excel文件,根据需要自行决定
books.Close();
app.Quit();
books.ReleaseDispatch();
app.ReleaseDispatch();
}
2.向项目工程中添加基本的7个类(Excel作为OLE/COM库插件,定义好了各类交互的接口,这些接口是跨语言的接口。VC可以通过导入这些接口,并通过接口来对Excel的操作),由于本文只关心对Excel表格中的数据的读取,主要关注7个接_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range、Font0。
VS2012导入OLE/COM组件的接口的步骤为:项目->类向导->添加类->类型库中的MFC类(TypeLib中的MFC类),先选择要导入的组件所在的路径,即Excel.exe所在的路径,然后再选择要导入的Excel类型库中的接口。组件路径一般为C:\Program Files\Microsoft Office\Office15\EXCEL.exe;格式类似。
导入后会在项目中自动导入相关类,使用时需要添加其头文件,主要的头文件有:
#include "CApplication.h"
#include "CWorkbook.h"
#include "CWorkbooks.h"
#include "CWorksheet.h"
#include "CWorksheets.h"
#include "CRange.h"
#include "CFont0.h"
3. 导入之后需要“#import "C:\\Program Files\\Microsoft Office\\Office12\\EXCEL.EXE" no_namespace”注释掉,然后添加头文件:#include <afxdisp.h>到上面7个文件中去。
4.如果有错误error C2059双击error C2059,将VARIANT DialogBox()改成VARIANT _DialogBox() 再次编译,通过!!
void CMFCApplicationWriteExcelDlg::OnBnClickedButton3()
{
/*
1 安装有office2007以上版本的excel
2.向项目工程中添加基本的7个类(Excel作为OLE/COM库插件,定义好了各类交互的接口,
这些接口是跨语言的接口。VC可以通过导入这些接口,并通过接口来对Excel的操作),由
于本文只关心对Excel表格中的数据的读取,主要关注7个接_Application、Workbooks、
_Workbook、Worksheets、_Worksheet、Range、Font0。
VS2012导入OLE/COM组件的接口的步骤为:项目->类向导->添加类->类型库中的MFC类
(TypeLib中的MFC类),先选择要导入的组件所在的路径,即Excel.exe所在的路径,然后再
选择要导入的Excel类型库中的接口。组件路径一般为C:\Program Files\Microsoft Office
\Office15\EXCEL.exe;格式类似。
导入后会在项目中自动导入相关类,使用时需要添加其头文件,主要的头文件有:
#include "CApplication.h"
#include "CWorkbook.h"
#include "CWorkbooks.h"
#include "CWorksheet.h"
#include "CWorksheets.h"
#include "CRange.h"
#include "CFont0.h"
3. 导入之后需要“#import "C:\\Program Files\\Microsoft Office\\Office12\\EXCEL.EXE"
no_namespace”注释掉,然后添加头文件:#include <afxdisp.h>到上面7个文件中去。
4.如果有错误error C2059双击error C2059,将VARIANT DialogBox()改成VARIANT _DialogBox()
再次编译,通过!!
*/
//默认使用第一个sheet
int nSheetNumber=1;
//创建对象
CApplication app;
if( !app.CreateDispatch(_T("Excel.Application")))
{
AfxMessageBox("没有安装office2007以上版本,无法操作excel文件");
return ;
}
//定义其他内部对象
CWorkbooks books;
CWorkbook book;
CWorksheets sheets;
CWorksheet sheet;
CFont0 font;
CRange range;
CString FieldName,FieldValue;
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
books=app.get_Workbooks();
//需要在c盘建立一个excel文件,也可以改成系统自带的excel文件
// book=books.Add(COleVariant("c:\\aa.xlsx"));
book = books.Add(covOptional);
book.put_Title("Mybooks");
sheets=book.get_Sheets();
sheet=sheets.get_Item(COleVariant((short)nSheetNumber));
sheet.put_Name("wxpSheet");
//---------------------
app.put_Visible(TRUE);//可见性
app.put_UserControl(TRUE);//只读
//设置标题
FieldName="a1";
FieldValue="数据A";
range=sheet.get_Range(COleVariant(FieldName),COleVariant(FieldName));
range.put_Value2(COleVariant(FieldValue));
FieldName="B1";
FieldValue="数据B";
range=sheet.get_Range(COleVariant(FieldName),COleVariant(FieldName));
range.put_Value2(COleVariant(FieldValue));
//填充数据-------------------------------------------------------
for(int row=1;row<10;++row)
{
//每一行的数据
for(int col=0;col<10;++col)
{
//放置自己的指定数据------------------------------
FieldName.Format("%c%d",'a'+col,(row+1));
FieldValue.Format("(%d,%d)",row+1,col+1);
range=sheet.get_Range(COleVariant(FieldName),COleVariant(FieldName));
// range.put_Value2(COleVariant(FieldValue));
range.put_Formula(_variant_t("=RAND()*100"));
range.put_NumberFormat(_variant_t("00.00"));
//设置隔行颜色
if(row %2==0)
{
font=range.get_Font();
font.put_Bold(COleVariant((short)TRUE));
font.put_Color(COleVariant((long)RGB(255, 0, 0)));
// font.put_Name(COleVariant(_T("黑体")));
}
}//end of col
}//end of row
//设计计算公式,所有excel中的公式都可以使用-------------------------
FieldName="a11";
range=sheet.get_Range(COleVariant(FieldName),COleVariant(FieldName));
range.put_Formula(COleVariant(_T("=sum(a2:a10")));
//自适应列宽度--------------------------------
CRange cols;
cols=range.get_EntireColumn();
cols.AutoFit();
//::Sleep(5000);
//读取内容-----------------------------------------------------
FieldName="a11";
range = sheet.get_Range(COleVariant(FieldName),COleVariant(FieldName));
COleVariant cov = range.get_Value2();
CString str="success";
cov.ChangeType(VT_BSTR);
str=cov.bstrVal;
AfxMessageBox(str);
//------------------------------------------------------------------
//关闭excel文件,根据需要自行决定
books.Close();
app.Quit();
books.ReleaseDispatch();
app.ReleaseDispatch();
}
相关文章推荐
- VC操作word和excel文件,查询与读写[依赖office环境]
- python操作Excel读写--使用xlrd/xlwt
- VC读写EXCEL
- VC文件读写操作总结
- python操作Excel读写--使用xlrd
- Python 对excel文件(xlsx)的读写操作
- vc知识积累(2.操作Excel数据库)
- VC对EXCEL操作
- python操作Excel读写--使用xlrd
- VC 操作Excel 自适应宽度和高度
- jxl读写excel常见操作搜集整理
- VS2010 MFC 操作Excel(读写)
- vc操作word读写
- python操作Excel读写--使用xlrd
- C#.net实现windows窗体程序对Excel文件的读写操作
- (转)使用VC操作Excel 2003(例程)
- VC 读写Excel (第三方类CSpreadSheet)
- VC文件读写操作总结
- C#对EXCEL的读写操作中链接字符串的讲解(转)
- VC++操作EXCEL内存泄露问题