zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    SharePoint 2013 配置基于表单的身份认证
    SharePoint 2013 场解决方案包含第三方程序集
    SharePoint 2010 站点附加数据升级到SP2013
    SharePoint 2013 在母版页中插入WebPart
    SharePoint 2013 搭建负载均衡(NLB)
    SharePoint 部署解决方案Feature ID冲突
    SharePoint 2013 配置基于AD的Form认证
    SharePoint Server 2016 Update
    SharePoint 2013 为用户组自定义EventReceiver
    SharePoint 2013 JavaScript API 记录
  • 原文地址:https://www.cnblogs.com/top5/p/1685403.html
Copyright © 2011-2022 走看看