经常需要在开发中使用Excel COM,为简化使用写了这个类,感觉还是不太方便。
  1
using System;
  2
  3
namespace ExcelHandle
  4

{
  5
    /**//// <summary>
  6
    /// ExcelHandle 的摘要说明。
  7
    /// </summary>
  8
    public class ExcelHandle
  9
    
{
 10
 11
        /**//// <summary>
 12
        /// Excel
 13
        /// </summary>
 14
        public Excel.Application CurExcel = null;
 15
 16
        /**//// <summary>
 17
        /// 工作簿
 18
        /// </summary>
 19
        public Excel._Workbook CurBook = null;
 20
 21
        /**//// <summary>
 22
        /// 工作表
 23
        /// </summary>
 24
        public Excel._Worksheet CurSheet = null;
 25
 26
        private object mValue = System.Reflection.Missing.Value;
 27
 28
        /**//// <summary>
 29
        /// 构造函数
 30
        /// </summary>
 31
        public ExcelHandle()
 32
        
{
 33
            //
 34
            // TODO: 在此处添加构造函数逻辑
 35
            //    
 36
 37
            this.dtBefore = System.DateTime.Now;
 38
            
 39
            CurExcel = new Excel.Application();
 40
 41
            this.dtAfter = System.DateTime.Now;
 42
 43
            this.timestamp = System.DateTime.Now.ToShortDateString().Replace("-", "") + System.DateTime.Now.ToShortTimeString().Replace(":", "") + System.DateTime.Now.Second.ToString() + System.DateTime.Now.Millisecond.ToString();
 44
 45
        }
 46
 47
        /**//// <summary>
 48
        /// 构造函数
 49
        /// </summary>
 50
        /// <param name="strFilePath">加载的Excel文件名</param>
 51
        public ExcelHandle(string strFilePath)
 52
        
{
 53
 54
            this.dtBefore = System.DateTime.Now;
 55
 56
            CurExcel = new Excel.Application();
 57
 58
            this.dtAfter = System.DateTime.Now;
 59
 60
            CurBook = (Excel._Workbook)CurExcel.Workbooks.Open(strFilePath, mValue, false, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue);
 61
 62
            this.timestamp = System.DateTime.Now.ToShortDateString().Replace("-", "") + System.DateTime.Now.ToShortTimeString().Replace(":", "") + System.DateTime.Now.Second.ToString() + System.DateTime.Now.Millisecond.ToString();
 63
 64
        }
 65
 66
        /**//// <summary>
 67
        /// 释放内存空间
 68
        /// </summary>
 69
        public void Dispose()
 70
        
{
 71
            try
 72
            
{
 73
                System.Runtime.InteropServices.Marshal.ReleaseComObject(CurSheet);
 74
                CurSheet = null;
 75
 76
                CurBook.Close(false, mValue, mValue);
 77
                System.Runtime.InteropServices.Marshal.ReleaseComObject(CurBook);
 78
                CurBook = null;
 79
 80
                CurExcel.Quit();
 81
                System.Runtime.InteropServices.Marshal.ReleaseComObject(CurExcel);
 82
                CurExcel = null;
 83
            
 84
                GC.Collect();
 85
                GC.WaitForPendingFinalizers();
 86
            
 87
            }
 88
            catch(System.Exception ex)
 89
            
{
 90
                this.MessageWarning("在释放Excel内存空间时发生了一个错误:", ex);
 91
            }
 92
            finally
 93
            
{
 94
                foreach(System.Diagnostics.Process pro in System.Diagnostics.Process.GetProcessesByName("Excel"))                    
 95
                    if (pro.StartTime > this.dtBefore && pro.StartTime < this.dtAfter)
 96
                        pro.Kill();
 97
            }
 98
            System.GC.SuppressFinalize(this);
 99
        }
100
101
102
        private string filepath;
103
        private string timestamp;
104
        private System.DateTime dtBefore;
105
        private System.DateTime dtAfter;
106
107
108
        /**//// <summary>
109
        /// Excel文件名
110
        /// </summary>
111
        public string FilePath
112
        
{
113
            get
114
            
{
115
                return this.filepath;
116
            }
117
            set
118
            
{
119
                this.filepath = value;
120
            }
121
        }
122
123
        /**//// <summary>
124
        /// 是否打开Excel界面
125
        /// </summary>
126
        public bool Visible
127
        
{
128
            set
129
            
{
130
                CurExcel.Visible = value;
131
            }
132
        }
133
134
        /**//// <summary>
135
        /// 以时间字符串作为保存文件的名称
136
        /// </summary>
137
        public string TimeStamp
138
        
{
139
            get
140
            
{
141
                return this.timestamp;
142
            }
143
            set
144
            
{
145
                this.timestamp = value;
146
            }
147
        }
148
149
150
        /**//// <summary>
151
        /// 加载Excel文件
152
        /// </summary>
153
        public void Load()
154
        
{
155
            if (CurBook == null && this.filepath != null)
156
                CurBook = (Excel._Workbook)CurExcel.Workbooks.Open(this.filepath, mValue, false, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue);
157
        }
158
159
        /**//// <summary>
160
        /// 加载Excel文件
161
        /// </summary>
162
        /// <param name="strFilePath">Excel文件名</param>
163
        public void Load(string strFilePath)
164
        
{
165
            if (CurBook == null)
166
                CurBook = (Excel._Workbook)CurExcel.Workbooks.Open(strFilePath, mValue, false, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue);
167
        }
168
169
        /**//// <summary>
170
        /// 新建工作表
171
        /// </summary>
172
        /// <param name="strWorkSheetName">工作表名称</param>
173
        public void NewWorkSheet(string strWorkSheetName)
174
        
{
175
            CurSheet = (Excel._Worksheet)CurBook.Sheets.Add(CurBook.Sheets[1], mValue, mValue, mValue);
176
            CurSheet.Name = strWorkSheetName;
177
        }
178
179
        /**//// <summary>
180
        /// 在指定单元格插入指定的值
181
        /// </summary>
182
        /// <param name="strCell">单元格,如“A4”</param>
183
        /// <param name="objValue">文本、数字等值</param>
184
        public void WriteCell(string strCell, object objValue)
185
        
{
186
            CurSheet.get_Range(strCell, mValue).Value2 = objValue;
187
        }
188
189
        /**//// <summary>
190
        /// 在指定Range中插入指定的值
191
        /// </summary>
192
        /// <param name="strStartCell">Range的开始单元格</param>
193
        /// <param name="strEndCell">Range的结束单元格</param>
194
        /// <param name="objValue">文本、数字等值</param>
195
        public void WriteRange(string strStartCell, string strEndCell, object objValue)
196
        
{
197
            CurSheet.get_Range(strStartCell, strEndCell).Value2 = objValue;
198
        }
199
200
201
        /**//// <summary>
202
        /// 合并单元格,并在合并后的单元格中插入指定的值
203
        /// </summary>
204
        /// <param name="strStartCell"></param>
205
        /// <param name="strEndCell"></param>
206
        /// <param name="objValue"></param>
207
        public void WriteAfterMerge(string strStartCell, string strEndCell, object objValue)
208
        
{
209
            CurSheet.get_Range(strStartCell, strEndCell).Merge(mValue);
210
            CurSheet.get_Range(strStartCell, mValue).Value2 = objValue;
211
        }
212
213
        /**//// <summary>
214
        /// 在连续单元格中插入一个DataTable中的值
215
        /// </summary>
216
        /// <param name="strStartCell">开始的单元格</param>
217
        /// <param name="dtData">存储数据的DataTable</param>
218
        public void WriteTable(string strStartCell, System.Data.DataTable dtData)
219
        
{
220
            object[,] arrData = new object[dtData.Rows.Count, dtData.Columns.Count];
221
222
            for (int i = 0; i < dtData.Rows.Count; i ++)
223
                for (int j = 0; j < dtData.Columns.Count; j ++)
224
                    arrData[i, j] = dtData.Rows[i][j];
225
226
            CurSheet.get_Range(strStartCell, this.GetEndCell(strStartCell, dtData.Rows.Count - 1, dtData.Columns.Count - 1)).Value2 = arrData;
227
228
            arrData = null;
229
        }
230
231
        /**//// <summary>
232
        /// 在连续单元格中插入一个DataTable并作超级链接
233
        /// </summary>
234
        /// <param name="strStartCell">起始单元格标识符</param>
235
        /// <param name="dtData">存储数据的DataTable</param>
236
        /// <param name="strLinkField">链接的地址字段</param>
237
        /// <param name="strTextField">链接的文本字段</param>
238
        public void WriteTableAndLink(string strStartCell, System.Data.DataTable dtData, string strLinkField, string strTextField)
239
        
{
240
            object[,] arrData = new object[dtData.Rows.Count, dtData.Columns.Count - 1];
241
242
            for (int i = 0; i < dtData.Rows.Count; i ++)
243
            
{
244
                for (int j = 0; j < dtData.Columns.Count; j ++)
245
                
{
246
                    if (j > dtData.Columns.IndexOf(strLinkField))
247
                        arrData[i, j - 1] = dtData.Rows[i][j];
248
                    else if (j < dtData.Columns.IndexOf(strLinkField))
249
                        arrData[i, j] = dtData.Rows[i][j];
250
                }
251
            }
252
253
            CurSheet.get_Range(strStartCell, this.GetEndCell(strStartCell, dtData.Rows.Count - 1, dtData.Columns.Count - 2)).Value2 = arrData;
254
255
            for (int i = 0; i < dtData.Rows.Count; i ++)
256
                this.AddHyperLink(this.NtoL(this.LtoN(this.GetCellLetter(strStartCell)) + dtData.Columns.IndexOf(strTextField)) + System.Convert.ToString(this.GetCellNumber(strStartCell) + i), dtData.Rows[i][strLinkField].ToString() + ".htm", "点击查看详细", dtData.Rows[i][strTextField].ToString());
257
258
            arrData = null;
259
        }
260
261
        /**//// <summary>
262
        /// 为单元格设置公式
263
        /// </summary>
264
        /// <param name="strCell">单元格标识符</param>
265
        /// <param name="strFormula">公式</param>
266
        public void SetFormula(string strCell, string strFormula)
267
        
{
268
            CurSheet.get_Range(strCell, mValue).Formula = strFormula;
269
        }
270
271
        /**//// <summary>
272
        /// 设置单元格或连续区域的字体为黑体
273
        /// </summary>
274
        /// <param name="strCell">单元格标识符</param>
275
        public void SetBold(string strCell)
276
        
{
277
            CurSheet.get_Range(strCell, mValue).Font.Bold = true;
278
        }
279
280
        /**//// <summary>
281
        /// 设置连续区域的字体为黑体
282
        /// </summary>
283
        /// <param name="strStartCell">开始单元格标识符</param>
284
        /// <param name="strEndCell">结束单元格标识符</param>
285
        public void SetBold(string strStartCell, string strEndCell)
286
        
{
287
            CurSheet.get_Range(strStartCell, strEndCell).Font.Bold = true;
288
        }
289
290
        /**//// <summary>
291
        /// 设置单元格或连续区域的字体颜色
292
        /// </summary>
293
        /// <param name="strCell">单元格标识符</param>
294
        /// <param name="clrColor">颜色</param>
295
        public void SetColor(string strCell, System.Drawing.Color clrColor)
296
        
{
297
            CurSheet.get_Range(strCell, mValue).Font.Color = System.Drawing.ColorTranslator.ToOle(clrColor);
298
        }
299
300
        /**//// <summary>
301
        /// 设置连续区域的字体颜色
302
        /// </summary>
303
        /// <param name="strStartCell">开始单元格标识符</param>
304
        /// <param name="strEndCell">结束单元格标识符</param>
305
        /// <param name="clrColor">颜色</param>
306
        public void SetColor(string strStartCell, string strEndCell, System.Drawing.Color clrColor)
307
        
{
308
            CurSheet.get_Range(strStartCell, strEndCell).Font.Color = System.Drawing.ColorTranslator.ToOle(clrColor);
309
        }
310
311
        /**//// <summary>
312
        /// 设置单元格或连续区域的边框:上下左右都为黑色连续边框
313
        /// </summary>
314
        /// <param name="strCell">单元格标识符</param>
315
        public void SetBorderAll(string strCell)
316
        
{
317
            CurSheet.get_Range(strCell, mValue).Borders[Excel.XlBordersIndex.xlEdgeTop].Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.LightGray);
318
            CurSheet.get_Range(strCell, mValue).Borders[Excel.XlBordersIndex.xlEdgeTop].LineStyle = Excel.XlLineStyle.xlContinuous;
319
320
            CurSheet.get_Range(strCell, mValue).Borders[Excel.XlBordersIndex.xlEdgeBottom].Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.LightGray);
321
            CurSheet.get_Range(strCell, mValue).Borders[Excel.XlBordersIndex.xlEdgeBottom].LineStyle = Excel.XlLineStyle.xlContinuous;
322
323
            CurSheet.get_Range(strCell, mValue).Borders[Excel.XlBordersIndex.xlEdgeLeft].Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.LightGray);
324
            CurSheet.get_Range(strCell, mValue).Borders[Excel.XlBordersIndex.xlEdgeLeft].LineStyle = Excel.XlLineStyle.xlContinuous;
325
326
            CurSheet.get_Range(strCell, mValue).Borders[Excel.XlBordersIndex.xlEdgeRight].Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.LightGray);
327
            CurSheet.get_Range(strCell, mValue).Borders[Excel.XlBordersIndex.xlEdgeRight].LineStyle = Excel.XlLineStyle.xlContinuous;
328
329
            CurSheet.get_Range(strCell, mValue).Borders[Excel.XlBordersIndex.xlInsideHorizontal].Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.LightGray);
330
            CurSheet.get_Range(strCell, mValue).Borders[Excel.XlBordersIndex.xlInsideHorizontal].LineStyle = Excel.XlLineStyle.xlContinuous;
331
332
            CurSheet.get_Range(strCell, mValue).Borders[Excel.XlBordersIndex.xlInsideVertical].Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.LightGray);
333
            CurSheet.get_Range(strCell, mValue).Borders[Excel.XlBordersIndex.xlInsideVertical].LineStyle = Excel.XlLineStyle.xlContinuous;
334
335
336
        }
337
338
        /**//// <summary>
339
        /// 设置连续区域的边框:上下左右都为黑色连续边框
340
        /// </summary>
341
        /// <param name="strStartCell">开始单元格标识符</param>
342
        /// <param name="strEndCell">结束单元格标识符</param>
343
        public void SetBorderAll(string strStartCell, string strEndCell)
344
        
{
345
            CurSheet.get_Range(strStartCell, strEndCell).Borders[Excel.XlBordersIndex.xlEdgeTop].Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.LightGray);
346
            CurSheet.get_Range(strStartCell, strEndCell).Borders[Excel.XlBordersIndex.xlEdgeTop].LineStyle = Excel.XlLineStyle.xlContinuous;
347
348
            CurSheet.get_Range(strStartCell, strEndCell).Borders[Excel.XlBordersIndex.xlEdgeBottom].Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.LightGray);
349
            CurSheet.get_Range(strStartCell, strEndCell).Borders[Excel.XlBordersIndex.xlEdgeBottom].LineStyle = Excel.XlLineStyle.xlContinuous;
350
351
            CurSheet.get_Range(strStartCell, strEndCell).Borders[Excel.XlBordersIndex.xlEdgeLeft].Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.LightGray);
352
            CurSheet.get_Range(strStartCell, strEndCell).Borders[Excel.XlBordersIndex.xlEdgeLeft].LineStyle = Excel.XlLineStyle.xlContinuous;
353
354
            CurSheet.get_Range(strStartCell, strEndCell).Borders[Excel.XlBordersIndex.xlEdgeRight].Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.LightGray);
355
            CurSheet.get_Range(strStartCell, strEndCell).Borders[Excel.XlBordersIndex.xlEdgeRight].LineStyle = Excel.XlLineStyle.xlContinuous;
356
357
            CurSheet.get_Range(strStartCell, strEndCell).Borders[Excel.XlBordersIndex.xlInsideHorizontal].Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.LightGray);
358
            CurSheet.get_Range(strStartCell, strEndCell).Borders[Excel.XlBordersIndex.xlInsideHorizontal].LineStyle = Excel.XlLineStyle.xlContinuous;
359
360
            CurSheet.get_Range(strStartCell, strEndCell).Borders[Excel.XlBordersIndex.xlInsideVertical].Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.LightGray);
361
            CurSheet.get_Range(strStartCell, strEndCell).Borders[Excel.XlBordersIndex.xlInsideVertical].LineStyle = Excel.XlLineStyle.xlContinuous;
362
        }
363
364
        /**//// <summary>
365
        /// 设置单元格或连续区域水平居左
366
        /// </summary>
367
        /// <param name="strCell">单元格标识符</param>
368
        public void SetHAlignLeft(string strCell)
369
        
{
370
            CurSheet.get_Range(strCell, mValue).HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft;
371
        }
372
373
        /**//// <summary>
374
        /// 设置连续区域水平居左
375
        /// </summary>
376
        /// <param name="strStartCell">开始单元格标识符</param>
377
        /// <param name="strEndCell">结束单元格标识符</param>
378
        public void SetHAlignLeft(string strStartCell, string strEndCell)
379
        
{
380
            CurSheet.get_Range(strStartCell, strEndCell).HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft;
381
        }
382
383
        /**//// <summary>
384
        /// 设置单元格或连续区域水平居左
385
        /// </summary>
386
        /// <param name="strCell">单元格标识符</param>
387
        public void SetHAlignCenter(string strCell)
388
        
{
389
            CurSheet.get_Range(strCell, mValue).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
390
        }
391
392
        /**//// <summary>
393
        /// 设置连续区域水平居中
394
        /// </summary>
395
        /// <param name="strStartCell">开始单元格标识符</param>
396
        /// <param name="strEndCell">结束单元格标识符</param>
397
        public void SetHAlignCenter(string strStartCell, string strEndCell)
398
        
{
399
            CurSheet.get_Range(strStartCell, strEndCell).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
400
        }
401
402
        /**//// <summary>
403
        /// 设置单元格或连续区域水平居右
404
        /// </summary>
405
        /// <param name="strCell">单元格标识符</param>
406
        public void SetHAlignRight(string strCell)
407
        
{
408
            CurSheet.get_Range(strCell, mValue).HorizontalAlignment = Excel.XlHAlign.xlHAlignRight;
409
        }
410
411
        /**//// <summary>
412
        /// 设置连续区域水平居右
413
        /// </summary>
414
        /// <param name="strStartCell">开始单元格标识符</param>
415
        /// <param name="strEndCell">结束单元格标识符</param>
416
        public void SetHAlignRight(string strStartCell, string strEndCell)
417
        
{
418
            CurSheet.get_Range(strStartCell, strEndCell).HorizontalAlignment = Excel.XlHAlign.xlHAlignRight;
419
        }
420
421
        /**//// <summary>
422
        /// 设置单元格或连续区域的显示格式
423
        /// </summary>
424
        /// <param name="strCell">单元格标识符</param>
425
        /// <param name="strNF">如"#,##0.00"的显示格式</param>
426
        public void SetNumberFormat(string strCell, string strNF)
427
        
{
428
            CurSheet.get_Range(strCell, mValue).NumberFormat = strNF;
429
        }
430
431
        /**//// <summary>
432
        /// 设置连续区域的显示格式
433
        /// </summary>
434
        /// <param name="strStartCell">开始单元格标识符</param>
435
        /// <param name="strEndCell">结束单元格标识符</param>
436
        /// <param name="strNF">如"#,##0.00"的显示格式</param>
437
        public void SetNumberFormat(string strStartCell, string strEndCell, string strNF)
438
        
{
439
            CurSheet.get_Range(strStartCell, strEndCell).NumberFormat = strNF;
440
        }
441
442
        /**//// <summary>
443
        /// 设置单元格或连续区域的字体大小
444
        /// </summary>
445
        /// <param name="strCell">单元格或连续区域标识符</param>
446
        /// <param name="intFontSize"></param>
447
        public void SetFontSize(string strCell, int intFontSize)
448
        
{
449
            CurSheet.get_Range(strCell, mValue).Font.Size = intFontSize.ToString();
450
        }
451
452
        /**//// <summary>
453
        /// 设置连续区域的字体大小
454
        /// </summary>
455
        /// <param name="strStartCell">开始单元格标识符</param>
456
        /// <param name="strEndCell">结束单元格标识符</param>
457
        /// <param name="intFontSize">字体大小</param>
458
        public void SetFontSize(string strStartCell, string strEndCell, int intFontSize)
459
        
{
460
            CurSheet.get_Range(strStartCell, strEndCell).Font.Size = intFontSize.ToString();
461
        }
462
463
        /**//// <summary>
464
        /// 设置列宽
465
        /// </summary>
466
        /// <param name="strColID">列标识,如A代表第一列</param>
467
        /// <param name="decWidth">宽度</param>
468
        public void SetColumnWidth(string strColID, double dblWidth)
469
        
{
470
            ((Excel.Range)CurSheet.Columns.GetType().InvokeMember("Item", System.Reflection.BindingFlags.GetProperty, null, CurSheet.Columns, new object[]
{(strColID + ":" + strColID).ToString()})).ColumnWidth = dblWidth;
471
        }
472
473
        /**//// <summary>
474
        /// 为单元格添加超级链接
475
        /// </summary>
476
        /// <param name="strCell">单元格标识符</param>
477
        /// <param name="strAddress">链接地址</param>
478
        /// <param name="strTip">屏幕提示</param>
479
        /// <param name="strText">链接文本</param>
480
        public void AddHyperLink(string strCell, string strAddress, string strTip, string strText)
481
        
{
482
            CurSheet.Hyperlinks.Add(CurSheet.get_Range(strCell, mValue), strAddress, mValue, strTip, strText);
483
        }
484
485
        /**//// <summary>
486
        /// 已知开始的单元格标识,求intR行、intColumn列后的单元格标识
487
        /// </summary>
488
        /// <param name="strStartCell">开始单元格标识</param>
489
        /// <param name="intR">行数</param>
490
        /// <param name="intC">列数</param>
491
        /// <returns>单元格标识符结果</returns>
492
        public string GetEndCell(string strStartCell, int intR, int intC)
493
        
{
494
495
            System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"^(?<vLetter>[A-Z]+)(?<vNumber>\d+)");
496
497
            return this.NtoL(this.LtoN(regex.Match(strStartCell).Result("${vLetter}")) + intC) + System.Convert.ToString((System.Convert.ToInt32(regex.Match(strStartCell).Result("${vNumber}")) + intR));
498
499
        }
500
501
        /**//// <summary>
502
        /// 获取单元格标识符中的字母
503
        /// </summary>
504
        /// <param name="strCell">单元格标识符</param>
505
        /// <returns>单元格标识符对应的字母</returns>
506
        public string GetCellLetter(string strCell)
507
        
{
508
            System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"^(?<vLetter>[A-Z]+)(?<vNumber>\d+)");
509
            return regex.Match(strCell).Result("${vLetter}");
510
        }
511
512
        /**//// <summary>
513
        /// 获取单元格标识符中的数字
514
        /// </summary>
515
        /// <param name="strCell">单元格标识符</param>
516
        public int GetCellNumber(string strCell)
517
        
{
518
            System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"^(?<vLetter>[A-Z]+)(?<vNumber>\d+)");
519
            return System.Convert.ToInt32(regex.Match(strCell).Result("${vNumber}"));
520
        }
521
522
523
        /**//// <summary>
524
        /// 另存为xls文件
525
        /// </summary>
526
        /// <param name="strFilePath">文件路径</param>
527
        public void Save(string strFilePath)
528
        
{
529
            CurBook.SaveCopyAs(strFilePath);
530
        }
531
532
        /**//// <summary>
533
        /// 另存为html文件
534
        /// </summary>
535
        /// <param name="strFilePath">文件路径</param>
536
        public void SaveHtml(string strFilePath)
537
        
{
538
            CurBook.SaveAs(strFilePath, Excel.XlFileFormat.xlHtml, mValue, mValue, mValue, mValue, Excel.XlSaveAsAccessMode.xlNoChange, mValue, mValue, mValue, mValue, mValue);
539
        }
540
541
        public void CreateHtmlFile()
542
        
{
543
            
544
        }
545
546
547
           
548
        辅助函数#region 辅助函数
549
550
        /**//// <summary>
551
        /// 调用MessageBox显示警告信息
552
        /// </summary>
553
        /// <param name="text">警告信息</param>
554
        private void MessageWarning(string text)
555
        
{
556
            System.Windows.Forms.MessageBox.Show(text, "Excel操作组件", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Warning);
557
        }
558
559
        /**//// <summary>
560
        /// 调用MessageBox显示警告信息
561
        /// </summary>
562
        /// <param name="text">警告信息</param>
563
        /// <param name="ex">产生警告的异常</param>
564
        private void MessageWarning(string text, System.Exception ex)
565
        
{
566
            System.Windows.Forms.MessageBox.Show(text + "\n\n错误信息:\n" + ex.Message + "\n堆栈跟踪:" + ex.StackTrace + "\n错误来源:" + ex.Source, "Excel操作组件", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Warning);
567
        }
568
569
        /**//// <summary>
570
        /// 字母转换为数字,Excel列头,如A-1;AA-27
571
        /// </summary>
572
        /// <param name="strLetter">字母</param>
573
        /// <returns>字母对应的数字</returns>
574
        private int LtoN(string strLetter)
575
        
{
576
            int intRtn = 0;
577
578
            string strLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
579
580
            if (strLetter.Length == 2)
581
                intRtn += (strLetters.IndexOf(strLetter.Substring(0, 1)) + 1) * 26;
582
583
            intRtn += strLetters.IndexOf(strLetter.Substring(strLetter.Length - 1, 1)) + 1;
584
585
            return intRtn;
586
587
        }
588
589
        /**//// <summary>
590
        /// 数字转换为字母,Excel列头,如1-A;27-AA
591
        /// </summary>
592
        /// <param name="intNumber">数字</param>
593
        /// <returns>数字对应的字母</returns>
594
        private string NtoL(int intNumber)
595
        
{
596
            if (intNumber > 702)
597
                return String.Empty;
598
599
            if (intNumber == 702)
600
                return "ZZ";
601
602
            string strRtn = String.Empty;
603
604
            string strLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
605
606
            if (intNumber > 26) 
607
                strRtn = strLetters.Substring(intNumber / 26 - 1, 1);
608
            
609
            strRtn += strLetters.Substring((intNumber % 26) - 1, 1);
610
611
            return strRtn;
612
        }
613
614
        #endregion 辅助函数
615
616
617
618
    }
619
}
620
621