【小丸类库系列】Excel操作类
using Microsoft.Office.Interop.Excel;
using System;
using System.IO;
using System.Reflection; namespace ECIT.ProjectManagementSystem.Common
{
public class ExcelHelper : IDisposable
{
#region 成员变量 private object missing = Missing.Value;
private Application app;
private Workbook workBook;
public Worksheet workSheet; public void setWorkSheet(int i)
{
workSheet = (Worksheet)workBook.Worksheets[i];
} #endregion 成员变量 #region 公共属性 /// <summary>
/// WorkSheet数量
/// </summary>
public int WorkSheetCount
{
get { return workBook.Sheets.Count; }
} #endregion 公共属性 #region 构造函数 /// <summary>
/// 构造函数,新建一个工作簿
/// </summary>
public ExcelHelper()
{
app = new Application();
workBook = app.Workbooks.Add(Type.Missing);
workSheet = (Worksheet)app.Worksheets[];
} /// <summary>
/// 构造函数,打开一个已有的工作簿
/// </summary>
/// <param name="fileName">Excel文件名</param>
public ExcelHelper(string fileName)
{
if (!File.Exists(fileName))
throw new Exception("指定路径的Excel文件不存在!"); app = new Application(); workBook = app.Workbooks.Open(fileName,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing); workSheet = (Worksheet)app.Worksheets[];
} #endregion 构造函数 #region 工作表操作 /// <summary>
/// 删除工作表
/// </summary>
/// <param name="i">工作表的序号</param>
public void RemoveSheet(int i)
{
Worksheet worksheet = (Worksheet)app.Worksheets[i];
app.DisplayAlerts = false;
worksheet.Delete();
app.DisplayAlerts = true;
} /// <summary>
/// 增加工作表
/// </summary>
/// <param name="i">工作表的序号</param>
public void AddSheet(int i)
{
app.Worksheets.Add(Type.Missing, Type.Missing, i, XlSheetType.xlWorksheet);
} #endregion 工作表操作 #region 单元格操作 /// <summary>
/// 获得最大行号
/// </summary>
/// <returns></returns>
public int GetUsedRangeRow()
{
return workSheet.UsedRange.Rows.Count;
} /// <summary>
/// 获得最大列号
/// </summary>
/// <returns></returns>
public int GetUsedRangeColumn()
{
return workSheet.UsedRange.Columns.Count;
} /// <summary>
/// 获取单元格的文本内容
/// </summary>
/// <param name="row">行号</param>
/// <param name="column">列号</param>
/// <returns></returns>
public string GetCellText(int row, int column)
{
if (workSheet == null)
return null;
Range range = (Range)workSheet.Cells[row, column];
string cellContent = (range.Value2 == null) ? "" : range.Text.ToString();
return cellContent;
} /// <summary>
/// 赋值单元格
/// </summary>
/// <param name="excelRange"></param>
/// <param name="value"></param>
public void SetValue(ExcelRange excelRange, object value)
{
workSheet.Range[excelRange.ToString()].Value2 = value;
} /// <summary>
/// 设置字体大小
/// </summary>
/// <param name="excelRange"></param>
/// <param name="size"></param>
public void SetFontSize(ExcelRange excelRange, int size)
{
workSheet.Range[excelRange.ToString()].Font.Size = size;
} /// <summary>
/// 设置字体颜色
/// </summary>
/// <param name="excelRange"></param>
/// <param name="color"></param>
public void SetFontColor(ExcelRange excelRange, System.Drawing.Color color)
{
workSheet.Range[excelRange.ToString()].Font.Color = color;
} /// <summary>
/// 设置单元格背景色
/// </summary>
/// <param name="excelRange"></param>
/// <param name="color"></param>
public void SetBackgroundColor(ExcelRange excelRange, System.Drawing.Color color)
{
workSheet.Range[excelRange.ToString()].Interior.Color = color;
} /// <summary>
/// 设置字体粗体
/// </summary>
/// <param name="excelRange"></param>
/// <param name="isBold"></param>
public void SetFontBold(ExcelRange excelRange, bool isBold)
{
workSheet.Range[excelRange.ToString()].Font.Bold = isBold; //设置字体粗体。
} /// <summary>
/// 设置是否有下划线
/// </summary>
/// <param name="excelRange"></param>
/// <param name="isUnderline"></param>
public void SetUnderline(ExcelRange excelRange, bool isUnderline)
{
workSheet.Range[excelRange.ToString()].Font.Underline = isUnderline;
} /// <summary>
/// 设置字体
/// </summary>
/// <param name="excelRange"></param>
/// <param name="fontname"></param>
public void SetFontName(ExcelRange excelRange, string fontname)
{
workSheet.Range[excelRange.ToString()].Font.Name = fontname;
} /// <summary>
/// 设置单元格宽度
/// </summary>
/// <param name="excelRange"></param>
/// <param name="columnwidth"></param>
public void SetColumnWidth(ExcelRange excelRange, int columnwidth)
{
workSheet.Range[excelRange.ToString()].ColumnWidth = columnwidth;
} /// <summary>
/// 文本自动换行
/// </summary>
/// <param name="excelRange"></param>
/// <param name="isWrapText"></param>
public void SetWrapText(ExcelRange excelRange, bool isWrapText)
{
workSheet.Range[excelRange.ToString()].WrapText = isWrapText;
} /// <summary>
/// 文本横向对齐方式
/// </summary>
/// <param name="excelRange"></param>
/// <param name="xlHAlign"></param>
public void SetHorizontalAlignment(ExcelRange excelRange, XlHAlign xlHAlign)
{
workSheet.Range[excelRange.ToString()].HorizontalAlignment = xlHAlign;
} /// <summary>
/// 文本垂直对齐方式
/// </summary>
/// <param name="excelRange"></param>
/// <param name="xlHAlign"></param>
public void SetVerticalAlignment(ExcelRange excelRange, XlHAlign xlHAlign)
{
workSheet.Range[excelRange.ToString()].VerticalAlignment = xlHAlign;
} /// <summary>
/// 自动调整列宽
/// </summary>
/// <param name="excelRange"></param>
public void FitColumn(ExcelRange excelRange)
{
workSheet.Range[excelRange.ToString()].EntireColumn.AutoFit();
} /// <summary>
/// 设置单元格边框
/// </summary>
/// <param name="excelRange"></param>
public void SetBorderAround(ExcelRange excelRange, XlLineStyle LineStyle, XlBorderWeight BorderWeight)
{
workSheet.Range[excelRange.ToString()].BorderAround(LineStyle, BorderWeight, XlColorIndex.xlColorIndexAutomatic, ); //设置区域边框
} /// <summary>
/// 单元格合并动作
/// </summary>
/// <param name="excelRange"></param>
/// <param name="IsMergeCells"></param>
public void MergeCell(ExcelRange excelRange, bool IsMergeCells)
{
workSheet.Range[excelRange.ToString()].MergeCells = IsMergeCells;
} #endregion 单元格操作 #region 图表绘制 /// <summary>
/// 3D柱状图
/// </summary>
/// <param name="excelRange"></param>
/// <param name="left"></param>
/// <param name="top"></param>
/// <param name="width"></param>
/// <param name="height"></param>
/// <param name="title"></param>
/// <param name="xTitle"></param>
/// <param name="yTitle"></param>
/// <param name="plotBy">XlRowCol.xlRows=数据系列在一列中 XlRowCol.xlColumns=数据系列在一行中</param>
public void Draw3DColumn(ExcelRange excelRange, double left, double top, double width, double height, string title, string xTitle, string yTitle, XlRowCol plotBy)
{
ChartObjects charts = (ChartObjects)workSheet.ChartObjects(Type.Missing);
ChartObject chartObj = charts.Add(left, top, width, height);
Chart chart = chartObj.Chart;
chart.ChartWizard(workSheet.Range[excelRange.ToString()], XlChartType.xl3DColumn, missing, plotBy, , , true, title, xTitle, yTitle, );
} /// <summary>
/// 3D柱状图
/// </summary>
/// <param name="excelRange"></param>
/// <param name="startRange"></param>
/// <param name="width"></param>
/// <param name="height"></param>
/// <param name="title"></param>
/// <param name="xTitle"></param>
/// <param name="yTitle"></param>
/// <param name="plotBy">XlRowCol.xlRows=数据系列在一列中 XlRowCol.xlColumns=数据系列在一行中</param>
public void Draw3DColumn(ExcelRange excelRange, ExcelRange startRange, double width, double height, string title, string xTitle, string yTitle, XlRowCol plotBy)
{
Draw3DColumn(excelRange, Convert.ToDouble(workSheet.Range[startRange.ToString()].Left), Convert.ToDouble(workSheet.Range[startRange.ToString()].Top), width, height, title, xTitle, yTitle, plotBy);
} /// <summary>
/// 3D饼图
/// </summary>
/// <param name="excelRange"></param>
/// <param name="left"></param>
/// <param name="top"></param>
/// <param name="width"></param>
/// <param name="height"></param>
/// <param name="title"></param>
public void Draw3DPie(ExcelRange excelRange, double left, double top, double width, double height, string title)
{
ChartObjects charts = (ChartObjects)workSheet.ChartObjects(Type.Missing);
ChartObject chartObj = charts.Add(left, top, width, height);
Chart chart = chartObj.Chart;
chart.ChartWizard(workSheet.Range[excelRange.ToString()], XlChartType.xl3DPie, missing, XlRowCol.xlColumns, , , true, title, missing, missing, );
} /// <summary>
/// 3D饼图
/// </summary>
/// <param name="excelRange"></param>
/// <param name="startRange"></param>
/// <param name="width"></param>
/// <param name="height"></param>
/// <param name="title"></param>
public void Draw3DPie(ExcelRange excelRange, ExcelRange startRange, double width, double height, string title)
{
Draw3DPie(excelRange, Convert.ToDouble(workSheet.Range[startRange.ToString()].Left), Convert.ToDouble(workSheet.Range[startRange.ToString()].Top), width, height, title);
} #endregion 图表绘制 #region 文件操作 /// <summary>
/// 保存文件
/// </summary>
/// <param name="fileName"></param>
public void SaveFile(string fileName)
{
try
{
workBook.RefreshAll();
workBook.SaveAs(fileName, missing, missing, missing, missing, missing, XlSaveAsAccessMode.xlNoChange, missing, missing, missing, missing);
}
catch (Exception e)
{
Console.WriteLine(e);
throw e;
}
} #endregion 文件操作 #region 资源回收 private bool disposed = false; ~ExcelHelper()
{
//必须为false
Dispose(false);
} public void Dispose()
{
//必须为true
Dispose(true);
//通知垃圾回收机制不再调用终结器(析构器)
GC.SuppressFinalize(this);
} private void Dispose(bool disposing)
{
if (disposed)
{
return;
}
if (disposing)
{
// 清理托管资源
} // 清理非托管资源
if (app != null)
{
app.Quit();
app = null;
} GC.Collect();
GC.WaitForPendingFinalizers(); //让类型知道自己已经被释放
disposed = true;
} #endregion 资源回收
} /// <summary>
/// EXCEL单元格操作范围
/// </summary>
public class ExcelRange
{
public string RangeString { get; set; } public ExcelRange(string RangeString)
{
this.RangeString = RangeString;
} /// <summary>
/// 输入Excel的行号和列号获得范围
/// </summary>
/// <param name="x">列号</param>
/// <param name="y">行号</param>
public ExcelRange(int x, int y)
{
this.RangeString = IntToLetter(x) + y.ToString();
} public ExcelRange(int x1, int y1, int x2, int y2)
{
this.RangeString = IntToLetter(x1) + y1.ToString() + ":" + IntToLetter(x2) + y2.ToString();
} public ExcelRange(ExcelRange from, ExcelRange to)
{
this.RangeString = from.RangeString + ":" + to.RangeString;
} static public implicit operator ExcelRange(string value)
{
return new ExcelRange(value);
} static public implicit operator string (ExcelRange ExcelRange)
{
return ExcelRange.RangeString;
} public override string ToString()
{
return RangeString;
} /// <summary>
/// 将Excel列的整数索引值转换为字符索引值
/// </summary>
/// <param name="n"></param>
/// <returns></returns>
public static string IntToLetter(int n)
{
if (n > )
throw new Exception("索引超出范围,Excel的列索引不能超过700!"); int i = Convert.ToInt32(n / );
int j = n % ; char c1 = Convert.ToChar(i + );
char c2 = Convert.ToChar(j + ); if (n > )
return c1.ToString() + c2.ToString();
else if (n == )
return "Z";
else
return c2.ToString();
}
}
}
【小丸类库系列】Excel操作类的更多相关文章
- 【小丸类库系列】Word操作类
using Microsoft.Office.Interop.Word; using System; using System.Collections.Generic; using System.Dr ...
- C#EXCEL 操作类--C#ExcelHelper操作类
主要功能如下1.导出Excel文件,自动返回可下载的文件流 2.导出Excel文件,转换为可读模式3.导出Excel文件,并自定义文件名4.将数据导出至Excel文件5.将指定的集合数据导出至Exce ...
- Excel 操作类
转载:http://www.cnblogs.com/fellowcheng/archive/2010/08/21/1805158.html ExcelHelper(Excel2007) Code hi ...
- C#常用工具类——Excel操作类
/// 常用工具类——Excel操作类 /// <para> ------------------------------------------------</para> / ...
- C# Excel操作类
/// 常用工具类——Excel操作类 /// <para> ------------------------------------------------</para> / ...
- C#常用工具类——Excel操作类(ZT)
本文转载于: http://www.cnblogs.com/zfanlong1314/p/3916047.html /// 常用工具类——Excel操作类 /// <para> ----- ...
- C#封装的VSTO Excel操作类
自己在用的Excel操作类,因为经常在工作中要操作Excel文件,可是使用vba实现起来实在是不方便,而且编写也很困难,拼接一个字符串都看的眼花. 这个时候C#出现了,发现使用C#来操作Excel非常 ...
- C#自定义Excel操作类
C#自定义Excel操作类,可以用于将DataTable导出到Excel文件,从Excel文件读取数据. using System; using System.IO; using System.Dat ...
- C# Excel操作类 ExcelHelper
实现C#与Excel文件的交互操作,实现以下功能: 1.DataTable 导出到 Excel文件 2.Model数据实体导出到 Excel文件[List<Model>] 3.导出数据到模 ...
随机推荐
- unity编辑器的搜索框好特么坑啊,居然不支持*号通配符
上图 t:Scene或者点搜索框旁边的 分类按钮 用*.unity是什么也搜索不出来的
- linux内核编译步骤
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- 某项目 需要在UITabbar 上显示小红点,在此搜罗了三个方法。
1.使用系统自带的,并且可以在小红点上显示数字. [itemOne setBadgeValue:@""]; //显示不带数字的小红点 [itemOne setBadgeValue: ...
- KeyTweak 键盘按键功能修改
最近一致再用ThinkPad S3,悲剧的是上翻页和下翻页竟然和方向键在一起,经常按错光标不知道去哪里了. 实在忍受不了,竟然有这样的软件,哈哈. KeyTweak,用起来太方便了
- myeclipse和eclipse安装Java反编译插件
为myeclipse和eclipse安装Java反编译插件 插件所需包 1.解压jad1.5.8g.zip.将jad.exe放到jre的bin目录下,下载地址: http://ishare.ia ...
- as3调用外部swf里的类的方法
as3项目要调用外部swf里的类有3种方法: 1.将外部的swf发布为swc,使用时将swc引用添加到相应的项目中,这应该是最简单的一种引用.不过当项目中的类或组件比较多时就会使项目发布生成的swf文 ...
- php开发环境配置 web UI模板
web ui 能快速的整合进来?dwz? easyui? bootstrap 在Apache 中配置: 在http.conf中加入php的设置 #php5_startphpIniDir " ...
- Migration from Zend Framework v2 to v3
Migration from Zend Framework v2 to v3 Zend Framework v2 to v3 has been intended as an incremental u ...
- String使用equals方法和==分别比较的是什么?
equals方法和==的区别 首先大家知道,String既可以作为一个对象来使用,又可以作为一个基本类型来使用.这里指的作为一个基本类型来使用只是指使用方法上的,比如String s = &quo ...
- js 添加enter事件
$(function () { document.onkeydown = function (e) { var ev = document.all ? window.event : e; ) { if ...