VC++对话框中使用表格控件的方法
VC中操作Excel方法集锦
1、MSDN 上的代码,很好的例子#include "excel8.h "// OLE Variant for Optional.COleVariant VOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);_Application objApp;_Workbook objBook;Workbooks objBooks;Worksheets objSheets;_Worksheet objSheet;Range objRange;VARIANT ret;// Instantiate Excel and open an existing workbook.objApp.CreateDispatch( "Excel.Application ");objBooks = objApp.GetWorkbooks();objBook = objBooks.Open( "C:\\Test.xls ",VOptional, VOptional, VOptional, VOptional,VOptional, VOptional, VOptional, VOptional,VOptional, VOptional, VOptional, VOptional);objSheets = objBook.GetWorksheets();objSheet = objSheets.GetItem(COleVariant((short)1));//Get the range object for which you wish to retrieve the//data and then retrieve the data (as a variant array, ret).objRange = objSheet.GetRange(COleVariant( "A1 "), COleVariant( "C8 "));ret = objRange.GetValue();//Create the SAFEARRAY from the VARIANT ret.COleSafeArray sa(ret);//Determine the array 's dimensions.long lNumRows;long lNumCols;sa.GetUBound(1, &lNumRows);sa.GetUBound(2, &lNumCols);//Display the elements in the SAFEARRAY.long index[2];VARIANT val;int r, c;TRACE( "Contents of SafeArray\n ");TRACE( "=====================\n\t ");for(c=1;c <=lNumCols;c++){TRACE( "\t\tCol %d ", c);}TRACE( "\n ");for(r=1;r <=lNumRows;r++){TRACE( "Row %d ", r);for(c=1;c <=lNumCols;c++){index[0]=r;index[1]=c;sa.GetElement(index, &val);switch(val.vt){case VT_R8:{TRACE( "\t\t%1.2f ", val.dblVal);break;}case VT_BSTR:{TRACE( "\t\t%s ",(CString)val.bstrVal);break;}case VT_EMPTY:{TRACE( "\t\t <empty> ");break;}}}TRACE( "\n ");}//Close the workbook without saving changes//and quit Microsoft Excel.objBook.Close(COleVariant((short)FALSE), VOptional, VOptional);objApp.Quit();2、不错的一篇文章在VC中彻底玩转Excel作者:龚敏来源:子玉山庄更新:10/8/2004如今Excel是越来越重要了,在我们自己开发的程序中不免要和Excel打交道了。
VC Table控件的用法
VC之TAB控件VC中使用TAB Control控件假如我现在有个SDI程序,View是Form View,想在上面放个Tab Control,包含两个Page。
现在让我们来看看应该怎样处理。
首先当然要增加一个Tab Control资源,然后利用Class Wizard,在View中增加一个Control变量。
接着建立两个对话框资源,别忘了把Style改为Child,Border改为None。
然后就可以在上面加其他控件了。
接着利用Class Wizard,分别为这两个对话框建立两个类,比如CPage1和CPage2。
然后在View类头文件中,加入这两个对话框对象。
同时增加一个变量int m_CurSelTab,用了表明是哪个Page即将被切换。
为了避免用户在切换Tab时,程序对Tab Index的枚举,可以利用数组来做这个事情。
在View的初始化函数中需要把CPage1、CPage2和Tab Control关联起来,并保存页面地址,设置初始页面,等等。
void CTab_testView::OnInitialUpdate(){CFormView::OnInitialUpdate();GetParent()->RecalcLayout();ResizeParentToFit();//为Tab Control增加两个页面m_tab.InsertItem(0, _T("First"));m_tab.InsertItem(1, _T("Second"));//创建两个对话框m_page1.Create(IDD_DIALOG1, &m_tab);m_page2.Create(IDD_DIALOG2, &m_tab);//设定在Tab内显示的范围CRect rc;m_tab.GetClientRect(rc);rc.top += 20;rc.bottom -= 8;rc.left += 8;rc.right -= 8;m_page1.MoveWindow(&rc);m_page2.MoveWindow(&rc);//把对话框对象指针保存起来pDialog[0] = &m_page1;pDialog[1] = &m_page2;//显示初始页面pDialog[0]->ShowWindow(SW_SHOW);pDialog[1]->ShowWindow(SW_HIDE);//保存当前选择m_CurSelTab = 0;}这里面需要注意的是,我用了一个CDialog指针数组来进行保存,数组的大小是Tab Control页面的个数,数组下标对应着每个页面的索引(这样方便快速存取)。
Visual Basic调用Excel之技巧
]Visual Basic调用Excel之技巧Visual Basic(以下简称VB)是一套可视化、面向对象、事件驱动方式的结构化程序设计语言,已经成为许多程序设计者甚至专业程序员用来开发WINDOWS应用程序的首选开发工具。
但用过VB的程序设计人员都知道,要想用VB输出复杂的表格来,是十分困难的。
能不能用VB调用EXCEL呢?Active 技术标准为我们解决了这个问题。
最近笔者为单位开发“土工试验数据整理”的某个模块时,涉及到复杂数据表格的输出问题,经过笔者的摸索,用VB调用EXCEL,取得了很好的效果。
本文从编程实践的角度对使用VB控制EXCEL的技术作简要说明。
1 EXCEL的对象模型如果一个应用程序支持自动化技术,那么其它的应用就可以通过其暴露的对象,对它进行控制,控制程序称为客户机,而被控制的一方就称为服务器,被控制的对象就是Active对象。
VB正是通过EXCEL显露的各级对象来控制EXCEL工作的。
每个对象都有各自的方法和属性,通过方法可以实现对对象的控制,而属性则可以改变对象的各种状态。
理解EXCEL的对象模型是对其编程的基础。
EXCEL是以层次结构组织对象的,其对象模型中含有许多不同的对象元素,这些对象元素就是VB可以操纵的。
在EXCEL对象的层次结构中,最顶层是Application对象,是Excel本身。
从该对象开始往下依次是:.workbooks对象集,是Application对象的下层,其指的是Excel的工作簿文件。
.worksheets对象集,是Workbooks对象集的下层,它表示的是Excel的一个工作表。
.Cells和Range对象,它们是worksheets对象的下层,它则指向Excel工作表中的一个或多个单元格。
以上介绍的四个对象是Excel中最重要也是用得最多的对象,而且从上面的介绍中也不难看出,要控制Excel中的某个具体对象,如某个工作簿中某一表格中的单元格,就必须从Excel层次结构对象的最上层即Application对象开始遍历。
VC++操作EXCEL表格,附带两个小例子
C++读取Excel的XLS文件的方法有很多,但是也许就是因为方法太多,大家在选择的时候会很疑惑。
由于前两天要做导表工具,比较了常用的方法,总结一下写个短文,1.OLE的方式这个大约是最常用的方式,这个方式其实启动了一个EXCEL的进程在背后读写EXCEL 文件,这个方式的最大好处是什么事情都能做。
包括设置EXCEL的格式,增加删除Sheet,读写单元格,等等。
功能几乎是最全的,而且使用起来也不是特别的难。
其基本方法都是使用导出的.h文件进行OLE操作,但是由于OLE的接口说明文档不多,想非常完美的使用她们也不是太容易,好在例子也很多。
网上普遍认为OLE速度慢,EXCEL的OLE读写方式也基本一样。
但是读取速度可以改进,如果在读取的加载整个Sheet的Range的全部数据,而不是一个个单元格读取,那么速度还是相对不错。
想想原理也很简单,整体读取减少了OLE的交互次数。
OLE的写入方式一般只能几个进行比较方便,所以速度可能要快很多。
我自己的亲身体会是,一个EXCEL文件,100多列的字段,如果采用一个个单元格的读取方式,1s大约3条左右的记录,如果整体读取,速度可以提高几十倍。
OLE读写EXCEL方式功能很强大,读取速度还可以,但写入速度不高,当然这个方式不可能移植的,而且你必须安装了EXCEL。
2.Basic EXCEL 方式这是CodeProject上的一个推荐开源工程了,/KB/office/BasicExcel.aspx作者是基于EXCEL的文件格式进行的处理。
但是为什么叫Basic EXCEL呢。
他不支持很多东西,公式,文件格式,表格合并等(有人说中文支持也不好),所以可以认为他只支持最基本的EXCEL表格,我自己的尝试是如果这个EXCEL文件有其他元素(公式,格式等),使用Basic EXCEL读取会失败。
OLE读写EXCEL方式功能比较弱,由于是直接根据文件格式操作,读写速度都不错,你也不需要按照EXCEL,另外这个方式是可以移植的,但是有一些成本,其代码比较晦涩难懂,而且没有注释,另外即使在Windows平台上,告警也很多。
VC操作Excel
VC操作Excel之基本操作/sp_daiyq/article/details/61912331、Excel的对象模型(有人称其为层次结构)打开一个Excel工作表,点击“工具”->“宏”->“Visual Basic 编辑器”选项打开VB的编辑器,打开帮助文档,里面“Microsoft Excel Visual Basic 参考”下的“Microsoft Excel 对象模型”展示了完整的Excel的层次结构,是不是有点类似于MFC的继承图表啊?利用帮助文档我们可以找到一些需要的知识,下面介绍一些类:_Application:表示整个的Excel应用程序,包含一个工作簿集合Workbooks:工作簿集合,包含N个工作簿(Workbook)_Workbook:工作簿,包含一个工作表(sheets)集合Worksheets:工作表集合,包含N个工作表_Worksheet:工作表,也就是我们在Excel中看到的Sheet1、Sheet2、Sheet3,它是我们操作Excel的基本单位Range:这是单元格的集合,我们知道Excel是由一个个的单元格组成的,通过Range 来操作单元格Font:用于设置单元格的字体、颜色、字号、粗体设置Interior:设置底色Boards:设置区域内所有单元格的边框,如果要设置一组区域的外边框的话用Rang->BorderAround设置下面用一个具体的例子来说明怎么通过MFC来操作Excel2、Excel库的插入在我们MFC的工程中,按Ctrl+W打开MFC类向导对话框,点击“Add Class...”->“From a type Library...”,找到你所使用的excel类型库,我使用的在目录C:/ProgramFiles/Microsoft Office/OFFICE11下的“EXCEL.EXE”文件,查找时文件类型选“All Files”,然后添加我们所需要的类,通常以上列举的前6类是必须的,其它的需要时再添加。
VC中MicrosoftFlexGrid控件的使用
VC中Microsoft FlexGrid控件的使用VC中Microsoft FlexGrid控件的使用及合并单元格、可编辑操作1. 给FlexGrid控件绑定成员变量:m_FlexGrid。
2. 设置行列数m_FlexGrid.SetCols(4); //设置列数m_FlexGrid.SetRows(6); //设置行数3. 设置固定行数和固定列数m_FlexGrid.SetFixedRows(1); //设置固定行数为1行m_FlexGrid.SetFixedCols(0); //设置固定列数为0列 4. 设置列宽、行高m_FlexGrid.SetColWidth(1,1500); //设置列号为1的列宽为1500m_FlexGrid.SetRowHeight(2,300); //设置行号为2的行高为300 5. 设置文本对齐方式m_FlexGrid.SetColAlignment(1,4); //设置列号为1的文本对齐方式参数对应描述为:0 单元内容顶部左对齐。
1 单元内容中间左对齐。
对字符串的缺省设置值。
2 单元内容底部左对齐。
3 单元内容顶部居中。
4 单元内容中间居中。
5 单元内容底部居中。
6 单元内容顶部右对齐。
7 单元内容中间右对齐。
对数字的缺省设置值。
8 单元内容底部右对齐。
9 单元内容一般对齐方式。
对字符串中间左对齐而对数值中间右对齐。
6. 设置表头和单元格内容m_FlexGrid.SetTextArray(0,"Head1"); //设置表头(第1列)内容为“Head1”m_FlexGrid.SetTextMatrix(1,1,"Text"); //设置单元格(行号1列号1)内容为“Text” 7. 增加一行m_FlexGrid.AddItem("AddString",(COleVariant)(3L)); //在行号为3的位置增加一行8. 合并单元格for(i=0;i<4;i++)m_FlexGrid.SetTextMatrix(5,i,"合计"); //将行号为5、列号从0到4的单元格内容设为相同“合计”m_FlexGrid.SetMergeCells(2); //设置单元格合并方式(下述)m_FlexGrid.SetMergeRow(5,TRUE); //设置要合并的行SetMergeCells函数的参数值如下:0: flexMergeNever 默认的选项,就是不合并1: flexMergeFree 不规则的合并2: flexMergeRestrictRows 行合并3: flexMergeRestrictColumns 列合并4: flexMergeRestrictBoth 行,列都合并注意只有单元格内容相同时才能进行合并操作。
VC++ 列表控件(CList) 使用方法 (2)
VC++ 列表控件(CList) 使用方法(2)列表控件可以看作是功能增强的ListBox,它提供了四种风格,而且可以同时显示一列的多中属性值。
MFC中使用CListCtrl类来封装列表控件的各种操作。
通过调用BOOL Create( DWORD dwStyle, const RECT&rect, CWnd* pParentWnd, UINT nI D );创建一个窗口,dwStyle中可以使用以下一些列表控件的专用风格:LVS_ICON LVS_SMALLICON LVS_LIST LVS_REPORT 这四种风格决定控件的外观,同时只可以选择其中一种,分别对应:大图标显示,小图标显示,列表显示,详细报表显示LVS_EDITLABELS 结点的显示字符可以被编辑,对于报表风格来讲可编辑的只为第一列。
LVS_SHOWSELALWAYS 在失去焦点时也显示当前选中的结点LVS_SINGLESEL 同时只能选中列表中一项首先你需要设置列表控件所使用的ImageList,如果你使用大图标显示风格,你就需要以如下形式调用:CImageList* SetImageList( CImageList* pImageList, LVSIL_NORMAL);如果使用其它三种风格显示而不想显示图标你可以不进行任何设置,否则需要以如下形式调用:CImageList* SetImageList( CImageList* pImageList, LVSIL_SMALL);通过调用intInsertItem( intnItem, LPCTSTR lpszItem );可以在列表控件中nItem指明位置插入一项,lpszItem为显示字符。
除LVS_REPORT风格外其他三种风格都只需要直接调用InsertItem就可以了,但如果使用报表风格就必须先设置列表控件中的列信息。
通过调用intInsertColumn( intnCol, LPCTSTR lpszColumnHeading, intnFormat , intnWidth, i ntnSubItem);可以插入列。
VC操纵EXCEL的两种方法
VC操纵EXCEL的两种方法第一种方法,简单的,用CDatabase实现. 程序是一个基于对话框的,步骤:A,为了避免代码重复,设置下面几个全局变量(类范围的),要引入头文件<afxdb.h>CDatabase m_db; //数据库CString m_dbdriver; //要生成的EXCEL文件的目录char m_path[MAX_PATH]; //获取路径用的数组CString m_strdir; //包括EXCEL文件名在内的路径名.CString m_strsql; //SQL命令语句,用m_db可直接执行.B,在OnInitDialog方法中,生成一个xls文件,并插入两条记录,可在TRY语句中进行,因为这里面要创建一张表,当再次启动程序时,会有异常发生,说表已经存在了,这时就避免了重复创建和插入.代码如下:m_dbdriver="MICROSOFT EXCEL DRIVER (*.XLS)";GetCurrentDirectory(MAX_PATH,m_path);m_strdir=m_path;m_strdir+="//test.xls"; //上面初始化各个变量.m_strsql.Format("DRIVER={%s};DSN='''';FIRSTROWHASNAMES=1;READO NLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",m_dbdriver,m_strdir,m_strdir); TRY{if (m_db.OpenEx(m_strsql,CDatabase::noOdbcDialog)){m_strsql="Create Table OdbcExl(Name Text,Age Number,Gener Text)";m_db.ExecuteSQL(m_strsql);m_strsql="Insert Into OdbcExl(Name,Age,Gener) Values('Bob',34,'Male')"; m_db.ExecuteSQL(m_strsql);m_strsql="Insert Into OdbcExl(Name,Age,Gener) Values('Jane',23,'Female') ";m_db.ExecuteSQL(m_strsql);m_db.Close();}}CATCH_ALL(e){// e->ReportError();m_db.Close();return FALSE;}END_CATCH_ALL;C,其实上面已经达到了答题人的要求,但作为一个程序,这也太不像话了,于是我又稍微加了点不值一提的东西,在对话框上输入信息,再插入到EXCEL表中去,这一切都在按下"插入"按钮后发生:UpdateData();m_strsql.Format("DRIVER={%s};DSN='''';FIRSTROWHASNAMES=1;REA DONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s", m_dbdriver,m_strdir,m_strdi r);TRY{if (m_db.OpenEx(m_strsql,CDatabase::noOdbcDialog)){m_strsql.Format("Insert into OdbcExl(Name,Age,Gener)Values('%s',%d,'% s')",m_name,m_age,m_gener);m_db.ExecuteSQL(m_strsql);}}CATCH_ALL(e){e->ReportError();// db.Close();}END_CATCH_ALL;m_db.Close();可以说,只要对CDatabase稍有了解,对SQL语句稍有了解,这个问题就很容易解决,如果要说这是一个针对Excel文件操作的方法,那是因为在OpenEx初始化数据库对象(不是"打开"哦)时用的文件后缀名为.xls而已,我们可以像在普通的数据库中一样进行其他操作,如用SELECT语句来读取EXCEL文件的内容等, 第一种方法完.下面是第二种方法,这里涉及的原理要复杂一些了,传说中的OLE(对象链接与嵌入)技术在这里用上了,EXCEL.EXE作为一个组件服务器,应用程序作为客户端......,还是直接写过程吧,头晕晕的,只能平铺直述了.A,从classwizard中add class处from type library,去office的安装目录下引入excel.exe(这是office 2003的选择,其他版本都是用olb文件),服务器就算引入了,这时会弹出对话框,要求加入一些类,这些类都是一些接口,里面有大量的方法,类的对象表征着exc el文件的一个个部分,常用的有这几个_application,workbooks,_workbook,workshee ts,_worksheet,Range,它们分别代表不同的意义._application代表了EXCEL服务器,workbooks表示整个Excel服务器(表现为一个.xls文件)里所有的表,(可以通过"新建"得到多个表,即MDI程序里的一个视窗一样,所有的视窗就是workbooks), _workbook就是一个表,相当于MDI中的一个视窗, worksheets表示所有的表单,每个表都可能有很多表单(建立一个Excel文件之后,打开,可以看到有sheet1,sheet2等,所有这些sheetn就组成了worksheets), _worksheet就表示一个表单, range表示元素的集合. 搞清楚上面这几个名词的意思非常重要.B,在dlg.h中声明下面几个变量:_Application exlapp; //组件服务器的各个classes_Workbook wbk;Workbooks wbks;_Worksheet wht;Worksheets whts;LPDISPATCH lpDisp;并在app.cpp的InitInstance方法中加入下面两句AfxInitOle(); AfxEnableControl Container();C,这里我没有像上面一样完全用程序来生成一个Excel文件,而是在开始时就在当前目录下生成了一个Excel文件,在对话框上我设置了两个按钮,下面是"显示"按钮的代码: //创建Excel服务器if(!exlapp.CreateDispatch("Excel.Application")){AfxMessageBox("无法启动Excel服务器!");return;}COleVariant avar((long)DISP_E_PARAMNOTFOUND,VT_ERROR);exlapp.SetVisible(TRUE);//使Excel可见exlapp.SetUserControl(TRUE);//允许其它用户控制Excel,否则Excel将一闪即逝.//Open an excel filechar path[MAX_PATH];GetCurrentDirectory(MAX_PATH,path);CString strPath = path;strPath += "\\VCOpExcel";wbks.AttachDispatch(exlapp.GetWorkbooks());lpDisp=wbks.Open(strPath,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar);wbks.ReleaseDispatch();exlapp.ReleaseDispatch();D,与上面第一种方法一样,可以插入记录:UpdateData(); //读入数据if (""==m_name) //判断名字输入有效{MessageBox("Please input a right name");return;}if (0>=m_age||100<=m_age) //判断年龄输入有效{MessageBox("Please input a right age");return;}char *p=strupr(_strdup(m_gener));if (strcmp(p,"FEMALE")&&strcmp(p,"MALE")) //判断性别输入有效{MessageBox("Please input a right gener");return;}Range range;Range usedRange;COleVariant avar((long)DISP_E_PARAMNOTFOUND,VT_ERROR);if(!exlapp.CreateDispatch("Excel.Application")) //启动服务器{AfxMessageBox("无法启动Excel服务器!");return;}char path[MAX_PATH];GetCurrentDirectory(MAX_PATH,path);CString strPath = path;strPath += "\\VCOpExcel";wbks.AttachDispatch(exlapp.GetWorkbooks());lpDisp=wbks.Open(strPath, //初始化.avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar); wbk.AttachDispatch(lpDisp);whts.AttachDispatch(wbk.GetWorksheets());lpDisp=wbk.GetActiveSheet();wht.AttachDispatch(lpDisp);usedRange.AttachDispatch(wht.GetUsedRange());range.AttachDispatch(usedRange.GetRows());long iRowNum=range.GetCount();//已经使用的行数range.AttachDispatch(wht.GetCells());range.SetItem(COleVariant(long(iRowNum+1)),COleVariant(long(1)),COleVa riant(m_name));range.SetItem(COleVariant(long(iRowNum+1)),COleVariant(long(2)),COleVa riant(m_age));range.SetItem(COleVariant(long(iRowNum+1)),COleVariant(long(3)),COleVa riant(m_gener));wbk.Save();wbk.Close(avar,COleVariant(strPath),avar);wbks.Close();exlapp.Quit();第二种方法完.。
VC对Excel的操作
VC2010对Excel的操作1.创建新的C++工程创建基于对话框的MFC程序2.添加库、添加Excel类库在工程名上右键,选择“添加”—“类”(或者点击菜单栏的“项目”->“添加类”),选择“TypeLib中的MFC类”(MFC Class From TypeLib)类来源选“注册表”,在可用的类型库中选择“Microsoft Excel 11.0 Object Library<1.5>”在接口列表框中选择需要的类,在此,我们选择_Application,_Workbook,Worksheet,Range,Workbooks,Worksheets这六个就可以了。
可以看到,六个类被添加了进来。
3.修改头文件分别将加进来的六个头文件上面的“#import"C:\\ProgramFiles\\Microsoft Office\\OFFICE11\\EXCEL.EXE"no_namespace”注释掉。
4.添加头文件在stdAfx.h头文件中添加加进来的这几个头文件#include"CApplication.h"#include"CRange.h"#include"CWorkbook.h"#include"CWorkbooks.h"#include"CWorksheet.h"#include"CWorksheets.h"5.修改错误编译,会出现两个错误:…\crange.h(335): warning C4003: “DialogBoxW”宏的实参不足…\crange.h(335): error C2059: 语法错误:“,”双击错误提示,定位在错误行,VARIANT DialogBox(){VARIANT result;InvokeHelper(0xf5, DISPATCH_METHOD, VT_VARIANT, (void*)&result, NULL);return result;}将该函数名“DialogBox()”前面加“_”下划线,即“_DialogBox()”,这样就可以编译成功了。
vc-操作Excel模板步骤_2
最近刚完成一个例子,受益不菲,和大家分享一下。
VC的Excel编程操作,总结:(结合网络资源)利用VC操作Excel的方法至少有两种1 .利用ODBC把Excel文件当成数据库文件,来进行读、写、修改等操作,网上有人编写了CSpreadSheet类,提供支持。
(不太能理解CSpreadSheet)2. 利用Automation(OLD Automation)方法。
将Excel当成组件服务器,利用VBA。
又分为基于MFC的和SDK两种。
(制作报表适用)主要研究了一下第二种基于MFC的OLE编程方法。
一、Excel的对象模型Application:代表应用程序本身。
即Excel应用程序Workbooks:是Workbook 的集合,代表了工作薄。
Worksheets:是Worksheet的集合,是Workbook的子对象。
Range:是Worksheet的子对象,可以理解为Sheet中一定范围的单元格。
Shapes:是Worksheet的子对象,用于存储图片等信息的单元格。
二、VC操作Excel的初始化过程1、导入Excel库文件。
使用VC6.0的同志们可进行一下操作获取Excel库文件:1.启动VC 6.0,打开新建对话框,新建一个MFC AppWizard(exe)工程,这里工程明设置为TestExcel。
2.进入MFC 应用程序向导,选择基本对话框,直接点击完成,工程文件结构如下图:3.打开MFC ClassWizard窗口(查看—>建立类向导),选择Automation,单击Add Class按钮,选择From a type library...,弹出文件选择对话框,之后定位到Microsoft Office 的安装目录(通常为C:\Program Files\Microsoft Office\Office),选择(excel.exe适用于Excel2003;EXCEL9.OLB适用于Excel2000),确定后,弹出Confirm Classes 窗口,(在不知道会使用到哪些类的情况下,)选择列表中的所有类,单击OK按钮。
轻轻松松搞定VC操作Excel之一
轻轻松松搞定VC操作Excel之⼀时常在论坛上看到有⼈问这个VC操作Word或者Excel有没有书系统地介绍如何去做,有这个必要吗?其实捅破这层窗户纸,你就会恍然⼤悟,原来是这么回事啊!在此我觉得有必要把我⼯作中操纵Excel的⼀点⼩体会拿出来和⼤家共享,也许对初学者能有所帮助,⾼⼿就不要看了。
操作Word请看⽜⼈yingkou的BLOG() .基本步骤如下:⼀、Excel的层次结构ApplicationWorkbooksWorkbook......WorksheetsWorksheet......RangeFontBorders.............⼆、插⼊类型库1、在⼀个已有的MFC⼯程按Ctrl + W 弹出ClassWizard对话框。
2、Add Class...\From a type Library... 在 Office ⽬录中,找到你想使⽤的Excel类型库(Offce2000下,此⽬录在C:\ProgramFiles\Microsoft Office\Office\EXCEL9.OLB)。
选择EXCEL9.OLB此类型⽂件。
3、在弹出的对话框中选择要添加的类,具体选那些类要根据实际情况⽽定。
当然你也可以全选。
三、基本操作当你要选⽤Excel⽣成报表时,表的结构可能有固定的部分,这时做⼀个模板,这样可以减少编码的负担。
加载Excel模板的代码如下。
_Application ExcelApp; // 定义Excel应⽤程序Workbooks wbsBooks;_Workbook wbBook;Worksheets wssSheets;_Worksheet wsSheet;Range rngXls;FontXls font; // 字体BordersXls border; // 边框// 初始化Comif (::CoInitialize( NULL ) == E_INVALIDARG){AfxMessageBox(_T("初始化Com失败!"));}// 创建Excel2000服务器(启动Excel)if ( !ExcelApp.CreateDispatch(_T("Excel.Application"), NULL)){AfxMessageBox(_T("创建Excel2000服务失败!"));::CoUninitialize();}ExcelApp.SetVisible(FALSE); // 隐藏CString strPath;strPath += "C:\\template.xlt"; // 模板的路径CFileFind filefind;if( !filefind.FindFile( strPath ) ){AfxMessageBox( "没有找到模版⽂档,请其查找" );CFileDialog dlg (TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"模版||*.xlt||",NULL );if (IDOK == dlg.DoModal()){strPath = dlg.GetPathName();}}COleVariant vOptional( (long)DISP_E_PARAMNOTFOUND, VT_ERROR );try{wbsBooks.AttachDispatch(ExcelApp.GetWorkbooks(), TRUE);wbBook.AttachDispatch(wbsBooks.Add(COleVariant(strPath)), TRUE );wssSheets = wbBook.GetWorksheets();wsSheet = wssSheets.GetItem(_variant_t("Sheet1")); // Get Sheet1wsSheet.SetName( "Your Sheet" ); // 改名// 得到全部Cells,此时,rngXls 是cells的集合rngXls = wsSheetAcc.GetCells();}catch (CException e){AfxMessageBox( "" )}我们知道在Excel中每个单元格可以⽤A1,A2,C3的形式来表⽰。
visual C++6.0 操作excel
使用MFC操作EXCEL文件环境是:win7+vc++6.0+excel2010一、加载1、在VC6.0里创建一个采访对话框的MFC工程,工程名为“TestExcel”,在对话框面板上创建一个OnButoon1按钮。
类视图文件视图2、打开MFCClassWizard窗口(查看—>建立类向导),选择Automation,单击AddClass 按钮,选择Froma type library...,弹出文件选择对话框,之后定位到C:\ProgramFiles\MicrosoftOffice(86)\OFFICE14\EXCEL.EXE,在生成类中添加所有的对象(其实添加需要的即可,为了简便,不出错保留了冗余),如下图。
2.选类视图中的CTestExcel类,双击OnButton1(),在编辑框出现void CTestExcelDlg::OnButton1()函数,在其中加入如下代码:void CTestExcelDlg::OnButton1(){//Workbooks->Workbook ->Worksheets->Worksheet ->Range_Application app; //Excel应用程序接口Workbooks books; //工作薄集合_Workbook book; //工作薄Worksheets sheets; //工作表集合_Worksheet sheet; //工作表Range range; //Excel中针对单元格的操作都应先获取其对应的Range对象Font font;Range cols;//COleVariant类为VARIANT数据类型的包装,在自动化程序中,通常都使用//VARIANT数据类型进行参数传递。
故下列程序中,函数参数都是通过COleVariant类来转换了的。
//covOptional 可选参数的VARIANT类型COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);if( !app.CreateDispatch("Excel.Application") ){this->MessageBox("无法创建Excel应用!");return;}//获取工作薄集合books=app.GetWorkbooks();//添加一个工作薄book=books.Add(covOptional);//获取工作表集合sheets=book.GetSheets();//获取第一个工作表sheet=sheets.GetItem(COleVariant((short)1));//选择工作表中A1:A1单元格区域range=sheet.GetRange(COleVariant("A1"),COleVariant("A1"));//设置A1=HELLO EXCEL!"//range.SetValue(COleVariant("HELLO EXCEL!")); //编译有错,注释掉//调整格式,设置粗体font=range.GetFont();font.SetBold(COleVariant((short)TRUE));//选择A2单元格,插入一个公式"=RAND()*100000",并设置A2数字格式为货币形式range=sheet.GetRange(COleVariant("A2"),COleVariant("A2"));range.SetFormula(COleVariant("=RAND()*100000"));range.SetNumberFormat(COleVariant("$0.00"));//选择A:A列,设置宽度为自动适应cols=range.GetEntireColumn();cols.AutoFit();//显示Excel表格,并设置状态为用户可控制app.SetVisible(TRUE);app.SetUserControl(TRUE);}3.在TestExcelDlg.cpp文件的开始处,加一行#include <excel.h>4.按Button按钮,出现一个Excel工作簿,可以在其中输入内容5.当关闭文件时,弹出如下对话框6.选择保存。
vc操作excel
一、vc 读取excel的简易流程 (2)二、关于日期类型格式的问题 (5)三、参考资料 (6)一、vc 读取excel的简易流程1.在VC6.0 中建立一个基于对话框的工程。
2.在此工程的view菜单下-classwizad-autometion中点击add class-from a type library,选择execl.exe(office2007版本对应安装目录下的Office12文件夹;office2003对应Office11文件夹)。
3.从列表选择_Application/_Workbook/_WorkSheet/Range/Workbooks/Worksheets6项(可根据需要添加自己需要的类,比如经常用到的字体、单元格式等类),工程目录下会加入excel.cpp和excel.h(亦可根据需要进行类名的编辑)。
4.在你的某个。
h文件中添加excel相关变量,也可以直接在函数里定义:_Application ExcelApp; //Excell 表格操作所需要的变量Workbooks wbsMybooks;_Workbook wbMyBook;Worksheets wssMySheets;_Worksheet wsMySheet;Range MyRange;5.为你的某个按钮单击事件添加如下代码:void CExceltestDlg::OnOK(){CoUninitialize();if(CoInitialize(NULL) != 0){AfxMessageBox("初始化COM支持库失败!");}//启动Excellif(!ExcelApp.CreateDispatch("Excel.Application",NULL)){AfxMessageBox("创建Excell服务失败!");exit(1);}ExcelApp.SetVisible(FALSE);//利用模板文件建立新文档CString strPath;CString strPath1;GetCurrentDirectory(MAX_PATH,strPath.GetBuffer(MAX_PATH));//获取当前路径strPath1.Format("%s//11.xls",strPath);//要操作的excel表的名字wbsMybooks.AttachDispatch(ExcelApp.GetWorkbooks(),TRUE);wbMyBook.AttachDispatch(wbsMybooks.Add(_variant_t(strPath1)));wssMySheets.AttachDispatch(wbMyBook.GetWorksheets(),true);wsMySheet.AttachDispatch(wssMySheets.GetItem(_variant_t("sheet1")),TRUE);MyRange.AttachDispatch(wsMySheet.GetCells(),true);int row = 2;CString sMsg;ExcelToString(row, 1, sMsg); //读取row行1列的数据至sMsg中CDialog::OnOK();}void CExceltestDlg::ExcelToString(int row, int col, CString& sMsg){VARIANT vMsg;char cMsg[512];vMsg = MyRange.GetItem(_variant_t((long)row),_variant_t((long)col));_bstr_t bMsg = (_bstr_t)vMsg;strcpy(cMsg,bMsg);sMsg = cMsg;}6.其他操作// 向单元格中添加公式range = sheet.GetRange(COleVariant("D2"), covOptional); // 获得D2 Rangerange = range.GetResize(COleVariant((long)NUMROWS), COleVariant((long)1)); // 重新设置D2的大小range.SetFormula(COleVariant("=C2*0.07")); // 给D2:D21设置公式// 设置单元格的格式range = sheet.GetRange(COleVariant("A1"), COleVariant("D1")); // 获得A1:D1的Range oFont=range.GetFont(); // 获得Range的字体oFont.SetBold(COleVariant((short)TRUE)); // 设置是否粗体oFont.SetColor(COleVariant((long)RGB(255, 0, 0))); // 设置字体颜色oFont.SetName(COleVariant("黑体")); // 设置字体类型range=range.GetEntireColumn(); // 获得全部的单元格range.AutoFit(); // 自动适合尺寸//合并单元格// 思路:1.先获取A1:C1的Range范围,然后重新定义此范围,最后合并// 2.直接获得A1:C2的Range范围,直接合并。
VC2010对Excel的操作
VC2010对Excel的操作1.创建新的C++工程创建基于对话框的MFC程序2.添加库、添加Excel类库在工程名上右键,选择“添加”—“类”(或者点击菜单栏的“项目”->“添加类”),选择“TypeLib中的MFC类”(MFC Class From TypeLib)类来源选“注册表”,在可用的类型库中选择“Microsoft Excel 11.0 Object Library<1.5>”在接口列表框中选择需要的类,在此,我们选择_Application,_Workbook,Worksheet,Range,Workbooks,Worksheets这六个就可以了。
可以看到,六个类被添加了进来。
3.修改头文件分别将加进来的六个头文件上面的“#import"C:\\ProgramFiles\\Microsoft Office\\OFFICE11\\EXCEL.EXE" no_namespace”注释掉。
4.添加头文件在stdAfx.h头文件中添加加进来的这几个头文件#include"CApplication.h"#include"CRange.h"#include"C Workbook.h"#include"C Workbooks.h"#include"C Worksheet.h"#include"C Worksheets.h"5.修改错误编译,会出现两个错误:…\crange.h(335): warning C4003: “DialogBoxW”宏的实参不足…\crange.h(335): error C2059: 语法错误:“,”双击错误提示,定位在错误行,VARIANT DialogBox(){VARIANT result;InvokeHelper(0xf5, DISPATCH_METHOD, VT_VARIANT, (void*)&result, NULL);return result;}将该函数名“DialogBox()”前面加“_”下划线,即“_DialogBox()”,这样就可以编译成功了。
VC中Microsoft FlexGrid控件的使用.
VC中Microsoft FlexGrid控件的使用及合并单元格、可编辑操作1.给FlexGrid控件绑定成员变量:m_FlexGrid。
2. 设置行列数m_FlexGrid.SetCols(4; //设置列数m_FlexGrid.SetRows(6; //设置行数3. 设置固定行数和固定列数m_FlexGrid.SetFixedRows(1; //设置固定行数为1行m_FlexGrid.SetFixedCols(0; //设置固定列数为0列4. 设置列宽、行高m_FlexGrid.SetColWidth(1,1500; //设置列号为1的列宽为1500 m_FlexGrid.SetRowHeight(2,300; //设置行号为2的行高为300 5. 设置文本对齐方式m_FlexGrid.SetColAlignment(1,4; //设置列号为1的文本对齐方式参数对应描述为:0 单元内容顶部左对齐。
1 单元内容中间左对齐。
对字符串的缺省设置值。
2 单元内容底部左对齐。
3 单元内容顶部居中。
4 单元内容中间居中。
5 单元内容底部居中。
6 单元内容顶部右对齐。
7 单元内容中间右对齐。
对数字的缺省设置值。
8 单元内容底部右对齐。
9 单元内容一般对齐方式。
对字符串中间左对齐而对数值中间右对齐。
6. 设置表头和单元格内容m_FlexGrid.SetTextArray(0,"Head1"; //设置表头(第1列内容为“Head1”m_FlexGrid.SetTextMatrix(1,1,"Text"; //设置单元格(行号1列号1内容为“Text”7. 增加一行m_FlexGrid.AddItem("AddString",(COleVariant(3L; //在行号为3的位置增加一行8. 合并单元格for(i=0;i<4;i++m_FlexGrid.SetTextMatrix(5,i,"合计"; //将行号为5、列号从0到4的单元格内容设为相同“合计”m_FlexGrid.SetMergeCells(2; //设置单元格合并方式(下述m_FlexGrid.SetMergeRow(5,TRUE; //设置要合并的行SetMergeCells函数的参数值如下:0: flexMergeNever 默认的选项,就是不合并1: flexMergeFree 不规则的合并2: flexMergeRestrictRows 行合并3: flexMergeRestrictColumns 列合并4: flexMergeRestrictBoth 行,列都合并注意只有单元格内容相同时才能进行合并操作。
VC++对话框中使用表格控件的方法
在对话框中使用表格控件的方法:将该控件改成“report”类型,方法如下。
首先打开该控件的属性,将其设置为“Report”类型,如下图所示。
改完后变为如下形式,是变成了一个列表框。
下面说一下如何通过代码向控件中填加内容,主要是设置表头,然后加入内容,至少有两种方法可以进行信息的加入,下面仅介绍一种。
首先向与对话框对应的类中加入一个与ListControl控件对应的成员函数。
填加方法如下:运行“ClassWizard”定义一个类的ListCtrl控件成员,填加界面如下,其中IDC_LIST1是上面填加的表格控件的ID 。
选中“Member Variables”标签,点击“Add Variable”出现如下对话框,添加变量名,添加后,就会在与对话框对应的类中加如m_List变量,类型为CListCtrl。
在程序中加入如下代码,实现在表格中显示信息:m_List.InsertColumn(0,"Col 1",LVCFMT_LEFT,80,0); //设置列m_List.InsertColumn(1,"Col 2",LVCFMT_LEFT,80,1);m_List.InsertColumn(2,"Col 3",LVCFMT_LEFT,80,2);m_List.InsertItem(0,"Item 1_1"); //插入行m_List.SetItemText(0,1,"Item 1_2"); //设置该行的不同列的显示字符m_List.SetItemText(0,2,"Item 1_3");运行上面几行代码后的效果如下图所示。
vs控件使用方法
vs控件使用方法
首先,需要在Visual Studio中安装所需的控件。
在“工具”菜单下选择“扩展和更新”,然后在“Visual Studio Marketplace”中搜索需要的控件,并安装。
2. 导入控件
在Visual Studio中,打开工具箱并选择所需控件。
右键单击工具箱并选择“选择项”,然后单击“COM组件”选项卡。
在这里,可以选择已安装的控件并将其添加到工具箱中。
3. 设置控件属性
在工具箱中选择控件后,可以在属性窗口中设置其属性。
这包括大小、位置、颜色和字体等。
4. 编写代码
在使用控件时,需要编写代码以处理与其交互的事件。
例如,单击按钮控件时会触发其“单击”事件,可以在代码中编写相应的处理程序来执行所需的操作。
5. 保存和调试
在完成控件的设置和代码编写后,可以保存并调试应用程序。
在调试期间,可以使用调试器来检查代码并解决任何错误。
完成后,可以将应用程序部署到生产环境中。
- 1 -。
vc使用wps表格
vc使用wps表格竭诚为您提供优质文档/双击可除vc使用wps表格篇一:常用wps表格功能(1)1.打开表格。
双击桌面图标,然后点击或者在左上角wps表格的下拉菜单中依次做如下选择新建一个表格如下:2.文字居中功能。
在格子中各行各列输入需要的内容,比如输入以下内容:输入完成后,首先选中文字,然后点击下面图片中红圈圈里的图标。
对应的,居中的旁边图标分别是左对齐和右对齐。
3.表格加框功能。
接下来是将文字内容加框,比较美观,同样也是选中文字,在一下红圈圈图标里选择下拉菜单,选择你想要的框线型,这里的例子是都加框。
居中和加框完成后的样子如下图:4.表格的行高列宽设置功能。
表格可以选择改变行列的高度和宽度,选中一行或者要改变行高的所有行,然后方法一:鼠标右键选择行高在这个窗口里直接输入行高行高。
就会改变、方法二:也是先选中行,然后点击界面右上角图标行和列,如下图然后输入想要的行高和列宽即可。
5.求和功能。
我们可以对表格里每一行每一列的数字进行求和;选中要求和的整行或者整列,然后选择自动求和。
不但可以求和,还可以求平均数等等。
求和后的样子:然后可以在求和后加框,加框可以参考第4点。
6.保存功能。
完成后如果要保存就点击左上方图标,或者选择左上角wps表格的下拉三角号,选择文件,继续选择保存,然后在弹出的窗口进行命名并且选择你要存放的位置即可。
篇二:wps表格常用函数应用教程(经典版)wps表格常用函数应用教程一、函数应用基础(一)函数和公式1.什么是函数wps表格函数即是预先定义,执行计算、分析等处理数据任务的特殊公式。
以常用的求和函数sum为例,它的语法是“sum(数值1,数值2,......)”。
其中“sum”称为函数名称,一个函数只有唯一的一个名称,它决定了函数的功能和用途。
函数名称后紧跟左括号,接着是用逗号分隔的称为参数的内容,最后用一个右括号表示函数结束。
参数是函数中最复杂的组成部分,它规定了函数的运算对象、顺序或结构等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在对话框中使用表格控件的方法:
将该控件改成“report”类型,方法如下。
首先打开该控件的属性,将其设置为“Report”类型,如下图所示。
改完后变为如下形式,是变成了一个列表框。
下面说一下如何通过代码向控件中填加内容,主要是设置表头,然后加入内容,至少有两种方法可以进行信息的加入,下面仅介绍一种。
首先向与对话框对应的类中加入一个与ListControl控件对应的成员函数。
填加方法如下:
运行“ClassWizard”定义一个类的ListCtrl控件成员,填加界面如下,其中IDC_LIST1是上面填加的表格控件的ID 。
选中“Member Variables”标签,点击“Add Variable”出现如下对话框,添加变量名,添加后,就会在与对话框对应的类中加如m_List变量,类型为CListCtrl。
在程序中加入如下代码,实现在表格中显示信息:
m_List.InsertColumn(0,"Col 1",LVCFMT_LEFT,80,0); //设置列
m_List.InsertColumn(1,"Col 2",LVCFMT_LEFT,80,1);
m_List.InsertColumn(2,"Col 3",LVCFMT_LEFT,80,2);
m_List.InsertItem(0,"Item 1_1"); //插入行
m_List.SetItemText(0,1,"Item 1_2"); //设置该行的不同列的显示字符m_List.SetItemText(0,2,"Item 1_3");
运行上面几行代码后的效果如下图所示。