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
  • 相关阅读:
    c++类的知识点(1)
    并查集经典例题分析
    并查集
    bfs-迷宫
    出栈次序--数学归纳法--蓝桥
    九宫重排
    Tomcat详解
    寒假日记-第三天
    寒假日记-第二天(MySQL语句)
    Java学期总结
  • 原文地址:https://www.cnblogs.com/top5/p/1685403.html
Copyright © 2011-2022 走看看