现在的位置: 首页 > 综合 > 正文

EXCEL动态数据交换(OLE对象操作)

2013年10月26日 ⁄ 综合 ⁄ 共 5023字 ⁄ 字号 评论关闭

 一、创建Excel对象类  
  CREATEOBJECT(ClassName[eParameter1,eParameter2,...])
其中,ClassName指明欲建立对象的类名。eParameter1,eParameter2…是用来传递参数给OLE对象的
例如,在VFP中欲建立一Excel工作表对象:MySheet=CREATEOBJECT("Excel.Sheet")就行了。

Excel对象层次模型
引用Excel文件Getobject("Excel文件名")
单元格:Excel.Application.Workbooks(i).Worksheets(i).Cells(i,i).X 注:i代表引用标号,X表示任何属性与方法
单元区域:Excel.Application.Workbooks(i).Worksheets(i).Range("A1:B1")
函数:Excel.Application.Average(Worksheets("Sheet1").Range("A1:A4")) 注:求平均值
Excel.Application.Sum(Worksheets("Sheet1").Range("A1:A4")) 注:求和
Excel.Application.Max(Worksheets("Sheet1").Range("A1:A4")) 注:求最大值
Excel.Application.Format(Date,"mmmm d,yyyy") 注:返回格式化日期(如:December 20,2003)

集合操作:Excel.Application.Workbooks.Add() 注:添加一个新的工作簿
Excel.Application.Workbooks.Count 注:返回工作簿个数
Excel.Application.Workbooks("Book1").Delete() 注:删除工作簿Book1

Excel.Application.Workbooks("Book1").Worksheets.Add() 注:在工作簿Book1中添加一个新工作表
Excel.Application.Workbooks.("Book1").Worksheets.Count 注:返回工作表个数
Excel.Application.Workbooks("Book1").Worksheets("Sheet1").Cells.X 注:引用全体单元格
Excel.Application.Workbooks("Book1").Worksheets("Sheet1").Delete() 注:删除工作表Sheet1
InputBox(Prompt,[Title],[Default],[Left],[Top],[HelpFile],[HelpContextID],[Type]) && 输入数据框
附加说明:Type=格式,0=公式,1=数字,2=文本,4=逻辑值,8=单元格引用,16=错误值,64=数组

Application对象常用属性和方法
ActiveWorkbook && (O)当前活动的工作簿
ActiveSheet && (O)当前活动的工作表
ActiveCell && (O)当前活动的单元格
ThisWorkbook && (O)当前正在执行过程的工作簿
OperatingSystem && (C)操作系统
Selection && (O)当前选择的对象
CutCopyModel && (L)是否显示工作表中围绕选定单元格,指示剪切、复制状态的移动虚线
Quit() && 退出Excel
Run() && 执行Excel宏

Workbook对象常用属性和方法
ActiveSheet && (O)当前工作簿
Activate() && 激活工作簿
Open(fileName) && 打开工作簿
Close() && 关闭工作簿
Save() && 以默认名字(如Book1)保存工作簿,且不显示对话框
SaveAs(FileName,FileFormat,Password,WriteResPassword,ReadOnlyRecommended) && 工作簿另存为,不显示对话框
PrintOut() && 打印工作簿
PrintPreview() && 工作簿打印预览

Worksheet对象常用属性和方法
Name && (C)工作表名字
Cells && (O)引用工作表中的所有单元格
Activate() && 激活工作表
Add() && 添加工作表
CheckSpelling() && 检查工作表中内容的拼写
Delete() && 删除工作表
Paste() && 执行复制

Cell/Range对象的常用属性和方法 注:Cell代表单个单元格,Range代表一组单元格,实际中以Range应用最广泛
ActiveCell.CurrentRange && (O)返回从当前激活的单元格开始第一个空行和空列包围的区域
Range.Address && (C)当前Range位置
Range.Count && (N)Range中单元格数量
Range.Formula && (C)计算显示值的公式
Range.NumberFormat && (C)数字格式
Range.Offset(x,y) && (N)偏移量(用于从一个Range移动到另一个Range)
Range.Resize(x,y) && (N)重设Range的大小
Range.Value && (X)Range的当前值
Range.Activate() && 激活一个Range
Range.Clear() && 清除一个Range的内容
Range.Copy() && 拷贝到剪贴板
Range.Cut() && 剪切到剪贴板
Range.Paste() && 从剪贴板粘贴到当前Range
Range.PasteSpecial() && 选择性粘贴
Range.Select() && 选择一个Range
以下是Cell或Range对象的字体属性
Font.Name && (C)字体名称
Font.FontStyle && (C)字体风格
Font.Size && (N)字体大小
Font.Bold && (L)是否为粗体
Font.Italic && (L)是否为斜体
Font.StrikeThrough && (L)是否显示删除线
Font.SuperScript &&
Font.OutlineFont && (L)是否显示空心字
Font.Shadow && (L)是否有阴影
Font.Underline && (L)是否有下划线
Font.ColorIndex && (N)颜色

常用VBA语法
****** If 条件判断 ******
If condition Then
[statements]
Elsif condition-n Then
[elseifStatements]...
Else
[elseStatements]
End If

****** Select Case 多重选择 ******
Select Case testExpression
Case expressionList-n
[statements-n]...
Case Else
[elseStatements]
End Select

***** For Next 循环 *****
语法1:
For counter=start To end [Step step]
[statements]
[Exit For]
[statements]
Next [counter]

语法2(对象专用):
For Each element In group
[statements]
[Exit For]
[statements]
Next

***** Do While 循环 *****
语法1:
Do [{While|Until} condition]
[statements]
[Exit Do]
[statements]
Loop

语法2:
Do
[statements]
[Exit Do]
[statements]
Loop [{While|Until} condition]

 1.建立OLE对象
MyExcel=CREATEOBJECT("Excel.Application") 注:建立一个Excel对象(不可见)
MyExcelSheet=CREATEOBJECT("Excel.Sheet") 注:直接建立一个Excel工作表对象(不可见,且只有一个表)

  2.添加工作簿对象
MyExcel.Workbooks.Add()

3.建立工作簿中的工作表对象
MyExcel.Workbooks(1).Sheets.Add()

5.引用工作簿
MyExcel.Workbooks(1) 注:Workbooks对象可以使用数字编号或工作簿名字
MyExcel.Workbooks("Book1")

6.引用工作簿中的某一工作表
MyExcel.Workbooks(1).Sheets(1) 注:Sheets对象只能使用数字编号
MyExcel.Workbooks("Book1").Worksheets(1) 注:Worksheets对象可以使用数字编号或工作表名字
MyExcel.Workbooks("Book1").Worksheets("Sheet1")

7.引用工作簿中的某一工作表中的某一单元格数据
MyExcel.Workbooks(1).Sheets(1).Cells(1,1).Value
MyExcel.Workbooks(1).Worksheets(1).Cells(1,1).Value
MyExcel.Workbooks(1).Worksheets("Sheet").Cells(1,1).Value

8.引用工作簿中的某一工作表中的某一区域
MyExcel.Workbooks("Book1").Worksheets("Sheet").Range("A2:B5")

9.应用实例
******************** START ********************
Local Data_Rows , Data_Columns , I , J , MyExcelSheet
Dimension Data_Array(3,3) && 建立一个存放演示数据的数组
Data_Array(1,1) = "张三"
Data_Array(1,2) = "李四"
Data_Array(1,3) = "赵五"
Data_Array(2,1) = 45
Data_Array(2,2) = 55
Data_Array(2,3) = 65
Data_Array(3,1) = 1440
Data_Array(3,2) = 1220
Data_Array(3,3) = 1330

m.Data_Rows = ALEN(Data_Array , 1) && 自动获取数据数组的行数
m.Data_Columns = ALEN(Data_Array , 2) && 自动获取数据数组的列数

MyExcelSheet = CREATEOBJECT("Excel.sheet") && 直接建立Excel工作表对象(MyExcelSheet.Parent=Sheet对象)
MyExcelSheet.Parent.ActiveWindow.WindowState = 2 && 最大化工作表窗口
MyExcelSheet.Parent.ActiveSheet.Name="MyOLE" && 设置当前工作表名称
MyExcelSheet.Parent.Visible = .T. && 设置使Excel表可见

for m.I=1 to m.Data_Rows
for m.J=1 to m.Data_Columns
MyExcelSheet.Parent.ActiveSheet.Cells(m.I,m.J).Value = Data_Array(m.I,m.J) && 给Excel单元格传递数据
endfor
endfor

for m.I=2 to m.Data_Rows
for m.J=1 to m.Data_Columns
With MyExcelSheet.Parent.ActiveSheet
.Cells(m.I,m.J).Value = .Cells(m.I,m.J).Value + 300 && 编辑Excel单元格数据
EndWith
endfor
endfor

Messagebox("OLE对象数据传送完毕,按确定键进行下一步。",64,"系统提示")
MyExcelSheet.SaveAs("C:/MyExcel") && 保存工作簿到指定位置
Messagebox("按确定键关闭OLE对象。",64,"系统提示")
MyExcelSheet.Parent.Quit() && 将Excel对象关闭
 

抱歉!评论已关闭.