当前位置:文档之家› 在VC中彻底玩转Excel

在VC中彻底玩转Excel

在VC中彻底玩转Excel
在VC中彻底玩转Excel

[原创]在VC中彻底玩转Excel

如今Excel是越来越重要了,在我们自己开发的程序中不免要和Excel打交道了。利用Automation技术,我们可以在不去了解数据库的情况下玩转Excel,而且你会发现一切竟如此轻松!好了,咱们开始吧,我不喜欢用长篇累牍的代码来故弄玄虚,所以下面的代码都是切中要害的片段,总体上是个连贯的过程,包括启动Excel,读取数据,写入数据,以及最后的关闭Excel,其中还包括了很多人感兴趣的合并单元格的处理。

特别说明以下代码需要MFC的支持,而且工程中还要包含EXCEL2000的定义文件:EXCEL9.H,EXCEL9.CPP

VC6.0操作Excel ( 2008-1-22 11:26 )

1.建立一个空的单文档程序;

2.加入Excel的库文件:

在vc++的view菜单里面选classwizard,然后选Automation tab,再选Add Class,选"From a type library." ,然后再选你需要的object library。

(for this example, if you are automating Excel 97, choose the Microsoft Excel 8.0 Object Library; the default location is C:\Program Files\Microsoft Office\Office\Excel8.olb).

If you are automating Microsoft Excel 2000, choose Microsoft Excel 9.0 Object Library for which the default location is the C:\Program Files\Microsoft Office\Office\Excel9.olb.

If you are automating Microsoft Excel 2002 and Microsoft Office Excel 2003, the object library is embedded in the file Excel.exe. The default location for Excel.exe in Office 2002 is C:\program Files\Microsoft

Office\Office10\Excel.exe. The default location for Excel.exe in Office 2003 is C:\program Files\Microsoft Office\Office11\Excel.exe.

在ListCtrl框中选中_Application, _Workbook, _Worksheet, Range, Sheets, Workbooks,单击OK, 自动生成EXCEL8.H 和EXCEL8.CPP文件(或者EXCEL9.H 和EXCEL9.CPP或者EXCEL.H 和EXCEL.CPP)。

3.初始化COM库:

在App类的InitInstance中一定要先加上AfxOleInit();因为操作Excel是属于COM自动化,需初始化COM库。

4.加入Excel的头文件:

文档类的CPP文件中包含头文件#include "excel9.h",是关于Excel中各类的接口定义信息。

如果excel9.h, excel9.cpp文件已经生成

创建project, 将示例文档中的excel9.h, excel9.cpp

复制到工程目录,选

Project-->Add to project-->File-->excel9.h;

Project-->Add to project-->File-->excel9.cpp;

在App 的Initinstance 中加入AfxOleInit();

在Dlg 的头文件中加入#include "excel9.h"

代码中加入调用COM接口代码,编译即可,

*******************************************************************************

**********************************

//*****

//变量定义

_Application app;

Workbooks books;

_Workbook book;

Worksheets sheets;

_Worksheet sheet;

Range range;

Range iCell;

LPDISPATCH lpDisp;

COleVariant vResult;

COleVariant

covTrue((short)TRUE),

covFalse((short)FALSE),

covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

//*****

//初始化COM的动态连接库

if(!AfxOleInit())

{

AfxMessageBox("无法初始化COM的动态连接库!");

return ;

}

//*****

//创建Excel 2000服务器(启动Excel)

if(!app.CreateDispatch("Excel.Application"))

{

AfxMessageBox("无法启动Excel服务器!");

return;

}

app.SetVisible(TRUE); //使Excel可见

app.SetUserControl(TRUE); //允许其它用户控制Excel

//*****

//打开c:\\1.xls

books.AttachDispatch(app.GetWorkbooks());

lpDisp = books.Open("C:\\\\1.xls",

covOptional, covOptional, covOptional, covOptional, covOptional,

covOptional, covOptional, covOptional, covOptional, covOptional,

covOptional, covOptional );

//*****

//得到Workbook

book.AttachDispatch(lpDisp);

//*****

//得到Worksheets

sheets.AttachDispatch(book.GetWorksheets());

//*****

//得到当前活跃sheet

//如果有单元格正处于编辑状态中,此操作不能返回,会一直等待

lpDisp=book.GetActiveSheet();

sheet.AttachDispatch(lpDisp);

//*****

//读取已经使用区域的信息,包括已经使用的行数、列数、起始行、起始列

Range usedRange;

usedRange.AttachDispatch(sheet.GetUsedRange());

range.AttachDispatch(usedRange.GetRows());

long iRowNum=range.GetCount(); //已经使用的行数

range.AttachDispatch(usedRange.GetColumns());

long iColNum=range.GetCount(); //已经使用的列数

long iStartRow=usedRange.GetRow(); //已使用区域的起始行,从1开始long iStartCol=usedRange.GetColumn(); //已使用区域的起始列,从1开始

//*****

//读取第一个单元格的值

range.AttachDispatch(sheet.GetCells());

range.AttachDispatch(range.GetItem (COleVariant((long)1),COleVariant((long)1)).pdispVal ); COleVariant vResult =range.GetV alue();

CString str;

if(vResult.vt == VT_BSTR) //字符串

{

}

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

{

str.Format("%f",vResult.dblVal);

}

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

{

SYSTEMTIME st;

VariantTimeToSystemTime(&vResult.date, &st);

}

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

{

str="";

}

//*****

//读取第一个单元格的对齐方式,数据类型:VT_I4

//读取水平对齐方式

range.AttachDispatch(sheet.GetCells());

iCell.AttachDispatch((range.GetItem (COleVariant(long(1)), COleVariant(long(1)))).pdispVal); vResult.lVal=0;

vResult=iCell.GetHorizontalAlignment();

if(vResult.lVal!=0)

{

switch (vResult.lVal)

{

case 1: //默认

break;

case -4108: //居中

break;

case -4131 : //靠左

break;

case -4152 : //靠右

break;

}

}

//垂直对齐方式

iCell.AttachDispatch((range.GetItem (COleVariant(long(1)), COleVariant(long(1)))).pdispVal); vResult.lVal=0;

vResult=iCell.GetVerticalAlignment();

{

switch (vResult.lVal)

{

case -4160 : //靠上

break;

case -4108 : //居中

break;

case -4107 : //靠下

break;

}

}

//*****

//设置第一个单元格的值"HI,EXCEL!"

range.SetItem(COleVariant(1),COleVariant(1),COleVariant("HI,EXCEL!"));

//*****

//设置第一个单元格字体颜色:红色

Font font;

range.AttachDispatch(sheet.GetCells());

range.AttachDispatch((range.GetItem (COleVariant(long(1)), COleVariant(long(1)))).pdispVal); font.SetColor(COleVariant((long)0xFF0000));

//*****

//合并单元格的处理

//包括判断第一个单元格是否为合并单元格,以及将第一个单元格进行合并

Range unionRange;

range.AttachDispatch(sheet.GetCells());

unionRange.AttachDispatch(range.GetItem

(COleVariant((long)1),COleVariant((long)1)).pdispVal );

vResult=unionRange.GetMergeCells();

if(vResult.boolVal==-1) //是合并的单元格

{

//合并单元格的行数

range.AttachDispatch (unionRange.GetRows ());

long iUnionRowNum=range.GetCount ();

//合并单元格的列数

range.AttachDispatch (unionRange.GetColumns ());

long iUnionColumnNum=range.GetCount ();

//合并区域的起始行,列

long iUnionStartRow=unionRange.GetRow(); //起始行,从1开始

long iUnionStartCol=unionRange.GetColumn(); //起始列,从1开始

}

else if(vResult.boolVal==0)

{//不是合并的单元格}

//将第一个单元格合并成2行,3列

range.AttachDispatch(sheet.GetCells());

unionRange.AttachDispatch(range.GetItem

(COleVariant((long)1),COleVariant((long)1)).pdispVal );

unionRange.AttachDispatch(unionRange.GetResize(COleVariant((long)2),COleVariant((long)3))) ;

unionRange.Merge(COleV ariant((long)0)); //合并单元格

//*****

//将文件保存为2.xls

book.SaveAs(COleVariant("C:\\\\2.xls"),covOptional,covOptional, \\

covOptional,covOptional,covOptional,0,\\

covOptional,covOptional,covOptional,covOptional);

//*****

//关闭所有的book,退出Excel

book.Close (covOptional,COleVariant(OutFilename),covOptional);

books.Close();

app.Quit();

关于excel.h和excel.cpp,要注意版本问题.

比如对excel xp, 类库是直接包含在excel.exe中. 因此你只要用加入类(add class)的方法,直接选中excel.exe,并选择对话框中的常用的几个类(如Rang)就可以编程了. 千万不要选所有的类,否则太大了.

作者:unionsoft 2003-11-29 11:00:34)

修改字体颜色的那段漏了一句,应为:

//*****

//设置第一个单元格字体颜色:红色

Font font;

range.AttachDispatch(sheet.GetCells());

range.AttachDispatch((range.GetItem (COleVariant(long(1)), COleVariant(long(1)))).pdispVal); font.AttachDispatch (range.GetFont ());

font.SetColor(COleVariant((long)0xFF0000));

作者:zhengkuo 2003-12-2 10:50:00)

如果,程序既要安装在2000的计算机上,也可能安装在XP的机子上,有的用户还用97,(指的都是office),可能会出现版本问题------其中比较麻烦的是--在app.quit()后,仍旧存在excel进程,如果这样?怎么解决?

作者:zhengkuo 2003-12-2 10:51:50)

请教高手,能否用vb控制excel做成dll,在arx中进行调用,因为毕竟vb与excel亲切

作者:unionsoft 2004-1-30 11:06:58)

以下是引用zhengkuo在2003-12-2 10:50:00的发言:

如果,程序既要安装在2000的计算机上,也可能安装在XP的机子上,有的用户还用97,(指的都是office),可能会出现版本问题------其中比较麻烦的是--在app.quit()后,仍旧存在excel进程,如果这样?怎么解决?

兼容性问题:

office2002-office97是向下兼容的,只要你不使用office2002中的新特性,程序在这些office版本中都好用

Excel程序不能退出的问题:

1 . 不要使用#import导入类型库,如:#import "c:\\excel\\excel.olb"

2 . 程序结束时,确保所有IDispatch都释放了,如:app.ReleaseDispatch ();

作者:easypower 2004-5-14 10:00:39)

還是不明白如何得到excel.cpp和excel.h這兩個文件,請指教

作者:jack1975 2004-6-24 16:43:03)

有版本问题时,可以加一个判断:1、首先通过exlApp得到版本,比如9.0,10.0,11.0,10.0以后的版本注意open函数的参数为15个,即最后在增加两个covOptional,即可,另外,补充一下,判断当前是否有excel应用程序在运行,使之更舒服一些:

::CLSIDFromProgID(L"Excel.Application",&clsid); // from registry

if(::GetActiveObject(clsid, NULL,&pUnk) == S_OK)

{

VERIFY(pUnk->QueryInterface(IID_IDispatch,(void**) &pDisp) == S_OK);

ExcelApp.AttachDispatch(pDisp);

pUnk->Release();

}

else

{

if(!ExcelApp.CreateDispatch("Excel.Application")) {

AfxMessageBox("Excel program not found");

return 0;

}

}

作者:unionsoft 2004-12-13 12:36:09)

以下是引用zhmary在2004-12-10 11:30:10的发言:

请问各位高手,从哪里得onclick=Cswf() height=22 alt=Flash图片src="skins/default/ubb/swf.gif" width=23 border=0>到Excel.cp...

Excel.cpp和Excel.h是从Excel的类型库中获取的,类型库类似C++中的头文件,包括接口,方法,属性的定义;类型库在Excel的安装目录可以找到,Excel的版本不同,这个类型库也不一样,如下所示:

Excel 95 and prior : xl5en32.olb

Excel 97 : excel8.olb

Excel 2000 : excel9.olb

Excel 2002 : excel.exe

具体的获取方法:

1 . 使用VC++新建立一个基于MFC的EXE工程

2 . 点击菜单"查看"-->"建立类向导",此时会弹全"MFC ClassWizard"对话框

3 . 点击"Add Class"-->"From a type libray",指定Excel的type libray,在Excel的安装目录下

可以找到,如:"D:\\Microsoft Office\\Office\\EXCEL9.OLB"

4 . 在弹出的对话框中选择所需的类,按"确定",Excel.cpp和Excel.h就产生了。

作者:yfy2003 2004-12-23 17:41:57)

lpDisp = books.Open("C:\\\\1.xls",

covOptional, covOptional, covOptional, covOptional, covOptional,

covOptional, covOptional, covOptional, covOptional, covOptional,

covOptional, covOptional );

编译显示错误:

error C2660: 'Open' : function does not take 13 parameters

作者:xux4618 2005-4-6 8:48:51)

请问怎样才能增加一个工作表?

作者:梦幻神话2005-4-6 15:50:40)

Workbooks.AttachDispatch(ExcelApp.GetWorkbooks());

Workbook.AttachDispatch(Workbooks.Open(FileName,covOptional, covOptional,covOptional, covOptional,covOptional, covOptional,covOptional, covOptional,covOptional, covOptional,covOptional, covOptional));

Worksheets.AttachDispatch(Workbook.GetWorksheets());

Worksheet.AttachDispatch(Worksheets.GetItem((COleV ariant((long)1))));

Range.AttachDispatch(Worksheet.GetCells());

iCell.AttachDispatch(Range.GetItem(COleVariant((long)2),COleVariant((long)2)).pdispVal); vResult = iCell.GetMergeCells();

if(vResult.boolVal == -1)

{

AfxMessageBox("Yes");

Range.AttachDispatch(iCell.GetRows());

long row_num = Range.GetCount();

Range.AttachDispatch(iCell.GetColumns());

long col_num = Range.GetCount();

CString str;

str.Format("%d×%d",row_num,col_num);

AfxMessageBox(str);

}

请教:为什么str得到的结果都是1×1?(求合并单元格的原始行数和列数)。

谢谢。。。。。。。。。。

作者:unionsoft 2005-4-9 10:13:25)

首先你的Cells(2,2)是否处于合并单元格中

其次,你缺少了个关键语句:iCell.GetMergeArea()),你可以参考下面的语句

Range UnionRange;

UnionRange.AttachDispatch(iCell.GetMergeArea()); //先要获取合并区域

range.AttachDispatch (UnionRange.GetRows ());

long iRowNum = range.GetCount(); //合并单元格行数

range.AttachDispatch (UnionRange.GetColumns ());

long iColNum = Range.GetCount(); //合并单元格列数

我就想在excel里实现,第一行为标题(居中)

第二行为时间(左对齐),下面为9列数据.最后一行为签名(左对齐)

怎么办? 回复更多评论

# re: [转]在VC中彻底玩转Excel

2006-11-26 17:24 | 好学者

修改字体颜色的那段漏了一句,应为:

//*****

//设置第一个单元格字体颜色:红色

Font font;

range.AttachDispatch(sheet.GetCells());

range.AttachDispatch((range.GetItem (COleVariant(long(1)), COleVariant(long(1)))).pdispVal); font.AttachDispatch (range.GetFont ());

font.SetColor(COleVariant((long)0xFF0000));

这样改了还是不能用,Font是哪儿来的哦! 回复更多评论

# re: [转]在VC中彻底玩转Excel

2007-10-19 15:11 | 唐特

Font 和_Application,Workbooks等等这些东西一样, 是打开excel.exe(excel9.olb) 的时候添加的class 回复更多评论

# re: [转]在VC中彻底玩转Excel

2008-01-16 11:19 | HU

请教一个问题,现在出现了OFFICE 2007,在2000中做的程序,在2007下无法启动EXCEL 服务,就是CreateDispatch失败。

但是,运行的环境既有2007,也会有老版本的EXCEL,这种情况下,怎么办?怎么让程序更有通用性?谢谢!!!!回复更多评论

# re: [转]在VC中彻底玩转Excel

2008-01-25 10:55 | 想飞的星期

请问怎么知道我createdispatch出来的excel已经关闭了??我还想每次重用同一个excel进程,怎么办?回复更多评论

# re: [转]在VC中彻底玩转Excel

2008-03-28 14:56 | lamorak

你好,请教一下,我在做数据导入到excel中的程序,将3个文件的数据导入没有问题,我为了做测试,将这3个文件复制了44次,就是145个文件的数据,总共有6702314行,200M 的数据量,转换到75M数据的时候,Excel就不给转了,就弹出Excel中“value,range,GetIDsOfNames”函数出错,Excel大小有限制吗?我这个差不多就是做9×3文件循环数据插入,第10个循环就错了。我每次转一个文件后都加了Sleep(2000),能帮忙解决一下吗?回复更多评论

本文来自CSDN博客,转载请标明出处:https://www.doczj.com/doc/b610041248.html,/vicozo/archive/2009/04/12/4067804.aspx

VC操作excel表格/图表

2010-07-31 21:06

VC操作excel表格(一)

1. The require files

When you start to program in VC, you must have the lib files of Excel. The next table will show that: Office Version

Requirement files

Other files

Default Dir

Office 97

Excel8.olb

Excel.exe

C:\program files\MS Office\office

Office 2000

Excel9.olb

Excel.exe

C:\program files\MS Office\office

Office 2002

Excel.exe

C:\program files\MS Office\office10

Office XP

Excel.exe

C:\program files\MS Office\office10

Before you start work, you must be sure that corresponding files are there.

2. The Excel Object model

Before you start to work, another thing must be known, it is the Excel object model. It tells us that what are included in Excel? Let us go.

2.1. Basic model

Excel program consists of eight main parts; these are application object, workbooks object, work book object, work sheets object, work sheet object, range object, charts, chart. Next picture describes the relationship of

main objects in Excel:

Notice: In fact, there are many other objects, but we often use above objects. You can find the MSDN\office development\office XXXX\excel for getting others.

2.2. Application Object

Application object is defined in Excel type library as _Application class. Application is the Excel itself, the main functions are:

l The setting and options of Excel application level

l Some methods which return to top object

We can get Workbooks/workbook object from _Application object like this:

_Application app;

app.get_workbooks ();

2.3. Workbooks object

Workbooks is the aggregate of all open books. It is container object, the element is workbook object.

The main functions are:

l Return the workbook object by index.

l Add a new empty workbook.

l Open a file, and create a new workbook for this file.

Example:

Workbooks books = app.get_workbooks();

Workbook newBook = books.add(votp);

newBook = books.Open(“.\\1.xls”,...);

newBook = books.get_Item(ColVariant((short)1));

2.4. Workbook Object

Workbook object is a work book. It includes work sheet and chart. The main

functions are:

l Activate a workbook

l Return a worksheets or charts

l Return the active sheet

l Save to file(XLS)

Example:

newBook.Activate();

WorkSheets sheets = newBook.get_WorkSheets();

newBook.get_Charts();

newBook.get_ActiveChart();

newBook.get_ActiveSheet();

2.5. Worksheets object

Worksheets is a aggregate object too. Every element is worksheet object. In fact, there is a Sheets object, it is aggregate object too, but the element maybe a worksheet object or a chart object.

The main functions are:

l Add new work sheet

l Get work sheet by index

Example:

Worksheet sheet = sheets.add(vopt,vopt,vopt,COleVariant((short)1));

sheet = sheets.get_Item(index);

2.6. Worksheet object

WorkSheet object is a work sheet of Excel. It is the member of Worksheets and sheets.

The main functions are:

l All operation on work sheet, like password.

l Return the Range object by cell area.

l Activate itself

Example:

sheet. Protect();

sheet.put_Name(“My create sheet”);

Ranget oRng =sheet.get_Range(COleVariant(“A1:B3”),vopt);

sheet.Activate();

2.7. Range object

Range object is a cell, or a row, or a column, or a area (it maybe a cell or some continuous cells), or a 3D area.

The main functions are:

l Get and set the cells value

l Get and set the cells formula

l Offset

l Union

l Font, autofit, and so on…

Example:

oRng.get_Value();

oRng.put_Value(COleVariant("Date"));

oRange = oRange.get_Resize(COleVariant((long)20),

COleVariant((long)1));

oRange.put_Formula(COleVariant("=C2*0.07"));

2.8. Charts

Charts is a aggregate object, it includes all charts in workbook, but it

doesn’t con tain embedded charts.

The main functions are:

l Get chart by index

l Add a new chart to workbook

l Print chart

Example:

Charts charts = newBook.get_Charts();

Charts.get_Item(index);

Chart newChart = charts.add(vopt,vopt,COleVariant((short)1));

2.9. Chart

Chart represents chart, it can be a embedded chart or a single chart. The main functions:

l Set the basic attributes, e.g., name, title, active.

l Set the chart type

l Set the chart data source

Example:

newChart.put_Name("My chart");

newChart.put_ChartType((long)xlLineMarkers);

Range oRang;

oRang = newSheet.get_Range(COleVariant("C2:D21"), vOpt);

newChart.SetSourceData(oRang,COleVariant((short)2));

2.10. Chart type

3. The step of creating

Now let us start to create a project and write program for creating an

Excel sheet and an Excel chart.

We describe that in two steps. The first step is how to import type libraries and what type libraries are imported into project, and the second step is how to code. The second will be described in next section.

3.1. How and what

What libraries are imported into? Different office version has different type libraries, see above form.

There are some difference of how to import between VC6.0 and VC7.0.

3.1.1. VC6.0

1. Create a MFC exe project

2. Select Menu “View->Class Wizard”

3. Select option card “Automation->Add Class->from type library”

4. Select an excel9.olb/excel8.olb/excel.exe file, which often locates under dir C:\Program files\Office\.

5. Select specified classes, e.g. _Application, Workbooks, _Workbook, Worksheets, _Worksheet, Range, then click OK, and a file named

excel9.h/excel8.h will be created. That file includes the definition of above classes.

3.1.2. VC7.0

1. Create a MFC EXE project, single document, and container

2. Select menu “Project->Class Wizard”

3. Select “Class in type library”

4. Click “Open” button

5. Set the source of class as “File”, and select the file.

6. Select the interfaces that you want to add your project from left list and insert them into right list

7. Set the import file name (excel.h), then click the “Complete” button.

vc操作excel表格(二)

4. Program with create Excel file

We suppose that all classed are defined in excel.h, so we can use those classes by only including excel.h.

We add two menu items, one for creating specified Excel sheet named ID_NewSheet, the other for creating chart name ID_NewChart.

The steps:

1. Add two menu items

2. Add two message map functions for above two menu items

3. Include excel.h file in the file you define above two message map functions.

4. Implement the two functions

4.1. Program with sheet

The next is a way of ID_NewSheet message map function implementation:

//Excel object model

_Application app;

Workbooks books;

_Workbook newBook;

Worksheets sheets;

_Worksheet oSheet,firstSheet;

Charts charts;

_Chart chart,firstChart;

Range range;

Range iCell;

LPDISPATCH lpDisp;

COleVariant vResult;

COleVariant vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR); //Create Excel server (start Excel)

if(!app.CreateDispatch("Excel.Application"))

{

AfxMessageBox("Can’t start Excel server! ");

return;

}

app.put_Visible(TRUE); //set Excel visible

app.put_UserControl(TRUE); //user can operate Excel

//new a book

books.AttachDispatch(app.get_Workbooks());

newBook = books.Add(vOpt);

//Get worksheets and get the first worksheet

sheets = newBook.get_Worksheets();

oSheet = sheets.get_Item(COleVariant((short)1));

//*** ADD DATA TO THE WORKSHEET

//Add Headers to Row 1 of the worksheet

Range oRange;

oRange = oSheet.get_Range(COleVariant("A1"), vOpt);

oRange.put_Value2(COleVariant("Date"));

oRange = oSheet.get_Range(COleVariant("B1"), vOpt);

oRange.put_Value2(COleVariant("Order #"));

oRange = oSheet.get_Range(COleVariant("C1"), vOpt);

oRange.put_Value2(COleVariant("Amount"));

oRange = oSheet.get_Range(COleVariant("D1"), vOpt);

oRange.put_Value2(COleVariant("Tax"));

//Create a safe array that is NUMROWS x 3 --

//column 1 will contain dates column 2 will contain strings //and column 3 will contain numbers

COleSafeArray sa;

DWORD dwElements[2];

dwElements[0]= 20; //Number of rows

dwElements[1]= 3; //Number of columns

sa.Create(VT_VARIANT, 2, dwElements);

//Populate the safe array with the data

long index[2];

long lRow;

COleVariant vTemp;

COleDateTime vDateTime;

CString s;

for(lRow=0;lRow<=20-1;lRow++)

{

index[0] = lRow;

//Fill the first column with dates

index[1] = 0;

vDateTime.SetDate(1999, rand()%12, rand()%28);

在VC中彻底玩转Excel

-----------------------------------精品考试资料---------------------学资学习网----------------------------------- [原创]在VC中彻底玩转Excel 如今Excel是越来越重要了,在我们自己开发的程序中不免要和Excel打交道了。利用Automation技术,我们可以在不去了解数据库的情况下玩转Excel,而且你会发现一切竟如此轻松!好了,咱们开始吧,我不喜欢用长篇累牍的代码来故弄玄虚,所以下面的代码都是切中要害的片段,总体上是个连贯的过程,包括启动Excel,读取数据,写入数据,以及最后的关闭Excel,其中还包括了很多人感兴趣的合并单元格的处理。 特别说明以下代码需要MFC的支持,而且工程中还要包含EXCEL2000的定义文件:EXCEL9.H,EXCEL9.CPP VC6.0操作Excel ( 2008-1-22 11:26 ) 1.建立一个空的单文档程序; 2.加入Excel的库文件: 在vc++的view菜单里面选classwizard,然后选Automation tab,再选Add Class,选?潲??祴数氠扩慲祲尮,然后再选你需要的object library。 (for this example, if you are automating Excel 97, choose the Microsoft Excel 8.0

Object Library; the defaultlocation is C:\Program Files\Microsoft Office\Office\Excel8.olb). If you are automating Microsoft Excel 2000, choose Microsoft Excel 9.0 Object Library for which the defaultlocation is the C:\Program Files\Microsoft Office\Office\Excel9.olb. If you are automating Microsoft Excel 2002 and Microsoft Office Excel 2003, the object library is embedded inthe file Excel.exe. The default location for Excel.exe in Office 2002 is C:\program Files\MicrosoftOffice\Office10\Excel.exe. The default location for Excel.exe in Office 2003 is C:\program Files\MicrosoftOffice\Office11\Excel.exe. 1 / 31 在ListCtrl框中选中_Application, _Workbook, _Worksheet, Range, Sheets, Workbooks,单击OK,自动生成EXCEL8.H和EXCEL8.CPP文件(或者EXCEL9.H和EXCEL9.CPP或者EXCEL.H和EXCEL.CPP)。

高中信息技术:我是计算高手──玩转EXCEL之公式篇教学设计(参考文本)

高中信息技术标准教材 高中信息技术:我是计算高手──玩转EXCEL之公式篇教学 Information technology can enrich the audiovisual experience, and can also turn abstract things into concrete, sensible, and visual things. 学校:______________________ 班级:______________________ 科目:______________________ 教师:______________________

--- 专业教学设计系列下载即可用 --- 高中信息技术:我是计算高手──玩转 EXCEL之公式篇教学设计(参考文本) 【教材分析】 利用公式对工作表中的数据进行快速运算、处理和分析,是西安电子科技大学出版社出版的《计算机基础培训教程》一书中excel 部分的一个内容。该教程被我校选定为中专部学生计算机应用教材。该教材对利用公式进行数据计算处理(进行公式创建、复制、编辑)的教学内容只是安排了对“办公室一至三月水费、电费、电话费用等进行合计(和)计算”的一个简单的例子。其内容安排单一、简单,很难应对学生今后工作中所面对的对数据进行加、减、乘、除

计算。为此,本人在教学过程中增设了与学生生活实际相关的系列内容(计算机奥运会奖牌总数、元旦卡拉ok各选手最后得分、计算班费开支等)进行教学,有意扩充了学生的知识面,提高了学生的对数据的处理能力。 【学情分析】 本人在教学本课时认真结合学生学情,将教学内容设计成“竞赛”“闯关”等形式,增强教学趣味性,以激发学生的学习兴趣与热情,并通过演示、指导、学生自主探究、任务完成等形式,让学生逐步掌握本教学内容。 【教学目标】 知识技能目标:了解excel中公式的定义、公式的输入、公式的编辑等,并学会利用公式对excel工作表中的数据进行分析计算。 方法技能:在任务驱动、自主探究与老师点拨中掌握公式的输入、编辑及应用公式进行计算的技巧。并通过对不同类型问题的分析,培养学生解决问题的能力。 情感态度价值观:学生在计算机公式的输入、编辑及利用公式

中国石油大学网络教育-玩转Excel从此不加班满分答案

在线考试(客观题) 单选题 (共20道题) 收起 1.(5.0分) 使用选择性粘贴来解决“文本型”数值转换问题时,若辅助单元格值为0,则应该选择哪项操作( )。 A、运算-加 B、运算-乘 C、跳过空单元格 D、粘贴链接 我的答案:C此题得分:5.0分 2.(5.0分) 快速访问工具栏的工具排列是按照哪种方式排序的( )。 A、拼音字母 B、英文字母 C、笔画 D、其他三项都不对 我的答案:A此题得分:5.0分 3.(5.0分) 使用如下哪种快捷键可以快速定位到表格的最后一行( )。 A、Ctrl+下箭头 B、Shift+下箭头 C、Alt+下箭头 D、Ctrl+Shift+下箭头 我的答案:A此题得分:5.0分 4.( 5.0分) 使用hyperlink函数执行“跳转到特定单元格”命令时,需要选择某个工作表的特定单元格,那么在公式中填写选定的 工作表名称前需要添加哪种特定的符号( )。 A、? B、! C、/ D、# 我的答案:D此题得分:5.0分 5.(5.0分) index函数的第三参数代表( )。 A、单元格区域 B、行参数 C、列参数 D、选择引用中的一个区域 我的答案:C此题得分:5.0分

6.(5.0分) sumif函数共有( )个参数。 在线考试(客观题) A、2 B、3 C、4 D、5 我的答案:B此题得分:5.0分 7.(5.0分) 在解决日期型数据处理问题时,如果可以取得其对应的年月日相应的值,应该使用哪个函数来进行处理( )。 A、datedif B、date C、eomonth D、makedate 我的答案:B此题得分:5.0分 8.(5.0分) countif函数的哪一个参数采用数组用法,结果为数组( )。 A、range B、criteria C、sum_range D、average_range 我的答案:B此题得分:5.0分 9.(5.0分) 在Excel中,日期和时间格式,其本质是哪一种数据形式( )。 A、数值 B、文本 C、时间 D、其他 我的答案:A此题得分:5.0分 10.(5.0分) find函数主要用作下列选项中的哪一个( )。 A、查找单元格在数组中的位置 B、查找特定字符在字符串的位置 C、查找数据 D、其他三项都不对 我的答案:B此题得分:5.0分 11.(5.0分) 当lookup函数的第一参数大过第二参数所有值时,将会返回哪一项数据( )。 A、第一个数据 B、平均值 C、最后一个数据 D、处于中间位置的数据

加班工时excel

加班工时excel 篇一:工时加班 工时制度 工时制度,即工作时间制度,据现有情况,我国目前有三种工作时间制度,即标准工时制、综合计算工时制、不定时工时制。 标准工时制 这是我国运用最为广泛的一种工时制度,在标准工时制下,根据《劳动法》第三十六条、 《国务院关于职工工作时间的规定》第三条的规定,工人每天工作的最长工时为8小时, 周最长工时为40小时。并且根据《劳动法》第三十八条、第四十一条规定,标准工时制还 有以下几点要求: ①用人单位每周应保证劳动者每周至少休息1日 ②因生产经营需要,经与工会和劳动者协商,一般每天延长工作时间不得超过1小时③ 特殊原因每天延长工作时间不得超过3小时④每月延长工作时间不得超过36小时。 显然,根据标准工时制的规定,工作时间比较固定,且延长工作时间有明确严格的限制条件。

综合计算工时制 这类工时制度是以标准工时制为基础,以一定的期限为周期,综合计算工作时间的工 时制度。 根据《劳动部关于职工工作时间有关问题的复函》的第五条至第七条的规定,该类工时 制度有以下的特点: ①一般以月、季、年为周期综合计算工作时间 ②其平均日工作时间和平均周工作时间应当与法定标准工作时间基本相同,也就是说,在 综合计算周期内,某一具体日(或周)的实际工作时间可以超过8小时(或40小时),但综 合计算周期内的总实际工作时间应当不能超过总法定标准工作时间 ③实行综合计算工时制的,无论劳动者平时工作时间数为多少,只要在一个综合工时计算 周期内的总工作时间数不超过以标准工时制计算的应当工作的总时间数,即不视为加班。若 超过,则超过部分视为延长工作时间,并按《劳动法》规定支付报酬,且延长时间的小时数, 平均每月不得超过36小时。 根据劳动部《关于企业实行不定时工作制和综合计算工时工作制的审

在VC中彻底玩转Excel

[原创]在VC中彻底玩转Excel 如今Excel是越来越重要了,在我们自己开发的程序中不免要和Excel打交道了。利用Automation技术,我们可以在不去了解数据库的情况下玩转Excel,而且你会发现一切竟如此轻松!好了,咱们开始吧,我不喜欢用长篇累牍的代码来故弄玄虚,所以下面的代码都是切中要害的片段,总体上是个连贯的过程,包括启动Excel,读取数据,写入数据,以及最后的关闭Excel,其中还包括了很多人感兴趣的合并单元格的处理。 特别说明以下代码需要MFC的支持,而且工程中还要包含EXCEL2000的定义文件:EXCEL9.H,EXCEL9.CPP VC6.0操作Excel ( 2008-1-22 11:26 ) 1.建立一个空的单文档程序; 2.加入Excel的库文件: 在vc++的view菜单里面选classwizard,然后选Automation tab,再选Add Class,选"From a type library." ,然后再选你需要的object library。 (for this example, if you are automating Excel 97, choose the Microsoft Excel 8.0 Object Library; the default location is C:\Program Files\Microsoft Office\Office\Excel8.olb). If you are automating Microsoft Excel 2000, choose Microsoft Excel 9.0 Object Library for which the default location is the C:\Program Files\Microsoft Office\Office\Excel9.olb. If you are automating Microsoft Excel 2002 and Microsoft Office Excel 2003, the object library is embedded in the file Excel.exe. The default location for Excel.exe in Office 2002 is C:\program Files\Microsoft Office\Office10\Excel.exe. The default location for Excel.exe in Office 2003 is C:\program Files\Microsoft Office\Office11\Excel.exe. 在ListCtrl框中选中_Application, _Workbook, _Worksheet, Range, Sheets, Workbooks,单击OK, 自动生成EXCEL8.H 和EXCEL8.CPP文件(或者EXCEL9.H 和EXCEL9.CPP或者EXCEL.H 和EXCEL.CPP)。 3.初始化COM库: 在App类的InitInstance中一定要先加上AfxOleInit();因为操作Excel是属于COM自动化,需初始化COM库。 4.加入Excel的头文件: 文档类的CPP文件中包含头文件#include "excel9.h",是关于Excel中各类的接口定义信息。 如果excel9.h, excel9.cpp文件已经生成 创建project, 将示例文档中的excel9.h, excel9.cpp 复制到工程目录,选 Project-->Add to project-->File-->excel9.h; Project-->Add to project-->File-->excel9.cpp; 在App 的Initinstance 中加入AfxOleInit(); 在Dlg 的头文件中加入#include "excel9.h" 代码中加入调用COM接口代码,编译即可, *******************************************************************************

30条最常用的Excel小技巧

30条最常用的Excel小技巧(上) 微软的Excel恐怕是现在仅次于Word,使用人数最多的一款办公软件了,因此,自然而然地也就成了大家平时关注的焦点。不过,正所谓“术业有专攻”,精通本职工作的您未必在使用Excel进行日常操作时用的都是最快捷的方法。所以,今天笔者就给大家总结了30条最常用的Excel小技巧,同时也向大家隆重介绍一位Excel方面的资深专家——小飞,下面的技巧就都由小飞为大家讲解啦! (注:本文所述技巧如无特殊说明,均指运行于微软Windows XP + Excel 2003环境) 1. 多工作表同时录入技巧 【问题】有时我们经常会遇到这样一个问题,几个工作表需要在同一位置录入相同的数据,如果每次都是自己一个工作表一个工作表这样录入的话,既费时又费力,有没有什么好办法能够让其他几个工作表自动与第一个表同步录入呢? 【小飞】其实对于这个问题,Excel的开发人员已经早早就做好考虑了,它为我们提供了一个被称为工作表组的功能,将几个工作表组合到一起后,无论在其中任何一个工作表中输入的数据,都会被自动复制到其他工作表的相同位置。而且不光是数值,就连格式和公式也能够自动复制,操作的方法也很简单【方法】1) 首先要按住Ctrl键再用鼠标依次点击每个需要组合的工作表标签,将它们组合在一起(工作表组合支持跳跃式选择),操作完毕后,您会发现工作表的标题区中已经显示了“工作组”字样了。如图1所示 图1 2) 随后在任何一个成组工作表中输入需要的数据即可。如图2所示 图2 3) 等所有的数据输入完毕后, 您就可以直接在图2成组工作表的 标签上点击右键,选择“取消成组 工作表”命令,这时您就会惊奇地 发现,刚才组合为一组的Sheet1、 Sheet3、Sheet4这三份工作表中的 数据已经完全一样了。怎么样,方 便吧! 【小提示】成组工作表之间的自动复制是基于行号列号来定位的,因此,无论其他同组工作表中当前单元格是多少,都不会影响到成组表之间数据的准确定位。换句话说,就是当您在其中一个表的C7单元格中输入一个数字“1”以后,其余的成组工作表都会在自己的C7单元格中显示“1” 2. 一个单元格内输入多行数据 【问题】有的时候,我们需要录入的内容很长,希望能够在同一个单元格内多行录入,可Excel的单元格不同于Word,既没有换行的命令,也不能直接用回车键换行,这又该怎么办呢? 【小飞】呵呵,其实Excel本身是支持用户在一个单元格内输入多行数据的,只不过输入方法与平时用法略有不同罢了。

Excel操作题3题

操作题3题,每题20分,共计60分 1.【Excl操作题】 上学期,胜利中学对八年级学生的课外阅读情况做了一次调查,请你利用提供的“操作素材 xx*完成下列操作并以“课外阅读xx为文件名保存在原文件夹中:(共20分) (1)将A1单元格内容字体设置为“黑体、18号、深红(标准色)”(6分)(2)将区域“A1:M1“的 内容合并,并设置对齐方式为垂直居中(4分)(3)设置区域“"A2:M6”外边框与内部均为蓝色 (标准色)样式为“组实线”,且设置区域A2:M2”的填充色为“紫色,着色4,淡色80%:(4分) (4)利用函数计算出“合计”一列的数据,并计算所有班级各种阅读情况的总人数,将结果填 入“7”单元格中;(3分)(5)利用公式计算出“百分比”一列的数据,采用百分比样式,并保 留位小数(注:百分比的计算方法为每一种阅读情况人数与全年级总人数的比率)。(3分) 注:复制下列内容到Excel中粘贴,即可得到相应表格进行操作。 全年级学 生课外阅 读情况统 计表(人 数) 阅读情况1班2班3班4班5班6班7班8班基本不看 3 4 0 3 1 0 2 5 经常看13 12 18 14 15 16 14 13 每天都看14 4 5 12 13 7 6 7 偶尔看13 22 16 11 11 15 17 15 2. 【Excel操作题】 加班,是指除法定或者国家规定的工作时间以外,正常工作日延长工作时间或者双休日以及国 实法定假期期间延长工作时间,企业单位应严格参照国家法律规定给予员工一定数额的加班

费或安排调休。现要对某工职工九月份的加班情兄进行所计,请你不用打开的“加班记录表.xlsx”文件,按如下要求完成操作并保存文件(共20分) (1)在第二行下插入一行,在“A3:C3”单元格中分别输入内容“9月2日何丽丽2分(2)设置A列至D列的列宽为18,设置第2行的行高为25:(4分) (3)利用公式计算“加班费(元)“(加班费(元)=加班时间(小时)”7),结果填入每个人的“加班费“单元格中,利用函数求所有人的加班费用之和,结果填入“合计行,D列“单元格中;(4分) (4)删除“A1”单元格右边框和下边框(细实线)(3分) (5)将表格第2行和合计行填充为"蓝色,着色1”,并将表格其余单元格填充为“蓝色着色1淡色80%“(4分)加班记录表 注:复制下列内容到Excel中粘贴,即可得到相应表格进行操作。 加班记录表 日期加班人加班时间 (小时) 加班费 (元) 9月3日李响 1.25 9月3日陈晨 1 9月4日陈晨 2.5 9月17日谢西 4.5 9月17日李响 2 9月22日陈晨 1 合计 1.【Excel操作睡】 书是阶梯,书是船只,书是良药,书是营养,书是智慧,书是老师,书是遗训,图书是一种特定的不断发展着的知识传工具书,对于人类的重要性可想而知,同时对学校的教自、教学和教学研究工作起着重要作用,现要对某校的图书采购情况进行统计,请你用打开的“书采购表x5x文件,按如下要求完成操作并保存文件:(共20分) (1)修改 Sheet1表中的标题名称为“面书采购情况表”:(2分) (2)将A1单元格的内容字体设置为“、20确、加和:(6分) (3)将“A1:D1°单元格合并,设置对齐方式为“水平居中:(4分) I“A2:D2区域填充色为“孟色,着色1,色80%,并将A:D6°单元格外边框颜色设置为色(标色)、样式为“细实红,(5分) 注:复制下列内容到Excel中粘贴,即可得到相应表格进行操作。

被称为“神技”的十个Excel技巧,轻松制作炫酷表格!

被称为“神技”的十个Excel技巧,轻松制作炫酷表格! 想轻松玩转Excel需要掌握更多Excel技巧,但是又有多少人能全面掌握这些技巧呢?很多人掌握只是一些皮毛而已,今天小编就来给大家补习一下Excel中的一些不为人知的技巧,这些技巧你都知道吗?技巧一、单元格自定义格式 方法:设置单元格格式——自定义——根据数据规律写入统一的数据格式 书写规则: #:数字占位符,一个符号代表一个数字占位 @:文本占位 “”:特定内容(内容确定) 技巧二、调整行列宽 方法:双击行列的边缘时,就得到最适合数据空间的行或列技巧三、快速全选列 方法:选中列头,shift+ctrl+↓即可快速全选 技巧四、精准查找数据 方法:1、按照上述方法或者ctrl+a全选A表数据。2、数据页签——筛选——高级筛选。3、在对话框中选择条件区域。 4、选择B表数据(一般为作为筛选条件的某一列值)。 5、在高级筛选对话框中点击确定。

技巧五、快速选定单元格区域 方法:选定当前单元格和A1单元格所确定的矩形区域。 ctrl+shift+home;名称中直接输入区域范围选取,选定非连续区域:区域A+ctrl+区域B 技巧六、保护工作薄 方法:选中待填写单元格——右键单击选择【单元格格式】。在单元格设置对话框中,把【锁定】的勾取消掉。【审阅】——【工作表保护】——设置密码——允许用户——勾选“选定未锁定的单元格” 技巧七、设置Excel自动保存时间 方法:文件——选项——保存——保存工作薄 技巧八、插入图表时日期列不作为横轴的解决办法 方法:1、选中日期列。2、数据页签-分列。3、在对话框中第3步的列数据格式选择“日期”格式并确定(此时日期列已被格式化为yyyy/mm/dd格式)。4、选中日期、工资两列并插入图表,此时日期为横轴,工资为纵轴。 技巧九、冻结首行 方法:视图页签-冻结窗口-冻结首行 技巧十、Excel转PDF并修改 方法:1、使用PDF转换器将Excel转换成PDF文件。2、将转换后的Excel——PDF文件添加到PDF编辑器中。3、使用“编辑”功能对文件进行修改编辑。

创业成功之路(1): Excel开发领军人物罗刚君,我的自学之路

创业成功之路(1): Excel开发领军人物罗刚君,我的自学之路 我是罗刚君,来自四川的一个小县城——资中县。 我是个地道的三无人员——无高等学历(初中毕业)、无突出特长、无显赫背景,所以1996 年1 月,当时才19 岁的我就踏上了打工之路。 在打工生涯的前几年,一直在东莞市裕元鞋厂流水线上工作,无缘接触电脑,甚至曾有一段时间在心理上抵触电脑。 记得大概是1998 年时,东莞市高镇开始刮起了电脑风潮,满街的打字班、埗Office 初级班、高级文秘班、绘图班等在大量招收学员。当时流水线上有较多同事都陆续报名打字班和Office 初级班,少数同事开始学习CAD 绘图和VB 编程等课程。曾有一位已经学了两个月的同事劝我也报名学习电脑,还说电脑的熟练程度会大大影响未来找工作的成功率,而且对于我们这种一心想摆脱流水 线的人群而言,电脑才是最好的出路。可惜当时我并没有接受同事的劝导,只抛下一句“你已经学 完了,现在不也和我一样在流水线工作吗?”现在想来,悔之晚矣!若当初听了同事的话,早8 年学习Office 软件,则早日实现个人目标。 从1996 年到2004 年年初的8 年间,我都在鞋厂的流水线和鞋材厂生产车间的注塑机上度过,一直无法实现转入文职的愿望。 在裕元鞋厂工作期间,厂里为约10 万员工提供免费的厂报和杂志,厂报编辑部会每月向厂里的员工征稿。 工厂从1998 年开始由12 小时工作制转为8 小时工作制,所以在流水线工作的我也每天拥有了大量的闲暇时间。为了消除无聊、打发时间,我每月向厂报投稿,陆续地发表了近百篇文稿,包括小小说、评论和诗歌等。因此,后来厂里的多个办公室内招文员时,我也获得了一些面试的机会,可惜的是每次都被最后一关挡下来——电脑打字测试。

相关主题
文本预览
相关文档 最新文档