Excel物件模型的一些使用心得(C#)

iDotNetSpace發表於2008-09-25

     最近在做一個很小的專案,做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.     插入空行,插入空列。
    <!--

    Code highlighting produced by Actipro CodeHighlighter (freeware)
    http://www.CodeHighlighter.com/

    --&gtpublic 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. 向單元格新增批註。
    <!--

    Code highlighting produced by Actipro CodeHighlighter (freeware)
    http://www.CodeHighlighter.com/

    --&gt/// 
    /// 新增批註
    /// 
    /// 批註
    /// 
    /// 
    /// 
    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. 設定行高。
    <!--

    Code highlighting produced by Actipro CodeHighlighter (freeware)
    http://www.CodeHighlighter.com/

    --&gt/// 
    /// 設定行高
    /// 
    /// 起始行
    /// 結束行
    /// 行高
    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格式功能,即格式刷功能。
    <!--

    Code highlighting produced by Actipro CodeHighlighter (freeware)
    http://www.CodeHighlighter.com/

    --&gtnewRange.PasteSpecial(Excel.XlPasteType.xlPasteFormats, Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone, falsefalse);
  6. 在程式碼中對原先是合併的單元格使用上面的PasteSpecial方法後,可能會把原先合併的單元格拆分開,我在專案中解決的辦法是,在查詢的時候,把原先合併的單元格Range物件儲存到陣列中,然後PasteSpecial,在程式碼最後再對陣列中的單元格進行合併。
    Excel物件模型的一些使用心得(C#)
    <!--

    Code highlighting produced by Actipro CodeHighlighter (freeware)
    http://www.CodeHighlighter.com/

    --&gtExcel.Range[] mergeDataRange = new Excel.Range[2048];//用於儲存原模板中單元格合併狀態的陣列
    //查詢newRange
    if((bool)newRange.MergeCells== true)
    Excel物件模型的一些使用心得(C#) 
    {
       mergeDataRange[i] 
    = newRange.MergeArea;
     }

     
    //對所有原來是合併的單元格進行重新合併
    foreach (Excel.Range range1 in mergeDataRange)
    Excel物件模型的一些使用心得(C#) 
    {
       
    if (range1 != null && range1.Count !=1)
    Excel物件模型的一些使用心得(C#)   
    {
        range1.Merge(Type.Missing);
       }

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

     }
  7. 以上列出的功能很少,僅僅是為了給自己的工作做一下小結,回顧一下自己寫的程式碼,同時也期待各位朋友的指正和討論。另外,在做Office開發用到COM元件的時候,遇到不熟悉的功能,可以在Office中錄製巨集,把自己需要解決的問題用VBA記錄下來,然後檢視,對自己編寫程式碼會有很大啟發。
  8. 另外MSDN對Excel物件模型有個比較詳細的介紹:http://msdn.microsoft.com/zh-cn/library/aa168292(office.11,printer).aspx

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-464291/,如需轉載,請註明出處,否則將追究法律責任。

相關文章