【小丸类库系列】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.导出数据到模 ...
随机推荐
- 转载 C#中敏捷开发规范
转载原地址 http://www.cnblogs.com/weixing/archive/2012/03/05/2380492.html 1.命名规则和风格 Naming Conventions an ...
- CSS边框与边界
(上右下左依次体现)à边框的同一属性名称可以同时使用多个属性值 简化方案:border: 长度 形态 颜色 例如 border:1px solid black; 16.2 CSS中边界的使用 padd ...
- oracle强制使用索引
select /*+ INDEX(表名,索引名称) */ col_1,...from xxx
- session和request的区别
request 请求对象 请求中保存请求过程中需要的参数 比如另一个页面需要使用的对象编号,list,map等,请求结束,就失效了 session 会话对象 除非关闭会话(到时间通常为30分钟,或者关 ...
- SCOM MP中的PowerShell脚本
该脚本可在MP中运行 #param ($file,$threshold) #此处可定义file 和 threshold 参数,该参数可以从脚本外部接收 $threshold = 10 $file = ...
- 【21】必须返回对象时,别妄想返回器reference
1.考虑有理数Rational,有个友元操作符*,返回Rational对象.返回对象,导致临时对象的构造,析构.效率低,因此会想返回方法内局部对象的引用,这种方法不可行.为什么? 2.调用方法是在st ...
- 关于websocket中的心跳..
客户端的实现:1, 如果你正在对流进行读写,那么表示其实你己经在活跃状态,不需要发送心跳消息2, 如果你的网络是空闲的, 那么需要指定一个时间间隔(如20sec)向server发送心跳消息.所谓的心跳 ...
- 《高级Perl编程》 读书笔记
http://blog.chinaunix.net/uid-20767124-id-1849881.html
- Android(java)学习笔记121:android.intent.action.MAIN 与 android.intent.category.LAUNCHER 理解
先看看网路上的说法: android.intent.action.MAIN决定应用程序最先启动的 Activity android.intent.category.LAUNCHER决定应用程序是否显示 ...
- Android_baseComponentExample
xml布局文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...