上一篇介紹 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 對象。

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

  1. python 通过openpyxl来操作Excel文件(二 ):写入Excel文件

    这篇文章讲python 通过openpyxl来写入Excel文件,不清楚python怎么读取Excel文件的小伙伴可以去看下我的另一篇文章 传送门https://blog.csdn.net/i_cof ...

  2. C#操作Excel文件(转)

    摘要:本文介绍了Excel对象.C#中的受管代码和非受管代码,并介绍了COM组件在.net环境中的使用. 关键词:受管代码:非受管代码:Excel对象:动态连接库 引言 Excel是微软公司办公自动化 ...

  3. c语言从excal读取字符串,C语言操作EXCEL文件(读写)

    C语言操作EXCEL文件(读写) 本文主要介绍通过纯C语言进行EXCEL的读写操作:(修改时间2018.08.28,如果运行结果均是0,请看文章最后一节) C语言读操作 C语言写操作 在之前需要使用C ...

  4. C语言操作EXCEL文件(读写)

    C语言操作EXCEL文件(读写) 本文主要介绍通过纯C语言进行EXCEL的读写操作:(修改时间2018.08.28,如果运行结果均是0,请看文章最后一节) C语言读操作 C语言写操作 在之前需要使用C ...

  5. C#在客户端和服务端操作Excel文件

    一.在客户端把数据导入到Excel文件步骤 1.创建Excel application对象,打开或生成Excel文件 //服务端创建StringBuilder对象     System.Text.St ...

  6. php删除excel文件,php操作excel文件的方法小结

    php操作excel文件的方法小结 php操作excel文件的方法有哪些?就跟随百分网小编一起去了解下吧,想了解更多相关信息请持续关注我们应届毕业生考试网! 一.php,不用COM,生成excel文件 ...

  7. 详解Python操作Excel文件

    前言 本篇文章主要总结了一下利用python操作Excel文件的第三方库和方法. 常见库简介 1.xlrd xlrd是一个从Excel文件读取数据和格式化信息的库,支持.xls以及.xlsx文件. 地 ...

  8. java excel导出2007_java操作excel文件,实现批量导出,和导入

    一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Exc ...

  9. Java生成和操作Excel文件

    JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过 ...

  10. hssfwork 导出excel 文件已损坏_C# NPOI 操作EXCEL文件的读取和导出

    在实际项目中有很多场景遇到需要操作EXCEL文件,而常用到的库就有NPOI:NPOI是开源的POI 项目的.NET版,POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目, ...

最新文章

  1. shiro(2)-架构与配置
  2. 高文、张钹、杨强隔空论道:AI精度与隐私的博弈
  3. 面试必备,各种技术知识集大成之项目~
  4. linux的rt补丁安装,微软发布补丁封杀允许Surface RT安装Linux的“漏洞”
  5. linux php 断点调试,PHP断点调试工具Xdebug的安装
  6. Deep Learning科普帖
  7. 001_ECharts入门
  8. 关于Web应用程序数据库连接的使用
  9. 《Exchange Server 2010 SP1/SP2管理实践》一2.2 部署域名解析网络环境
  10. [UE4]编程师外挂Visual Assist X
  11. Oracle里schema理解
  12. MySQL数据库管理(二)单机环境下MySQL Cluster的安装
  13. ssm使用全注解实现增删改查案例——EmpMapperImpl
  14. LeetCode数据库 178. 分数排名
  15. 车控APP发现安全隐患,研究人员模拟黑客入侵
  16. 物联网学习之路——物联网通信技术简介
  17. 投资组合理论的简单介绍
  18. Cygwin环境使用第三方ARMGCC编译eCos系统
  19. Mysql8.0.28-winx64安装
  20. 【Android 组件化】路由组件 ( 注解处理器中使用 JavaPoet 生成代码 )

热门文章

  1. matlab中得到透明背景图片的方法,如何在Matlab中得到透明背景的图片?
  2. vue 时间格式总结及转换
  3. 坦克大战游戏c语言,C语言开发坦克大战游戏
  4. 基于MATLAB的激光光斑图像处理算法
  5. 推动服务网格社区前进
  6. linux清理垃圾文件,安装及使用Sweeper从Linux系统上清除垃圾文件
  7. Java8新特性 方法引用(四)
  8. 继承中各代码块的执行顺序
  9. Win10开机黑屏进不了桌面
  10. Unity3d版数字地球、谷歌地球(google earth)