/********************************************************
* 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
}
}
分享到:
相关推荐
### Excel实用工具类 (C#) #### 知识点概览 1. **类库介绍与功能** 2. **依赖库解析** 3. **类成员变量解析** 4. **异常处理机制** 5. **基本操作方法** #### 1. 类库介绍与功能 此源代码提供了一个基于`.NET ...
在IT行业中,Excel导出工具类是经常被...综上所述,“Excel导出工具类”是软件开发中一个非常实用的组件,它使得处理Excel文件变得更加便捷和高效。通过合理选择和使用这样的工具,可以显著提升开发项目的质量和效率。
标题中的"C#工具类库类库 包含所有的常用工具类"暗示了这是一个集合,包含了多种实用工具类,能够极大地提升开发效率。这些工具类涵盖了从文件操作到网络通信的多个领域。 首先,FTP操作类是用于与FTP服务器进行...
本文将深入探讨如何使用C#语言将Excel文件转换为JSON格式,这是一个非常实用的技术,特别是在需要将结构化数据导入Web应用程序或者存储到NoSQL数据库时。Excel是一种广泛使用的电子表格工具,而JSON(JavaScript ...
总之,koogra和myxls都是C#开发中用于嵌入Excel功能的强大工具,它们提供了丰富的功能,使得在没有安装完整版Office的情况下也能处理Excel文件。理解并熟练运用这些控件,将极大地提升你在开发中的效率和项目的实用...
根据提供的文件信息,本文将详细解释C#语言中如何实现对Excel文件的操作,包括但不限于将数据表保存到Excel、从Excel加载数据集等操作。这些技术对于开发人员来说非常重要,尤其是在处理大量数据或进行数据分析时。 ...
这个工具可能包含了创建、读取和更新Excel文件的实用函数和示例。 11. **性能优势**:EPPlus基于Open XML,因此在处理大量数据时,相比早期的COM Interop方法(如`Microsoft.Office.Interop.Excel`),其性能更优,...
在IT行业中,数据转换是常见...总之,"excel转json插件,并生成C#类"是一个实用的工具,它可以大大提高数据处理的效率,尤其在处理大量结构化数据时。了解其工作原理和使用方法,将有助于你在项目中更有效地管理数据。
C# NPOI库是一个非常实用的开源项目,专门用于处理Microsoft Office文件,尤其是Excel文档。在.NET开发环境中,如果你需要在C#程序中生成、读取或修改Excel文件,NPOI是一个理想的选择。本资源提供的"004...
、CSV文件转换、DEncrypt、FTP操作类、JS、Json、Mime、PDF、Properties、ResourceManager、XML操作类、弹出消息类、导出Excel、分词辅助类、汉字转拼音、配置文件操作类、日历、上传下载、时间操作类、视频转换类、...
通过以上技术,我们可以创建一个实用的C#程序,帮助工作人员快速高效地比较Excel表格内容,节省大量手动比对的时间,提升工作效率。这个项目不仅涵盖了基础的编程概念,还涉及到与Office应用交互的高级技巧,对于...
因此,了解如何利用C#等现代编程语言读取、写入甚至操作Excel文件成为了一项非常实用的技能。 #### 二、程序设计环境 为了确保能够顺利地进行C#编程操作Excel的工作,需要事先准备好如下开发环境: 1. **操作系统...
在IT行业中,数据处理是一项至...总的来说,基于Aspose的C# Excel导入导出实现是一个实用的工具,它能够提高开发效率,使得数据处理变得更加便捷。无论是数据分析、报表生成还是数据交换,都能够利用此类工具高效完成。
总之,"Excel数据比较工具"是一款基于C#的实用程序,专为.NET 3.5环境设计,能够高效地比较两个Excel文件的特定字段,从而帮助用户发现并处理数据的不一致性和错误。对于那些需要频繁处理大量Excel数据的人来说,这...
本项目"EX29-Excel导入导出"提供了一个实用的功能,帮助开发者实现C#中对Excel文件的操作。下面将详细讲解其中涉及的关键知识点。 1. **NPOI库**: NPOI是一个流行的开源库,专门用于读写Microsoft Office文件格式...
在本文中,我们将深入探讨如何在C#中使用类来操作Excel文件,特别是在从数据库中读取数据并生成报表的场景下。首先,我们看到的类名为`OutputExcel`,它位于`LogicLayer`命名空间内。这个类的主要功能是将数据视图...
在描述中提到的"C#实现txt和excel互转工具"是一个C#编写的程序,它能够方便地在两种格式之间进行数据迁移。 1. **C#编程基础**:C#是Microsoft公司推出的一种面向对象的编程语言,基于.NET框架,支持类、接口、继承...
综上所述,"c# 按模板导出Excel 通用类"是一个实用的工具,它简化了数据导出流程,提高了开发效率,使得C#程序员在处理Excel相关任务时更加便捷。通过掌握和利用这类通用类,开发者可以更好地服务于数据报告、分析及...
总之,C#串口助手结合了串口通信的便利性和Excel的数据管理能力,为开发者提供了一个实用的工具,不仅适用于简单的数据交互,也能满足复杂的数据记录和分析需求。通过理解并运用其中的技术,开发者可以进一步提升其...