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

     最近在做一个很小的项目,做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, falsefalse);
  6. 在代码中对原先是合并的单元格使用上面的PasteSpecial方法后,可能会把原先合并的单元格拆分开,我在项目中解决的办法是,在查找的时候,把原先合并的单元格Range对象保存到数组中,然后PasteSpecial,在代码最后再对数组中的单元格进行合并。

    Excel.Range[] mergeDataRange = new Excel.Range[2048];//用于保存原模板中单元格合并状态的数组
    //查找newRange
    if((bool)newRange.MergeCells== true)
     
    {
       mergeDataRange[i] 
    = newRange.MergeArea;
     }

     
    //对所有原来是合并的单元格进行重新合并
    foreach (Excel.Range range1 in mergeDataRange)
     
    {
       
    if (range1 != null && range1.Count !=1)
       
    {
        range1.Merge(Type.Missing);
       }

       
    else
       
    {
        
    break;
       }

     }
  7. 以上列出的功能很少,仅仅是为了给自己的工作做一下小结,回顾一下自己写的代码,同时也期待各位朋友的指正和讨论。另外,在做Office开发用到COM组件的时候,遇到不熟悉的功能,可以在Office中录制宏,把自己需要解决的问题用VBA记录下来,然后查看,对自己编写代码会有很大启发。
  8. 另外MSDN对Excel对象模型有个比较详细的介绍:http://msdn.microsoft.com/zh-cn/library/aa168292(office.11,printer).aspx
posted @ 2010-03-14 11:03  与时俱进  阅读(982)  评论(0编辑  收藏  举报
友情链接:同里老宅院民居客栈