Visual C# 操作 Excel 文件(二) 封裝成 MyExcel 類

本文介绍了一个名为MyExcel的类的设计,该类简化了Excel文件的操作流程。通过三种构造方法可以实现新建Excel文件、打开现有文件以及指定工作表等功能。此外,还提供了设置和获取单元格值的方法。

上一篇介紹 Excel 的基本操作,煩瑣的程式碼,是不是令人心煩?

良好的類設計能使系統結構更加清晰,並可加強代碼的復用性和易維護性,減少開發的工作量。有鑑於此,我規劃了一個 MyExcel類,用于處理 Excel 的相關操作。

有三種打開 Excel 的方式:
1) 開啟一個新檔。
2) 開啟一個已存在的檔案。
3) 開啟一個已存在的檔案,並設定某工作表為作用中的工作表。

所以設計了三種建構方式:
aXLS = new MyExcel();
aXLS = new MyExcel(file);
aXLS = new MyExcel(file, "Sheet1");

不管存或取,都要指定單元格,而單元格的表示方式的有兩種,如:"B3" 或 [Row, Col],所以設計了如下的存取方法:

// 設定單元格的值。
SetCells(int nCol, int nRow, string szValue);
SetCells(string szRangeName, string szValue);

// 取得單元格的值。
GetCells(int nCol, int nRow);
GetCells(string szRangeName);

調用時:
aXLS = new MyExcel();
aXLS.SetCells("A1", "Hello!");
aXLS.Dispose();

完整的程式碼如下:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Reflection;
using System.Text;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;

class MyExcel
{
 

   privateobject missing = Type.Missing;
    privateExcel.Application m_aExcelApp = null;
    privateExcel.Workbook   m_aWB = null;
    privateExcel.Worksheet   m_aSheet =null;
   //----------------------------------------------
    public MyExcel()
    {
       Open("", "");
    }
   //----------------------------------------------
    public MyExcel(string szFileName)
    {
       Open(szFileName, "");
    }
   //----------------------------------------------
    public MyExcel(string szFileName, string szSheetName)
    {
       Open(szFileName, szSheetName);
    }
   //----------------------------------------------
    private void Open(string szFileName, string szSheetName)
    {
       CreateApp();
       if (m_aExcelApp == null) return;

       if (szFileName != "")
       {
           m_aWB = m_aExcelApp.Workbooks.Open(szFileName);
       }
       else
       {
           m_aWB = m_aExcelApp.Workbooks.Add();
        }
        if( szSheetName == "" )
            m_aSheet = (Excel.Worksheet)m_aWB.Sheets[1];
        else
            m_aSheet = (Excel.Worksheet)m_aWB.Sheets[szSheetName]; // 設定為ActiveSheet
    }
    //----------------------------------------------
    private void CreateApp()
    {
       try
       {
           m_aExcelApp = new Excel.Application();
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message);
            m_aExcelApp = null;
        }
    }
    //----------------------------------------------
    public void Dispose()
    {
       if (m_aExcelApp == null) return;

       m_aWB.Close();
       m_aExcelApp.Workbooks.Close();
       m_aExcelApp.Quit();
          
       ReleaseObject(m_aWB);
       ReleaseObject(m_aExcelApp);

       m_aWB = null;
       m_aExcelApp = null;
    }
    //----------------------------------------------
    private void ReleaseObject(object aObj)
    {
       try
       {
           System.Runtime.InteropServices.Marshal.ReleaseComObject(aObj);
       }
       catch (Exception ex)
       {
           MessageBox.Show(ex.Message);
       }
       finally
       {
           GC.Collect();
       }
    }
   //----------------------------------------------
    public void SetCells(int nCol, int nRow, string szValue)
    {
       m_aSheet.Cells[nRow, nCol] = szValue;
    }
   //----------------------------------------------
    public void SetCells(string szRangeName, string szValue)
    {
       Excel.Range aRange = m_aSheet.get_Range(szRangeName,missing);
       aRange.Value2 = szValue;
    }
    //----------------------------------------------
    public string GetCells(int nCol, int nRow)
    {
       Excel.Range oRange = (Excel.Range)m_aSheet.Cells[nRow, nCol];
       if (oRange.Value2 == null)
           return "";
       else
           return oRange.Value2.ToString();
    }
    //----------------------------------------------
    public string GetCells(string szRangeName)
    {
       if (szRangeName == "") return "";
       try
       {
           Excel.Range oRange = m_aSheet.get_Range(szRangeName,missing);
           if (oRange.Value2 == null)
               return "";
           else
               return oRange.Value2.ToString();
       }
       catch
       {
           return "";
       }
    }
   //----------------------------------------------
}

Open() 是整個核心,它會建立 Application 及 Workbook,並設定作用中的WookSheet。不再使用時,記得要呼叫 Disponse() ,釋放所引用的 COM 對象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值