`
penua
  • 浏览: 19422 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

C#:Excel实用工具类

阅读更多
/********************************************************
 * Code Base of C#
 * Excel report develop tools
 * Create by huang pinghua 2008/12/28, all rights reserved.
 * *****************************************************/
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using Microsoft.Office.Core;
using Microsoft.Office.Interop.Excel;
using System.IO;

namespace ExcelX.ExcelLib
{
    /// <summary>
    /// Excel 操作代理
    /// </summary>
    public class ExcelAgent
    {
        private ApplicationClass _app = null;
        private _Workbook _wb = null;
        private _Worksheet _ws = null;
        private string _filePath = "";
        private int _shIndex = 0; // 1 based index

        public event EventHandler ExcelExceptionOccured;

        /// <summary>
        /// 当前Sheet
        /// </summary>
        public int SheetIndex { get { return this._shIndex; } }

        /// <summary>
        /// 当前文件名
        /// </summary>
        public string FileName { get { return this._filePath; } }

        #region private operations 
        /// <summary>
        /// 打开App
        /// </summary>
        private void OpenApp()
        {
            this._app = new ApplicationClass();
            this._app.Visible = false;
        }

        /// <summary>
        /// 释放资源
        /// </summary>
        /// <param name="o"></param>
        private void ReleaseCom(object o)
        {
            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(o);//强制释放一个对象
            }
            catch { }
            finally
            {
                o = null;
            }
        }

        /// <summary>
        /// 检查App
        /// </summary>
        private bool CheckApp()
        {
            if (this._app == null)
            {
                if (this.ExcelExceptionOccured != null)
                {
                    this.ExcelExceptionOccured(this, new ErrorEventArgs(new Exception("Application对象未初始化")));
                }
                return false;
            }

            return true;
        }

        /// <summary>
        /// 检查Book
        /// </summary>
        private bool CheckWorkBook()
        {
            if (this._wb == null)
            {
                if (this.ExcelExceptionOccured != null)
                {
                    this.ExcelExceptionOccured(this, new ErrorEventArgs(new Exception("Workbook对象未初始化")));
                }

                return false;
            }

            return true;
        }

        /// <summary>
        /// 检查Sheet
        /// </summary>
        private bool CheckSheet()
        {
            if (this._ws == null)
            {
                if (this.ExcelExceptionOccured != null)
                {
                    this.ExcelExceptionOccured(this, new ErrorEventArgs(new Exception("Worksheet对象未初始化")));
                }

                return false;
            }

            return true;
        }
        #endregion

        #region basic operation
        /// <summary>
        /// 打开文件
        /// </summary>
        /// <param name="filePath"></param>
        public void Open(string filePath)
        {
            // Check Application 
            if (!this.CheckApp()) return;

            // Open workbook
            this._filePath = filePath;
            this._wb = this._app.Workbooks._Open(filePath, Missing.Value, Missing.Value, Missing.Value, Missing.Value
                    , Missing.Value, Missing.Value, Missing.Value, Missing.Value
                    , Missing.Value, Missing.Value, Missing.Value, Missing.Value);

            // set default sheet
            this.SetCurrentSheet(1);
        }

        /// <summary>
        /// 自动打开Excel对象
        /// </summary>
        public ExcelAgent()
        {
            this.OpenApp();
        }

        /// <summary>
        /// 打开excel文件
        /// </summary>
        /// <param name="filePath"></param>
        public ExcelAgent(string filePath)
        {
            this.OpenApp();
            this.Open(filePath);
        }

        /// <summary>
        /// 保存当前文档
        /// </summary>
        public void Save()
        {
            // check workbook 
            if (!this.CheckWorkBook()) return;

            // save the book
            this._wb.Save();
            
        }

        /// <summary>
        /// 另存当前文档
        /// </summary>
        /// <param name="filePath"></param>
        public void Save(string filePath)
        {
            // check workbook 
            if (!this.CheckWorkBook()) return;

            // save work book
            this._filePath = filePath;
            bool b = this._app.DisplayAlerts;
            this._app.DisplayAlerts = false;

            // save work book            
            this._wb.SaveAs(this._filePath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, XlSaveAsAccessMode.xlNoChange,
                    Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);

            this._app.DisplayAlerts = b;
        }

        /// <summary>
        /// 关闭当前操作
        /// </summary>
        public void Close()
        {
            if (this._app == null) return;
            if (this._wb != null)
            {
                this._wb.Close(false, Missing.Value, Missing.Value);
                ReleaseCom(this._wb);
                this._wb = null;
            }
            this._app.Quit();
            ReleaseCom(this._app);
            this._app = null;

        }

        /// <summary>
        /// 设置当前工作Sheet(序号:从1记起)
        /// </summary>
        /// <param name="sheetIndex"></param>
        public void SetCurrentSheet(int sheetIndex)
        {
            // check workbook 
            if (!this.CheckWorkBook()) return;

            // set sheet object
            this._shIndex = sheetIndex;
            this._ws = (_Worksheet)this._wb.Worksheets[sheetIndex];
        }

        /// <summary>
        /// 设置当前工作Sheet(序号:从1记起)
        /// </summary>
        /// <param name="sheetIndex"></param>
        public void SetCurrentSheet(string SheetName)
        {
            // check workbook 
            if (!this.CheckWorkBook()) return;

            // set sheet object
            this._ws = (_Worksheet)this._wb.Worksheets[SheetName];
            this._shIndex = this._ws.Index;
        }

        /// <summary>
        /// 删除一个工作表
        /// </summary>
        /// <param name="SheetName"></param>
        public void DeleteSheet()
        {
            // check workbook 
            if (!this.CheckSheet()) return;

            this._ws.Delete();
        }

        /// <summary>
        /// 改名
        /// </summary>
        /// <param name="newName"></param>
        public void RenameSheet(string newName)
        {
            // check workbook 
            if (!this.CheckSheet()) return;

            this._ws.Name = newName;
        }

        /// <summary>
        /// 创建Sheet
        /// </summary>
        /// <param name="newName"></param>
        public void CreateSheet(string newName)
        {
            // check workbook 
            if (!this.CheckWorkBook()) return;

            this._wb.Worksheets.Add(Missing.Value, Missing.Value, Missing.Value, Missing.Value);
        }

        /// <summary>
        /// 获取数量
        /// </summary>
        /// <returns></returns>
        public int GetSheetCount()
        {
            // check workbook 
            if (!this.CheckWorkBook()) return -1;

            return this._wb.Worksheets.Count;
        }
        #endregion

        #region sheet operation
        /// <summary>
        /// 设置单元值
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <param name="value"></param>
        public void SetCellValue(int x, int y, object value)
        {
            if (!this.CheckSheet()) return;
            this._ws.Cells[x, y] = value;
        }

        /// <summary>
        /// 合并单元格
        /// </summary>
        /// <param name="x1"></param>
        /// <param name="y1"></param>
        /// <param name="x2"></param>
        /// <param name="y2"></param>
        public void UniteCells(int x1, int y1, int x2, int y2)
        {
            if (!this.CheckSheet()) return;
            this._ws.get_Range(this._ws.Cells[x1, y1], this._ws.Cells[x2, y2]).Merge(Type.Missing);
        }

        /// <summary>
        /// 将内存中数据表格插入到Excel指定工作表的指定位置 为在使用模板时控制格式时使用一
        /// </summary>
        /// <param name="dt"></param>
        /// <param name="startX"></param>
        /// <param name="startY"></param>
        public void InsertTable(System.Data.DataTable dt, int startX, int startY)
        {
            if (!this.CheckSheet()) return;

            for (int i = 0; i <= dt.Rows.Count - 1; i++)
            {
                for (int j = 0; j <= dt.Columns.Count - 1; j++)
                {
                    this._ws.Cells[startX + i, j + startY] = dt.Rows[i][j].ToString();

                }

            }

        }

        /// <summary>
        /// 获取单元格值
        /// </summary>
        /// <param name="cellName"></param>
        /// <returns></returns>
        public object GetCellValue(string cellName)
        {
            if (!this.CheckSheet()) return null;

            Range range = this._ws.get_Range(cellName, Type.Missing);

            return range.Value2;
        }

        /// <summary>
        /// 获取单元格值
        /// </summary>
        /// <param name="row"></param>
        /// <param name="col"></param>
        /// <returns></returns>
        public object GetCellValue(int row, int col)
        {
            if (!this.CheckSheet()) return null;

            Range range = (Range)this._ws.Cells[row, col];

            return range.Value2;
        }

        public string GetStringValue(string cellName)
        {
            object val = this.GetCellValue(cellName);
            string result = "";

            if (val != null) result = val.ToString();

            return result;
        }

        public string GetStringValue(int row, int col)
        {
            object val = this.GetCellValue(row, col);
            string result = "";

            if (val != null) result = val.ToString();

            return result;
        }

        public double GetDoubleValue(string cellName)
        {
            object val = this.GetCellValue(cellName);
            string result = "";

            if (val != null) result = val.ToString();

            double number = 0d;
            if (double.TryParse(result, out number))
            {
                number = double.Parse(result);
            }
            else
            {
                number = 0d;
            }

            return number;
        }

        public double GetDoubleValue(int row, int col)
        {
            object val = this.GetCellValue(row, col);
            string result = "";

            if (val != null) result = val.ToString();

            double number = 0d;
            if (double.TryParse(result, out number))
            {
                number = double.Parse(result);
            }
            else
            {
                number = 0d;
            }

            return number;
        }
       
        #endregion
    }
}

 

分享到:
评论
1 楼 zfhzhy 2009-02-27  
采用Excel的com组件,在部署时是挺麻烦的,现在有开源的Excel组件,也可以进行像com组件那样的操作!

相关推荐

    Excel实用工具类 (C#)

    ### Excel实用工具类 (C#) #### 知识点概览 1. **类库介绍与功能** 2. **依赖库解析** 3. **类成员变量解析** 4. **异常处理机制** 5. **基本操作方法** #### 1. 类库介绍与功能 此源代码提供了一个基于`.NET ...

    Excel导出工具类

    在IT行业中,Excel导出工具类是经常被...综上所述,“Excel导出工具类”是软件开发中一个非常实用的组件,它使得处理Excel文件变得更加便捷和高效。通过合理选择和使用这样的工具,可以显著提升开发项目的质量和效率。

    C#工具类库类库 包含所有的常用工具类

    标题中的"C#工具类库类库 包含所有的常用工具类"暗示了这是一个集合,包含了多种实用工具类,能够极大地提升开发效率。这些工具类涵盖了从文件操作到网络通信的多个领域。 首先,FTP操作类是用于与FTP服务器进行...

    C#实现excel转json[工具+源码]

    本文将深入探讨如何使用C#语言将Excel文件转换为JSON格式,这是一个非常实用的技术,特别是在需要将结构化数据导入Web应用程序或者存储到NoSQL数据库时。Excel是一种广泛使用的电子表格工具,而JSON(JavaScript ...

    excel控件大全c#嵌入excel

    总之,koogra和myxls都是C#开发中用于嵌入Excel功能的强大工具,它们提供了丰富的功能,使得在没有安装完整版Office的情况下也能处理Excel文件。理解并熟练运用这些控件,将极大地提升你在开发中的效率和项目的实用...

    c#对excel的操作(源代码)

    根据提供的文件信息,本文将详细解释C#语言中如何实现对Excel文件的操作,包括但不限于将数据表保存到Excel、从Excel加载数据集等操作。这些技术对于开发人员来说非常重要,尤其是在处理大量数据或进行数据分析时。 ...

    EPPlus C#操作Excel工具包

    这个工具可能包含了创建、读取和更新Excel文件的实用函数和示例。 11. **性能优势**:EPPlus基于Open XML,因此在处理大量数据时,相比早期的COM Interop方法(如`Microsoft.Office.Interop.Excel`),其性能更优,...

    excel转json插件,并生成C#类

    在IT行业中,数据转换是常见...总之,"excel转json插件,并生成C#类"是一个实用的工具,它可以大大提高数据处理的效率,尤其在处理大量结构化数据时。了解其工作原理和使用方法,将有助于你在项目中更有效地管理数据。

    C# NPOI 导出Excel

    C# NPOI库是一个非常实用的开源项目,专门用于处理Microsoft Office文件,尤其是Excel文档。在.NET开发环境中,如果你需要在C#程序中生成、读取或修改Excel文件,NPOI是一个理想的选择。本资源提供的"004...

    (C#)ASP.Net实用工具类

    、CSV文件转换、DEncrypt、FTP操作类、JS、Json、Mime、PDF、Properties、ResourceManager、XML操作类、弹出消息类、导出Excel、分词辅助类、汉字转拼音、配置文件操作类、日历、上传下载、时间操作类、视频转换类、...

    C#_Excel内容比较

    通过以上技术,我们可以创建一个实用的C#程序,帮助工作人员快速高效地比较Excel表格内容,节省大量手动比对的时间,提升工作效率。这个项目不仅涵盖了基础的编程概念,还涉及到与Office应用交互的高级技巧,对于...

    C#操作Excel.pdf

    因此,了解如何利用C#等现代编程语言读取、写入甚至操作Excel文件成为了一项非常实用的技能。 #### 二、程序设计环境 为了确保能够顺利地进行C#编程操作Excel的工作,需要事先准备好如下开发环境: 1. **操作系统...

    基于Aspose的简单通用C#Excel导入导出

    在IT行业中,数据处理是一项至...总的来说,基于Aspose的C# Excel导入导出实现是一个实用的工具,它能够提高开发效率,使得数据处理变得更加便捷。无论是数据分析、报表生成还是数据交换,都能够利用此类工具高效完成。

    Excel数据比较工具

    总之,"Excel数据比较工具"是一款基于C#的实用程序,专为.NET 3.5环境设计,能够高效地比较两个Excel文件的特定字段,从而帮助用户发现并处理数据的不一致性和错误。对于那些需要频繁处理大量Excel数据的人来说,这...

    EX29-Excel导入导出_导出excel_c#导入excel_C#_excel导入导出_

    本项目"EX29-Excel导入导出"提供了一个实用的功能,帮助开发者实现C#中对Excel文件的操作。下面将详细讲解其中涉及的关键知识点。 1. **NPOI库**: NPOI是一个流行的开源库,专门用于读写Microsoft Office文件格式...

    C#调用操作Excel的一个类

    在本文中,我们将深入探讨如何在C#中使用类来操作Excel文件,特别是在从数据库中读取数据并生成报表的场景下。首先,我们看到的类名为`OutputExcel`,它位于`LogicLayer`命名空间内。这个类的主要功能是将数据视图...

    C#实现txt和excel互转工具.rar

    在描述中提到的"C#实现txt和excel互转工具"是一个C#编写的程序,它能够方便地在两种格式之间进行数据迁移。 1. **C#编程基础**:C#是Microsoft公司推出的一种面向对象的编程语言,基于.NET框架,支持类、接口、继承...

    c# 按模板导出Excel 通用类

    综上所述,"c# 按模板导出Excel 通用类"是一个实用的工具,它简化了数据导出流程,提高了开发效率,使得C#程序员在处理Excel相关任务时更加便捷。通过掌握和利用这类通用类,开发者可以更好地服务于数据报告、分析及...

    串口助手.rar_C#串口助手_c# 串口 EXCEL_c# 串口助手_c#存储EXCEL_串口 excel

    总之,C#串口助手结合了串口通信的便利性和Excel的数据管理能力,为开发者提供了一个实用的工具,不仅适用于简单的数据交互,也能满足复杂的数据记录和分析需求。通过理解并运用其中的技术,开发者可以进一步提升其...

Global site tag (gtag.js) - Google Analytics