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,  false false );
  6. 在代码中对原先是合并的单元格使用上面的PasteSpecial方法后,可能会把原先合并的单元格拆分开,我在项目中解决的办法是,在查找的时候,把原先合并的单元格Range对象保存到数组中,然后PasteSpecial,在代码最后再对数组中的单元格进行合并。
    ContractedBlock.gif ExpandedBlockStart.gif CellUnit
    Excel.Range[] mergeDataRange = new Excel.Range[2048];//用于保存原模板中单元格合并状态的数组
    //查找newRange
    if((bool)newRange.MergeCells== true)
    ExpandedBlockStart.gifContractedBlock.gif 
    {
       mergeDataRange[i] 
    = newRange.MergeArea;
     }

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

       
    else
    ExpandedSubBlockStart.gifContractedSubBlock.gif   
    {
        
    break;
       }

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

转载于:https://www.cnblogs.com/Jinspet/archive/2008/09/25/1298525.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值