1. 程式人生 > >EXCEL動態資料交換(OLE物件操作)

EXCEL動態資料交換(OLE物件操作)

 一、建立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物件關閉