實現IDL對excel對圖表的操作,因為對IDL編程不熟悉(沒有學過,看過幾行代碼后寫過IDL代碼而已,任何語言感覺差不多,學了c/c++ 其他的語言都是浮云)。
如是我就先用c#對excel 進行操作,因為簡單。(哪個語言對開發東西簡單自然用哪個)。
網上例子真少。。。。。可以說對圖表幾乎沒有,只能通過office的宏來分析怎么寫代。
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using MSExcel = Microsoft.Office.Interop.Excel;
6 using System.IO;
7 using System.Reflection;
8
9
10 namespace 操作Excel
11 {
12 class Program
13 {
14 static void Main(string[] args)
15 {
16 MSExcel.Application excelApp; //Excel應用程序變量
17 MSExcel.Workbooks excelDoc; //Excel文檔變量
18
19 excelApp = new MSExcel.ApplicationClass();
20 string path = @"F:\23.xls";
21 Object Nothing = Missing.Value;
22 excelDoc = excelApp.Workbooks;
23 excelApp.ShowStartupDialog = true;
24
25
26 MSExcel::Workbook doc = excelDoc.Open(path, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing);
27 if (null == doc)
28 {
29 return;
30 }
31
32
33 MSExcel.Worksheet ws = (MSExcel.Worksheet)doc.Sheets[1]; //索引從1開始 ,難道c# 我用c#不熟悉
34
35 try
36 {
37
38 MSExcel.Worksheet ws2 = ((MSExcel.Worksheet)excelApp.ActiveSheet);
39 //這里我找了好就才知道要用ChartObject 來接,我開始用Chart ,_Chat都不行,注意了
40 MSExcel.ChartObject c = (MSExcel.ChartObject)ws2.ChartObjects("Chart 1");
41 c.Activate();
42 MSExcel.Chart chart1 = excelApp.ActiveChart;
43 Console.WriteLine("{0}", chart1.ChartTitle.Text);
44 chart1.ChartTitle.Text = "hello world";//設置標題
45 //設置 x,y軸。
46 MSExcel::Axis aa = (MSExcel::Axis)chart1.Axes(2, Microsoft.Office.Interop.Excel.XlAxisGroup.xlPrimary);
47 //aa.MinimumScale = 341;
48 aa.MaximumScale = 370;
49 MSExcel::Axis bb = (MSExcel::Axis)chart1.Axes(1, Microsoft.Office.Interop.Excel.XlAxisGroup.xlPrimary);
50 bb.MinimumScale = 0.5;
51
52 }
53 catch (System.Exception ex)
54 {
55 Console.WriteLine("{0}", ex.Message);
56 }
57
58
59
60
61
62 Console.Read();
63
64
65 //////////////////////////////////////////////////////////////////////////
66 // 對表格進行修改
67 // MSExcel.Range r;
68 // r = ws.get_Range("c5", "c5");
69 // r.Value2 = 1234;
70 //
71 //////////////////////////////////////////////////////////////////////////
72
73 doc.Close(Nothing, Nothing, Nothing);
74 //excelApp.Save(Nothing);
75 excelApp.Quit();
76
77
78
79
80 }
81 }
82 }
83
附上IDL的代碼,或許會幫到IDL編程的人。2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using MSExcel = Microsoft.Office.Interop.Excel;
6 using System.IO;
7 using System.Reflection;
8
9
10 namespace 操作Excel
11 {
12 class Program
13 {
14 static void Main(string[] args)
15 {
16 MSExcel.Application excelApp; //Excel應用程序變量
17 MSExcel.Workbooks excelDoc; //Excel文檔變量
18
19 excelApp = new MSExcel.ApplicationClass();
20 string path = @"F:\23.xls";
21 Object Nothing = Missing.Value;
22 excelDoc = excelApp.Workbooks;
23 excelApp.ShowStartupDialog = true;
24
25
26 MSExcel::Workbook doc = excelDoc.Open(path, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing);
27 if (null == doc)
28 {
29 return;
30 }
31
32
33 MSExcel.Worksheet ws = (MSExcel.Worksheet)doc.Sheets[1]; //索引從1開始 ,難道c# 我用c#不熟悉
34
35 try
36 {
37
38 MSExcel.Worksheet ws2 = ((MSExcel.Worksheet)excelApp.ActiveSheet);
39 //這里我找了好就才知道要用ChartObject 來接,我開始用Chart ,_Chat都不行,注意了
40 MSExcel.ChartObject c = (MSExcel.ChartObject)ws2.ChartObjects("Chart 1");
41 c.Activate();
42 MSExcel.Chart chart1 = excelApp.ActiveChart;
43 Console.WriteLine("{0}", chart1.ChartTitle.Text);
44 chart1.ChartTitle.Text = "hello world";//設置標題
45 //設置 x,y軸。
46 MSExcel::Axis aa = (MSExcel::Axis)chart1.Axes(2, Microsoft.Office.Interop.Excel.XlAxisGroup.xlPrimary);
47 //aa.MinimumScale = 341;
48 aa.MaximumScale = 370;
49 MSExcel::Axis bb = (MSExcel::Axis)chart1.Axes(1, Microsoft.Office.Interop.Excel.XlAxisGroup.xlPrimary);
50 bb.MinimumScale = 0.5;
51
52 }
53 catch (System.Exception ex)
54 {
55 Console.WriteLine("{0}", ex.Message);
56 }
57
58
59
60
61
62 Console.Read();
63
64
65 //////////////////////////////////////////////////////////////////////////
66 // 對表格進行修改
67 // MSExcel.Range r;
68 // r = ws.get_Range("c5", "c5");
69 // r.Value2 = 1234;
70 //
71 //////////////////////////////////////////////////////////////////////////
72
73 doc.Close(Nothing, Nothing, Nothing);
74 //excelApp.Save(Nothing);
75 excelApp.Quit();
76
77
78
79
80 }
81 }
82 }
83
1 ;-----------------------------------------------------------------
2 ; GetAllDataFromCurrentWorksheet Method. Returns all valid, contiguous data
3 ; stored in currently selected worksheet
4 ;
5 ; Example:
6 ;
7 ; oIDL_Excel = obj_new("ITCffExcel", fileName, SHEET='irreg_grid1')
8 ; data = oIDL_Excel->GetAllDataFromCurrentWorksheet()
9 ;-
10 FUNCTION ITCffExcel::GetAllDataFromCurrentWorksheet
11
12 COMPILE_OPT IDL2
13
14 On_Error, 2
15
16 IF (Obj_Valid(self.oCellRange)) THEN Obj_Destroy, self.oCellRange
17 self.oSheet->GetProperty, Usedrange = oUsedCells
18 self.oCellRange = oUsedCells
19 self.oCellRange->GetProperty, Value = myValues
20 IF (Size(myValues, /Type) EQ 0) THEN BEGIN ; undefined
21 Message, 'Invalid Range '+range+'? Mixed data types not supported.'+ $
22 ' Data must be numeric and contiguous.', /Ioerror
23 ENDIF ELSE BEGIN
24 ; Rearrange into IDL column-major format so user doesn't have to
25 dims = Size(myValues, /Dimensions)
26 myValues = Transpose(Reform(Temporary(myValues), dims[1], dims[0]))
27
28 Return, myValues
29 ENDELSE
30 END
31
32
33 pro ITCffExcel::SetChart,inputRange
34
35 ; self.oSheet->GetProperty,Shapes = MyShapes
36 ;MyShapes->AddChart
37
38 self.oExcel->GetProperty,Charts = MyChart
39 MyChart->add
40 ;獲得剛剛添加的表,對它進行設置
41 self.oExcel->GetProperty,ActiveChart = MyActiveChart
42 ;又要獲取ChartType 進行賦值
43 MyActiveChart->GetProperty,ChartType = MyChartType
44 MyChartType = 51 ;這個值我是通過看C#代碼跟進去看到 。不想獲取對象來獲取
45 ;設置數據源
46 IF (Obj_Valid(self.oCellRange)) THEN Obj_Destroy, self.oCellRange
47
48 IF (Size(inputRange, /Dimensions) EQ 2) THEN BEGIN
49 self.oSheet->GetProperty, inputRange[0], inputRange[1], Range = oCellRange
50 self.oCellRange = oCellRange
51 ENDIF ELSE BEGIN
52 self.oSheet->GetProperty, inputRange, Range = oCellRange
53 self.oCellRange = oCellRange
54 ENDELSE
55 MyActiveChart->SetSourceData,self.oCellRange,2
56 MyActiveChart->Location,2,"sheet1"
57
58 END
59
60 ;;;設置圖表標題
61 pro ITCffExcel::SetChartTitle,strTitle
62
63 MyChart = self.oSheet->ChartObjects("Chart 1")
64 MyChart->Activate
65 self.oExcel->GetProperty,ActiveChart = MyActiveChart
66 MyActiveChart->GetProperty,ChartTitle = ChatTitle
67 ChatTitle->SetProperty,Text = strTitle
68
69
70
71
72
73 END
74 ;-----------------------------------------------------------------
75 ;
76 ; 刪除指定表格。這樣就可以就填充了。
77 ;
78 pro ITCffExcel::DeleteChart,inputRange
79 IF (Obj_Valid(self.oCellRange)) THEN Obj_Destroy, self.oCellRange
80
81 IF (Size(inputRange, /Dimensions) EQ 2) THEN BEGIN
82 self.oSheet->GetProperty, inputRange[0], inputRange[1], Range = oCellRange
83 self.oCellRange = oCellRange
84 ENDIF ELSE BEGIN
85 self.oSheet->GetProperty, inputRange, Range = oCellRange
86 self.oCellRange = oCellRange
87 ENDELSE
88
89 ;進行刪除
90 ;self.oCellRange->GetProperty,Select = MySelect
91 ObjSelect = self.oCellRange->Select()
92 ;ObjSelect->Delete
93 self.oCellRange->Delete
94
95 ;MyActiveChart->SetSourceData,self.oCellRange,2
96 ;MyActiveChart->Location,2,"sheet1"
97
98 END
99
100 ;;設置y軸的屬性
101 ;XorY : 0 代表設置 x , 1 代表設置y
102 ;MaximumScale:最大值
103 ;MinimumScale: 最小值
104 ;MinorUnit: 最小刻度
105 ;self.oSheet
106 PRO ITCffExcel::SetXYAxes, XorY,nMaximumScale,nMinimumScale,nMajorUnit
107 MyChart = self.oSheet->ChartObjects("Chart 1")
108 MyChart->Activate
109
110 self.oExcel->GetProperty,ActiveChart = MyActiveChart
111 if (XorY EQ 0)then begin
112 Axis = MyActiveChart->Axes(1,1)
113 endif else begin
114 Axis = MyActiveChart->Axes(2,1)
115 endelse
116 ;Axis->GetProperty,MaximumScale = MyMaximumScale
117 Axis->SetProperty,MaximumScale = nMaximumScale
118 Axis->SetProperty,MinimumScale = nMinimumScale
119 Axis->SetProperty,MajorUnit = nMajorUnit
120
121 End
122
123
124
125 ;-----------------------------------------------------------------
126 ;
127 ;保存文件
128 ;
129 PRO ITCffExcel::Save, fileName
130
131 COMPILE_OPT IDL2
132
133 IF N_Elements(fileName) EQ 0 THEN fileName = self.fileName
134
135 self.oWkBookData->SaveAs, fileName
136 END
137
138 ;-----------------------------------------------------------------
139 ; GetData Method. Data from passed in range parameter
140 ;
141 ; @param inputRange {in}{required}{scalar or 2 element string array - 1 and
142 ; 2D ranges supported} input
143 ;
144 ; Example:
145 ;
146 ; oExcel = Obj_New("ITCffExcel", "myData.xls")
147 ; myData= oExcel->GetData("A1:A100" | ["P1:P100","S1:S100"])
148 ;-
149 FUNCTION ITCffExcel::GetRangeData, inputRange
150
151 COMPILE_OPT IDL2
152
153 On_Error, 2
154
155 IF (Obj_Valid(self.oCellRange)) THEN Obj_Destroy, self.oCellRange
156
157 IF (Size(inputRange, /Dimensions) EQ 2) THEN BEGIN
158 self.oSheet->GetProperty, inputRange[0], inputRange[1], Range = oCellRange
159 self.oCellRange = oCellRange
160 ENDIF ELSE BEGIN
161 self.oSheet->GetProperty, inputRange, Range = oCellRange
162 self.oCellRange = oCellRange
163 ENDELSE
164
165 self.oCellRange->GetProperty, Value = myValues
166
167 IF (Size(myValues, /Type) EQ 0) THEN BEGIN ; undefined
168 Message, 'Invalid Range '+range+'? Mixed data types not supported.'+ $
169 ' Data must be numeric and contiguous.', /Ioerror
170 ENDIF ELSE Return, myValues
171 END
172
173 ;-----------------------------------------------------------------
174 ;
175 ;設置單元格數據
176 ;
177 PRO ITCffExcel::SetRangeData, inputRange, value
178
179 COMPILE_OPT IDL2
180
181 On_Error, 2
182
183 IF (Obj_Valid(self.oCellRange)) THEN Obj_Destroy, self.oCellRange
184
185 IF (Size(inputRange, /Dimensions) EQ 2) THEN BEGIN
186 self.oSheet->GetProperty, inputRange[0], inputRange[1], Range = oCellRange
187 self.oCellRange = oCellRange
188 ENDIF ELSE BEGIN
189 self.oSheet->GetProperty, inputRange, Range = oCellRange
190 self.oCellRange = oCellRange
191 ENDELSE
192
193 self.oCellRange->SetProperty, 'select', Value = value
194
195 Obj_Destroy, self.oCellRange
196 END
197
198 ;-----------------------------------------------------------------
199 ; Sets Properties on ITCffExcel Object
200 ;
201 ; @Keyword:
202 ;
203 ; Sheet {in}{optional}{scalar string} input
204 ;
205 ; Example:
206 ;
207 ; oExcel = Obj_New("ITCffExcel", "myData.xls")
208 ; oExcel->SetPropery, SHEET="Sheet2"
209 ;-
210 PRO ITCffExcel::SetProperty, Sheet = sheet, _Extra = extra
211
212 COMPILE_OPT IDL2
213
214 On_Error, 2
215
216 IF (Obj_Valid(self.oSheet)) THEN Obj_Destroy, self.oSheet
217
218 self.oSheetCollection->GetProperty, sheet, Item = oSheet
219
220 self.oSheet = oSheet
221 END
222
223 ;-----------------------------------------------------------------
224 ;
225 ;析構
226 ;
227 PRO ITCffExcel::Cleanup
228
229 COMPILE_OPT IDL2
230
231 On_Error, 2
232
233 self.oWkBookData->SetProperty, Saved = 1
234 self.oWkBookCollection->Close
235 self.oExcel->Quit
236
237 Obj_Destroy, [self.oSheet, self.oCellRange, self.oSheetCollection, $
238 self.oWkBookData, self.oWkBookCollection, self.oExcel]
239 END
240
241 ;-----------------------------------------------------------------
242 ;
243 ;初始化
244 ;
245 FUNCTION ITCffExcel::Init, fileName, Sheet = sheet
246
247 COMPILE_OPT IDL2
248
249 On_Error, 2
250
251 IF (N_Params() LT 1) THEN Message, 'ITCffExcel::Init requires file name'
252
253 ; Use the IDL COM import bridge to init Excel Application Object
254 self.oExcel = Obj_New("IDLcomIDispatch$PROGID$Excel_Application")
255
256 IF ~self.oExcel THEN Return, 0
257
258 ; Get a reference to the Excel Workbook Collection Object
259 self.oExcel->GetProperty, Workbooks = oWkBookCollection
260 self.oWkBookCollection = oWkBookCollection
261
262 self.fileName = fileName
263
264 ; Open the Excel data
265 self.oWkBookData = self.oWkBookCollection->Open(self.fileName)
266
267 ; Get a reference to the sheets collection
268 self.oWkBookData->GetProperty, Sheets = oSheetCollection
269 self.oSheetCollection = oSheetCollection
270
271 ; Parmamerized property - props can return a value
272 ; (this syntax used in collections) - Goofy COM
273 IF (Keyword_Set(sheet)) THEN BEGIN
274 self.oSheetCollection->GetProperty, sheet, Item = oSheet
275 self.oSheet = oSheet
276 ENDIF ELSE BEGIN
277 self.oSheetCollection->GetProperty, 'Sheet1', Item=oSheet
278 self.oSheet = oSheet
279 ENDELSE
280
281 Return, 1
282 END
283
284 ;-----------------------------------------------------------------
285 ;
286 ;定義
287 ;
288 PRO ITCffExcel__Define
289
290 COMPILE_OPT IDL2
291
292 void = {ITCffExcel , $
293
294 ;參數
295 fileName : '' , $
296
297 ;對象
298 oExcel : Obj_New() , $
299 oWkBookCollection : Obj_New() , $
300 oWkBookData : Obj_New() , $
301 oSheetCollection : Obj_New() , $
302 oSheet : Obj_New() , $
303 oCellRange : Obj_New() $
304 }
305
306 END
2 ; GetAllDataFromCurrentWorksheet Method. Returns all valid, contiguous data
3 ; stored in currently selected worksheet
4 ;
5 ; Example:
6 ;
7 ; oIDL_Excel = obj_new("ITCffExcel", fileName, SHEET='irreg_grid1')
8 ; data = oIDL_Excel->GetAllDataFromCurrentWorksheet()
9 ;-
10 FUNCTION ITCffExcel::GetAllDataFromCurrentWorksheet
11
12 COMPILE_OPT IDL2
13
14 On_Error, 2
15
16 IF (Obj_Valid(self.oCellRange)) THEN Obj_Destroy, self.oCellRange
17 self.oSheet->GetProperty, Usedrange = oUsedCells
18 self.oCellRange = oUsedCells
19 self.oCellRange->GetProperty, Value = myValues
20 IF (Size(myValues, /Type) EQ 0) THEN BEGIN ; undefined
21 Message, 'Invalid Range '+range+'? Mixed data types not supported.'+ $
22 ' Data must be numeric and contiguous.', /Ioerror
23 ENDIF ELSE BEGIN
24 ; Rearrange into IDL column-major format so user doesn't have to
25 dims = Size(myValues, /Dimensions)
26 myValues = Transpose(Reform(Temporary(myValues), dims[1], dims[0]))
27
28 Return, myValues
29 ENDELSE
30 END
31
32
33 pro ITCffExcel::SetChart,inputRange
34
35 ; self.oSheet->GetProperty,Shapes = MyShapes
36 ;MyShapes->AddChart
37
38 self.oExcel->GetProperty,Charts = MyChart
39 MyChart->add
40 ;獲得剛剛添加的表,對它進行設置
41 self.oExcel->GetProperty,ActiveChart = MyActiveChart
42 ;又要獲取ChartType 進行賦值
43 MyActiveChart->GetProperty,ChartType = MyChartType
44 MyChartType = 51 ;這個值我是通過看C#代碼跟進去看到 。不想獲取對象來獲取
45 ;設置數據源
46 IF (Obj_Valid(self.oCellRange)) THEN Obj_Destroy, self.oCellRange
47
48 IF (Size(inputRange, /Dimensions) EQ 2) THEN BEGIN
49 self.oSheet->GetProperty, inputRange[0], inputRange[1], Range = oCellRange
50 self.oCellRange = oCellRange
51 ENDIF ELSE BEGIN
52 self.oSheet->GetProperty, inputRange, Range = oCellRange
53 self.oCellRange = oCellRange
54 ENDELSE
55 MyActiveChart->SetSourceData,self.oCellRange,2
56 MyActiveChart->Location,2,"sheet1"
57
58 END
59
60 ;;;設置圖表標題
61 pro ITCffExcel::SetChartTitle,strTitle
62
63 MyChart = self.oSheet->ChartObjects("Chart 1")
64 MyChart->Activate
65 self.oExcel->GetProperty,ActiveChart = MyActiveChart
66 MyActiveChart->GetProperty,ChartTitle = ChatTitle
67 ChatTitle->SetProperty,Text = strTitle
68
69
70
71
72
73 END
74 ;-----------------------------------------------------------------
75 ;
76 ; 刪除指定表格。這樣就可以就填充了。
77 ;
78 pro ITCffExcel::DeleteChart,inputRange
79 IF (Obj_Valid(self.oCellRange)) THEN Obj_Destroy, self.oCellRange
80
81 IF (Size(inputRange, /Dimensions) EQ 2) THEN BEGIN
82 self.oSheet->GetProperty, inputRange[0], inputRange[1], Range = oCellRange
83 self.oCellRange = oCellRange
84 ENDIF ELSE BEGIN
85 self.oSheet->GetProperty, inputRange, Range = oCellRange
86 self.oCellRange = oCellRange
87 ENDELSE
88
89 ;進行刪除
90 ;self.oCellRange->GetProperty,Select = MySelect
91 ObjSelect = self.oCellRange->Select()
92 ;ObjSelect->Delete
93 self.oCellRange->Delete
94
95 ;MyActiveChart->SetSourceData,self.oCellRange,2
96 ;MyActiveChart->Location,2,"sheet1"
97
98 END
99
100 ;;設置y軸的屬性
101 ;XorY : 0 代表設置 x , 1 代表設置y
102 ;MaximumScale:最大值
103 ;MinimumScale: 最小值
104 ;MinorUnit: 最小刻度
105 ;self.oSheet
106 PRO ITCffExcel::SetXYAxes, XorY,nMaximumScale,nMinimumScale,nMajorUnit
107 MyChart = self.oSheet->ChartObjects("Chart 1")
108 MyChart->Activate
109
110 self.oExcel->GetProperty,ActiveChart = MyActiveChart
111 if (XorY EQ 0)then begin
112 Axis = MyActiveChart->Axes(1,1)
113 endif else begin
114 Axis = MyActiveChart->Axes(2,1)
115 endelse
116 ;Axis->GetProperty,MaximumScale = MyMaximumScale
117 Axis->SetProperty,MaximumScale = nMaximumScale
118 Axis->SetProperty,MinimumScale = nMinimumScale
119 Axis->SetProperty,MajorUnit = nMajorUnit
120
121 End
122
123
124
125 ;-----------------------------------------------------------------
126 ;
127 ;保存文件
128 ;
129 PRO ITCffExcel::Save, fileName
130
131 COMPILE_OPT IDL2
132
133 IF N_Elements(fileName) EQ 0 THEN fileName = self.fileName
134
135 self.oWkBookData->SaveAs, fileName
136 END
137
138 ;-----------------------------------------------------------------
139 ; GetData Method. Data from passed in range parameter
140 ;
141 ; @param inputRange {in}{required}{scalar or 2 element string array - 1 and
142 ; 2D ranges supported} input
143 ;
144 ; Example:
145 ;
146 ; oExcel = Obj_New("ITCffExcel", "myData.xls")
147 ; myData= oExcel->GetData("A1:A100" | ["P1:P100","S1:S100"])
148 ;-
149 FUNCTION ITCffExcel::GetRangeData, inputRange
150
151 COMPILE_OPT IDL2
152
153 On_Error, 2
154
155 IF (Obj_Valid(self.oCellRange)) THEN Obj_Destroy, self.oCellRange
156
157 IF (Size(inputRange, /Dimensions) EQ 2) THEN BEGIN
158 self.oSheet->GetProperty, inputRange[0], inputRange[1], Range = oCellRange
159 self.oCellRange = oCellRange
160 ENDIF ELSE BEGIN
161 self.oSheet->GetProperty, inputRange, Range = oCellRange
162 self.oCellRange = oCellRange
163 ENDELSE
164
165 self.oCellRange->GetProperty, Value = myValues
166
167 IF (Size(myValues, /Type) EQ 0) THEN BEGIN ; undefined
168 Message, 'Invalid Range '+range+'? Mixed data types not supported.'+ $
169 ' Data must be numeric and contiguous.', /Ioerror
170 ENDIF ELSE Return, myValues
171 END
172
173 ;-----------------------------------------------------------------
174 ;
175 ;設置單元格數據
176 ;
177 PRO ITCffExcel::SetRangeData, inputRange, value
178
179 COMPILE_OPT IDL2
180
181 On_Error, 2
182
183 IF (Obj_Valid(self.oCellRange)) THEN Obj_Destroy, self.oCellRange
184
185 IF (Size(inputRange, /Dimensions) EQ 2) THEN BEGIN
186 self.oSheet->GetProperty, inputRange[0], inputRange[1], Range = oCellRange
187 self.oCellRange = oCellRange
188 ENDIF ELSE BEGIN
189 self.oSheet->GetProperty, inputRange, Range = oCellRange
190 self.oCellRange = oCellRange
191 ENDELSE
192
193 self.oCellRange->SetProperty, 'select', Value = value
194
195 Obj_Destroy, self.oCellRange
196 END
197
198 ;-----------------------------------------------------------------
199 ; Sets Properties on ITCffExcel Object
200 ;
201 ; @Keyword:
202 ;
203 ; Sheet {in}{optional}{scalar string} input
204 ;
205 ; Example:
206 ;
207 ; oExcel = Obj_New("ITCffExcel", "myData.xls")
208 ; oExcel->SetPropery, SHEET="Sheet2"
209 ;-
210 PRO ITCffExcel::SetProperty, Sheet = sheet, _Extra = extra
211
212 COMPILE_OPT IDL2
213
214 On_Error, 2
215
216 IF (Obj_Valid(self.oSheet)) THEN Obj_Destroy, self.oSheet
217
218 self.oSheetCollection->GetProperty, sheet, Item = oSheet
219
220 self.oSheet = oSheet
221 END
222
223 ;-----------------------------------------------------------------
224 ;
225 ;析構
226 ;
227 PRO ITCffExcel::Cleanup
228
229 COMPILE_OPT IDL2
230
231 On_Error, 2
232
233 self.oWkBookData->SetProperty, Saved = 1
234 self.oWkBookCollection->Close
235 self.oExcel->Quit
236
237 Obj_Destroy, [self.oSheet, self.oCellRange, self.oSheetCollection, $
238 self.oWkBookData, self.oWkBookCollection, self.oExcel]
239 END
240
241 ;-----------------------------------------------------------------
242 ;
243 ;初始化
244 ;
245 FUNCTION ITCffExcel::Init, fileName, Sheet = sheet
246
247 COMPILE_OPT IDL2
248
249 On_Error, 2
250
251 IF (N_Params() LT 1) THEN Message, 'ITCffExcel::Init requires file name'
252
253 ; Use the IDL COM import bridge to init Excel Application Object
254 self.oExcel = Obj_New("IDLcomIDispatch$PROGID$Excel_Application")
255
256 IF ~self.oExcel THEN Return, 0
257
258 ; Get a reference to the Excel Workbook Collection Object
259 self.oExcel->GetProperty, Workbooks = oWkBookCollection
260 self.oWkBookCollection = oWkBookCollection
261
262 self.fileName = fileName
263
264 ; Open the Excel data
265 self.oWkBookData = self.oWkBookCollection->Open(self.fileName)
266
267 ; Get a reference to the sheets collection
268 self.oWkBookData->GetProperty, Sheets = oSheetCollection
269 self.oSheetCollection = oSheetCollection
270
271 ; Parmamerized property - props can return a value
272 ; (this syntax used in collections) - Goofy COM

273 IF (Keyword_Set(sheet)) THEN BEGIN
274 self.oSheetCollection->GetProperty, sheet, Item = oSheet
275 self.oSheet = oSheet
276 ENDIF ELSE BEGIN
277 self.oSheetCollection->GetProperty, 'Sheet1', Item=oSheet
278 self.oSheet = oSheet
279 ENDELSE
280
281 Return, 1
282 END
283
284 ;-----------------------------------------------------------------
285 ;
286 ;定義
287 ;
288 PRO ITCffExcel__Define
289
290 COMPILE_OPT IDL2
291
292 void = {ITCffExcel , $
293
294 ;參數
295 fileName : '' , $
296
297 ;對象
298 oExcel : Obj_New() , $
299 oWkBookCollection : Obj_New() , $
300 oWkBookData : Obj_New() , $
301 oSheetCollection : Obj_New() , $
302 oSheet : Obj_New() , $
303 oCellRange : Obj_New() $
304 }
305
306 END

