Excel对象模型的一些使用心得(C#)

时间:2021-08-23 14:31:19

     最近在做一个很小的项目,做Excel的导出。用到了Excel 10.0 (用户要求),对应的Office版本是2002(XP).在某篇文章中找到了一个操作Excel对象的基础类,里面的方法比较全了,我这里只记录我所做项目中用到的几个特殊的用法。

        Excel.Application myExcel;
        Excel.Workbook myWorkBook;

  1.      单元格查找功能,即实现Excel中的(Ctrl+F)功能。
    Excel.Range newRange = range.Find(conditions, rangeAfter, Excel.XlFindLookIn.xlFormulas, Excel.XlLookAt.xlPart, Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, false, false, false);其中conditions为查找的条件,rangeafter为从哪个单元格之后开始查找。Find()方法返回类型也为Range。
  2.     插入空行,插入空列。
    public   void  InsertRow( int  startRow,  int  endRow)
      {
        Excel.Worksheet worksheet 
    =  (Excel.Worksheet)myExcel.ActiveSheet; // 获取当前工作表
         Excel.Range range  =  (Excel.Range)worksheet.Rows[startRow.ToString()  +   " : "   +  endRow.ToString(),System.Type.Missing];
        range.Insert(Excel.XlInsertShiftDirection.xlShiftDown, Type.Missing);         
      }

     
    public   void  InsertColumn( int  startColumn,  int  endColumn)
      {
        Excel.Worksheet worksheet 
    =  (Excel.Worksheet)myExcel.ActiveSheet; // 获取当前工作表
        Excel.Range range  =  (Excel.Range)worksheet.Columns[Type.Missing, startColumn.ToString()  +   " : "   +  endColumn.ToString()];
       range.Insert(Excel.XlInsertShiftDirection.xlShiftToRight, Type.Missing);          
      }
  3. 向单元格添加批注。
    ///   <summary>
    ///  添加批注
    ///   </summary>
    ///   <param name="coment"> 批注 </param>
    ///   <param name="row"> </param>
    ///   <param name="column"> </param>
    ///   <returns></returns>
    public   bool  AddComent( object  coment,  int  row,  int  column)
      {
        
    try
         {
           Excel.Range range 
    =  myExcel.get_Range(myExcel.Cells[row, column], myExcel.Cells[row, column]);
           range.AddComment(coment);
          
    return   true ;
         }
       
    catch
          {
           
    return   false ;
          }
       }
  4. 设置行高。
    ///   <summary>
    ///  设置行高
    ///   </summary>
    ///   <param name="startRow"> 起始行 </param>
    ///   <param name="endRow"> 结束行 </param>
    ///   <param name="height"> 行高 </param>
    public   void  SetRowHeight( int  startRow,  int  endRow,  int  height)
     {
        
    // 获取当前正在使用的工作表
         Excel.Worksheet worksheet  =  (Excel.Worksheet)myExcel.ActiveSheet;
        Excel.Range range 
    =  (Excel.Range)worksheet.Rows[startRow.ToString()  +   " : "   +  endRow.ToString(), System.Type.Missing];
        range.RowHeight 
    =  height;
     }
  5. 实现Copy格式功能,即格式刷功能。
    newRange.PasteSpecial(Excel.XlPasteType.xlPasteFormats, Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone,  false false );
  6. 在代码中对原先是合并的单元格使用上面的PasteSpecial方法后,可能会把原先合并的单元格拆分开,我在项目中解决的办法是,在查找的时候,把原先合并的单元格Range对象保存到数组中,然后PasteSpecial,在代码最后再对数组中的单元格进行合并。
    Excel对象模型的一些使用心得(C#)
    Excel对象模型的一些使用心得(C#)Excel.Range[] mergeDataRange = new Excel.Range[2048];//用于保存原模板中单元格合并状态的数组
    Excel对象模型的一些使用心得(C#)
    //查找newRange
    Excel对象模型的一些使用心得(C#)
    if((bool)newRange.MergeCells== true)
    Excel对象模型的一些使用心得(C#) 
    {
    Excel对象模型的一些使用心得(C#)   mergeDataRange[i] 
    = newRange.MergeArea;
    Excel对象模型的一些使用心得(C#) }

    Excel对象模型的一些使用心得(C#) 
    //对所有原来是合并的单元格进行重新合并
    Excel对象模型的一些使用心得(C#)
    foreach (Excel.Range range1 in mergeDataRange)
    Excel对象模型的一些使用心得(C#) 
    {
    Excel对象模型的一些使用心得(C#)   
    if (range1 != null && range1.Count !=1)
    Excel对象模型的一些使用心得(C#)   
    {
    Excel对象模型的一些使用心得(C#)    range1.Merge(Type.Missing);
    Excel对象模型的一些使用心得(C#)   }

    Excel对象模型的一些使用心得(C#)   
    else
    Excel对象模型的一些使用心得(C#)   
    {
    Excel对象模型的一些使用心得(C#)    
    break;
    Excel对象模型的一些使用心得(C#)   }

    Excel对象模型的一些使用心得(C#) }
  7. 以上列出的功能很少,仅仅是为了给自己的工作做一下小结,回顾一下自己写的代码,同时也期待各位朋友的指正和讨论。另外,在做Office开发用到COM组件的时候,遇到不熟悉的功能,可以在Office中录制宏,把自己需要解决的问题用VBA记录下来,然后查看,对自己编写代码会有很大启发。
  8. 另外MSDN对Excel对象模型有个比较详细的介绍:http://msdn.microsoft.com/zh-cn/library/aa168292(office.11,printer).aspx