自己写的excel组件,方便在使用。
/*-------------------------------------------------------------------------
* Author : Stpangpang
* Created : 2006/03/09
* Purpose : 操作Excel对象的类,因为有些报表如果要用Crystal Report 来做话,很麻烦,
* 还是专门做一个操作Excel的类,以后用的时候比较方便,目前只适用于已经做好的Excle模版。
* 2006/05已经增加了一些功能
* Version : 1.0
* -------------------------------------------------------------------------
**/
using Excel;
using System;
using System.Reflection;
namespace ExcelClass
{
/// <summary>
/// 为纪念三八妇女节,写的操作Excel的类,初步设计思想是考虑到报表的用途,自己用起来比较爽。 Stpangapng 2006/03/08
/// 2006年5月份扩充一些功能。
/// </summary>
public class ExcelBase
{
#region " Private Variable Definition "
private Application exlApp;
private _Workbook exlWorkBook;
private _Worksheet exlWorkSheet;
private int sheetNumber =1;
#endregion
#region " Public Property and Constant Definition "
/// <summary>
/// Excel单元格边框的线条的粗细枚举
/// </summary>
public enum ExcelBorderWeight
{
/// <summary>
/// 极细的线条
/// </summary>
Hairline=Excel.XlBorderWeight.xlHairline ,
/// <summary>
/// 中等的线条
/// </summary>
Medium=Excel.XlBorderWeight.xlMedium ,
/// <summary>
/// 粗线条
/// </summary>
Thick=Excel.XlBorderWeight.xlThick ,
/// <summary>
/// 细线条
/// </summary>
Thin=Excel.XlBorderWeight.xlThin
}
/// <summary>
/// Excel单元格边框枚举
/// </summary>
public enum ExcelBordersIndex
{
/// <summary>
/// 主对角线从
/// </summary>
DiagonalDown=Excel.XlBordersIndex.xlDiagonalDown ,
/// <summary>
/// 辅对角线
/// </summary>
DiagonUp=Excel.XlBordersIndex.xlDiagonalUp ,
/// <summary>
///底边框
/// </summary>
EdgeBottom=Excel.XlBordersIndex.xlEdgeBottom ,
/// <summary>
/// 左边框
/// </summary>
EdgeLeft=Excel.XlBordersIndex.xlEdgeLeft ,
/// <summary>
/// 右边框
/// </summary>
EdgeRight=Excel.XlBordersIndex.xlEdgeRight ,
/// <summary>
/// 顶边框
/// </summary>
EdgeTop=Excel.XlBordersIndex.xlEdgeTop ,
/// <summary>
/// 边框内水平横线
/// </summary>
InsideHorizontal=Excel.XlBordersIndex.xlInsideHorizontal ,
/// <summary>
/// 边框内垂直竖线
/// </summary>
InsideVertical=Excel.XlBordersIndex.xlInsideVertical
}
/// <summary>
/// Excel单元格的竖直方法对齐枚举
/// </summary>
public enum ExcelVerticalAlignment
{
/// <summary>
/// 居中
/// </summary>
Center=Excel.Constants.xlCenter ,
/// <summary>
/// 靠上
/// </summary>
Top=Excel.Constants.xlTop,
/// <summary>
/// 靠下
/// </summary>
Bottom=Excel.Constants.xlBottom ,
/// <summary>
/// 两端对齐
/// </summary>
Justify=Excel.Constants.xlJustify ,
/// <summary>
/// 分散对齐
/// </summary>
Distributed=Excel.Constants.xlDistributed
};
/// <summary>
/// Excel 水平方向对齐枚举
/// </summary>
public enum ExcelHorizontalAlignment
{
/// <summary>
///常规
/// </summary>
General = Excel.Constants.xlGeneral ,
/// <summary>
/// 靠左
/// </summary>
Left =Excel.Constants.xlLeft ,
/// <summary>
/// 居中
/// </summary>
Center=Excel.Constants.xlCenter ,
/// <summary>
/// 靠右
/// </summary>
Right=Excel.Constants.xlRight,
/// <summary>
/// 填充
/// </summary>
Fill=Excel.Constants.xlFill,
/// <summary>
/// 两端对齐
/// </summary>
Justify=Excel.Constants.xlJustify,
/// <summary>
/// 跨列居中
/// </summary>
CenterAcrossSelection=Excel.Constants.xlCenterAcrossSelection,
/// <summary>
/// 分散对齐
/// </summary>
Distributed=Excel.Constants.xlDistributed
}
/// <summary>
/// Excel边框线条的枚举
/// </summary>
public enum ExcelStyleLine
{
/// <summary>
/// 没有线条
/// </summary>
StyleNone =Excel.XlLineStyle.xlLineStyleNone ,
/// <summary>
/// 连续的细线
/// </summary>
Continious=Excel.XlLineStyle.xlContinuous ,
/// <summary>
/// 点状线
/// </summary>
Dot=Excel.XlLineStyle.xlDot ,
/// <summary>
/// 双条线
/// </summary>
Double=Excel.XlLineStyle.xlDouble ,
}
/// <summary>
/// 排序的玫举
/// </summary>
public enum ExcelSortOrder
{
/// <summary>
/// 升序
/// </summary>
Ascending = Excel.XlSortOrder.xlAscending,
/// <summary>
/// 降序
/// </summary>
Descending = Excel.XlSortOrder.xlDescending ,
}
#endregion
#region " Construction Method "
/// <summary>
/// 构造函数
/// </summary>
public ExcelBase()
{
//实例化Excel对象。
exlApp=new Excel.Application();
}
/// <summary>
/// 构造函数
/// </summary>
/// <param name="ExcelVisible">Excel是否可见</param>
public ExcelBase(bool ExcelVisible)
{
exlApp =new Excel.Application();
exlApp.Visible =ExcelVisible ;
}
#endregion
#region " Open and dispose method definition "
/// <summary>
/// 打开一个Excel文件
/// </summary>
public void Open()
{
//Get a new WorkSheet
exlWorkBook =(Workbook)exlApp.Workbooks.Add(Missing.Value);
exlWorkSheet=(Worksheet)exlWorkBook.ActiveSheet;
}
/// <summary>
/// 打开已经存在的Excel文件模版
/// </summary>
/// <param name="XLTPath">已经存在的文件模版的完整路径</param>
public void Open(string XLTPath )
{
if (System.IO.File.Exists(XLTPath))
{
exlWorkBook=(Workbook)exlApp.Workbooks.Add(XLTPath);
exlWorkSheet =(Worksheet)exlWorkBook.ActiveSheet;
}
else
{
throw new System.IO.FileNotFoundException(string.Format("{0}不存在,请重新确定文件名",XLTPath));
}
}
/// <summary>
/// 保存Excel文件
/// </summary>
/// <param name="fileName">保存的文件名</param>
public void SaveAs(string fileName)
{
exlWorkSheet.SaveAs(fileName, Missing.Value, Missing.Value, Missing.Value, false , false, Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value ,Missing.Value , Missing.Value);
}
/// <summary>
/// 彻底关闭Excel的资源和进程
/// </summary>
public void Dispose()
{
if (exlApp !=null)
{
exlApp.Quit();
}
if (exlWorkBook !=null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(exlWorkBook);
exlWorkBook=null;
}
System.Runtime.InteropServices.Marshal.ReleaseComObject(exlWorkSheet);
exlWorkSheet=null;
System.Runtime.InteropServices.Marshal.ReleaseComObject(exlApp);
exlApp = null;
GC.Collect();
}
#endregion
#region " Print and PrintPreview method definition "
/// <summary>
/// 打印Excel文件,可以设置是否是打印前预览打印的Excel文件
/// </summary>
/// <param name="IsPrintPreview">打印前是否预览 , true:打印前预览false:直接打印,不预览 </param>
public void Print(bool IsPrintPreview)
{
bool flag =exlApp.Visible ;
if (exlApp.Visible )
{
exlApp.Visible =true;
}
exlWorkSheet.PrintOut(Missing.Value,Missing.Value,Missing.Value ,IsPrintPreview,Missing.Value ,Missing.Value ,Missing.Value,Missing.Value ) ;
exlApp.Visible =flag;
}
/// <summary>
/// 打印Excel文件,可以设置是否打印预览,以及打印的份数
/// </summary>
/// <param name="IsPrintPreview">打印前是否预览 , true:打印前预览false:直接打印,不预览</param>
/// <param name="iCopy">打印的份数</param>
public void Print(bool IsPrintPreview,int iCopy)
{
if (iCopy < 1)
{
iCopy=1;
}
exlWorkSheet.PrintOut(Missing.Value,Missing.Value,Missing.Value ,IsPrintPreview,iCopy ,Missing.Value ,Missing.Value,Missing.Value ) ;
}
/// <summary>
/// 打印预览Excel文件
/// </summary>
public void PrintPreview()
{
exlWorkSheet.PrintPreview(Missing.Value) ;
}
#endregion
#region " Detail control excel method "
/// <summary>
/// 将Excel隐藏
/// </summary>
public void Hide()
{
exlApp.Visible =false;
}
/// <summary>
/// 将Excel显示
/// </summary>
public void Show()
{
exlApp.Visible =true;
}
/// <summary>
/// 设置工作簿的名称
/// </summary>
/// <param name="WorkSheet"></param>
public void SetWorkSheetName(string WorkSheet)
{
exlWorkSheet.Name =WorkSheet;
}
/// <summary>
///返回指定单元格的内容
/// </summary>
/// <param name="iRow">定位的行</param>
/// <param name="iCol">定位的列</param>
/// <returns>返回指定单元格的内容</returns>
public string GetCellText(int iRow,int iCol)
{
Range sRange =exlWorkSheet.get_Range(iRow,iCol);
string returnText =(string)sRange.Text ;
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange);
sRange=null;
return returnText;
}
/// <summary>
/// 设置指定范围单元格的内容,通过单元格,比如从"A1" 到 "B3"
/// </summary>
/// <param name="startCell">开始的单元格,比如"A1"</param>
/// <param name="endCell">结束的单元格,比如"B2"</param>机动车统计表.xlt
/// <param name="text">要设置的内容,可以使用Excel的公式</param>
public void SetCellText(string startCell,string endCell,string text)
{
Range sRange =exlWorkSheet.get_Range(startCell,endCell);
//这里没有用value属性,而用Formula属性,因为考虑到可以扩展,可以利用公式
sRange.Cells.Formula=text;
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange);
sRange=null;
}
/// <summary>
/// 设置指定范围的单元格的内容,通过行列来定位。如第1行第2列内容
/// </summary>
/// <param name="iRow">开始的行</param>
/// <param name="iCol">开始的列</param>
///<param name="text">要设置的文本,可以使用Excel的公式</param>
public void SetCellText(int iRow,int iCol,string text)
{
Range sRange=this.GetRange(iRow,iCol,iRow,iCol);
sRange.Cells.Formula=text;
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange) ;
sRange=null;
}
/// <summary>
/// 设置指定单元格的内容,比如设置"A1"单元格的内容
/// </summary>
/// <param name="cell">指定的单元格</param>
/// <param name="text">要设置的内容,可以使用Excel的公式,如sum(A1:A7)--合计A1到A7数值</param>
public void SetCellText(string cell,string text)
{
Range sRange=GetRange(cell);
sRange.Cells.Formula=text;
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange) ;
sRange=null;
}
/// <summary>
/// 设置指定单元格的内容
/// </summary>
/// <param name="cell">指定的单元格</param>
/// <param name="num">要设置的内容</param>
public void SetCellText(string cell,Int32 num)
{
Range sRange=GetRange(cell);
sRange.Cells.Formula=num.ToString();
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange) ;
sRange=null;
}
/// <summary>
/// 设置指定单元格的内容,可以指定格式
/// </summary>
/// <param name="cell">要指定的单元格</param>
/// <param name="textValue">要填写的内容</param>
/// <param name="StringFormat">要显示的格式</param>
///<param name="FontName">设置单元格的字体</param>
/// <param name="FontSize">设置单元格的字体大小</param>
public void setCellTextByFormat(string cell,string textValue,string StringFormat,string FontName ,string FontSize)
{
Range sRange=GetRange(cell);
sRange.Select();
if (StringFormat!= "")
{
sRange.NumberFormatLocal = StringFormat;
}
if (FontName !="")
{
sRange.Font.Name = FontName;
}
if (FontSize !="")
{
sRange.Font.Size = FontSize;
}
sRange.Cells.Formula=textValue;
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange) ;
sRange=null;
}
/// <summary>
/// 设置指定单元格的内容,可以指定格式
/// </summary>
/// <param name="cell">要指定的单元格</param>
/// <param name="textValue">要填写的内容</param>
/// <param name="StringFormat">要显示的格式</param>
///<param name="FontName">设置单元格的字体</param>
/// <param name="FontSize">设置单元格的字体大小</param>
/// <param name="colorIndex">设置单元格的颜色,我查了MSDN但是没有颜色代码的说明,Excel中一共有56种颜色的代码,常用的几个是
/// 1-黑色 2-白色 3-红色 4-草绿色 5-蓝色 6-黄色 7-紫色 ,如果想看仔细的颜色,就依次从 1 循环到 56 把颜色打印出来看看</param>
public void setCellTextByFormat(string cell,string textValue,string StringFormat,string FontName ,string FontSize,int colorIndex)
{
Range sRange=GetRange(cell);
sRange.Select();
if (StringFormat!= "")
{
sRange.Cells.NumberFormatLocal = StringFormat;
}
if (FontName !="")
{
sRange.Font.Name = FontName;
}
if (FontSize !="")
{
sRange.Font.Size = FontSize;
}
if(colorIndex !=0 )
{
sRange.Font.ColorIndex = colorIndex;
}
sRange.Cells.Formula=textValue;
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange) ;
sRange=null;
}
/// <summary>
/// 设置单元格的内容(指定单元格的格式化字符串)
/// </summary>
/// <param name="cell">指定的单元格</param>
/// <param name="textValue">内容</param>
/// <param name="stringFormat">格式化字符串</param>
public void setCellText(string cell,string textValue,string stringFormat)
{
Range sRange=GetRange(cell);
sRange.Select();
if (stringFormat!= "")
{
sRange.Cells.NumberFormatLocal = stringFormat;
}
sRange.Cells.Formula=textValue;
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange) ;
sRange=null;
}
/// <summary>
/// 得到指定单元格的内容
/// </summary>
/// <param name="cell">指定的单元格比如 A1,A2</param>
/// <returns>返回指定的内容</returns>
public object GetCellText(string cell)
{
object returnValue;
Range sRange=GetRange(cell);
returnValue= sRange.Cells.Text;
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange) ;
sRange=null;
return returnValue;
}
/// <summary>
/// 设置指定单元格的内容,比如设置"A1"单元格的内容
/// </summary>
/// <param name="cell">指定的单元格</param>
/// <param name="text">要设置的内容,使用Excel里面的R1C1这样的格式(不知道是不是画蛇添足,因为Excel里的Macro中是这样使用的)</param>
public void SetCellTextR1C1(string cell,string text)
{
Range sRange=GetRange(cell);
sRange.Cells.FormulaR1C1 =text;
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange) ;
sRange=null;
}
/// <summary>
///设置单元格的单元格格式
/// </summary>
/// <param name="cell">要设定的单元格的坐标</param>
/// <param name="formatString">单元格的格式化字符
/// 常规:"G/通用格式"
/// 数值:"[红色]-0.00"(表示是2位小数,如果是负数的话则用红色表示)
/// 货币:"¥#,##0.000;[红色]¥-#,##0.000"(¥是货币符号,可以用$,也可以不填写,0.000代表三位小数位;[红色]表示如果是负数的话,用红色表示)
/// 日期:@"yyyy"年"m"月"d"日";@" (表示用年月日了表示) @"[DBNum1][$-804]yyyy"年"m"月"d"日";@"(表示用汉字表示年月日)
/// 百分比:"0.000%;[红色]-0.000%"(表示小数位为3位,红色表示如果是负数的话则用红色表示)
/// 文本:"@"(表示是文本格式)
/// 特殊:"[DBNum1][$-804]G/通用格式"(能将数字转换成中文小写,如1234转换成一千二百三十四) "[DBNum2][$-804]G/通用格式"(能将数字转换成中文大写,如1234转换成 壹仟贰佰叁拾肆)
/// 自定义:输入自定义的格式化字符串
/// </param>
public void SetCellFormat(string cell,string formatString)
{
Range sRange=GetRange(cell);
sRange.Select();
sRange.NumberFormatLocal=formatString;
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange);
sRange=null;
}
/// <summary>
/// 设置指定范围的单元格格式
/// </summary>
/// <param name="startCell">开始的单元格</param>
/// <param name="endCell">结束的单元格</param>
/// <param name="formatString">单元格的格式化字符
/// 常规:"G/通用格式"
/// 数值:"[红色]-0.00"(表示是2位小数,如果是负数的话则用红色表示)
/// 货币:"¥#,##0.000;[红色]¥-#,##0.000"(¥是货币符号,可以用$,也可以不填写,0.000代表三位小数位;[红色]表示如果是负数的话,用红色表示)
/// 日期:@"yyyy"年"m"月"d"日";@" (表示用年月日了表示) @"[DBNum1][$-804]yyyy"年"m"月"d"日";@"(表示用汉字表示年月日)
/// 百分比:"0.000%;[红色]-0.000%"(表示小数位为3位,红色表示如果是负数的话则用红色表示)
/// 文本:"@"(表示是文本格式)
/// 特殊:"[DBNum1][$-804]G/通用格式"(能将数字转换成中文小写,如1234转换成一千二百三十四) "[DBNum2][$-804]G/通用格式"(能将数字转换成中文大写,如1234转换成 壹仟贰佰叁拾肆)
/// 自定义:输入自定义的格式化字符串</param>
public void SetAreaCellFormat(string startCell,string endCell,string formatString)
{
Range sRange=GetRange(startCell,endCell);
sRange.Select();
sRange.NumberFormatLocal=formatString;
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange);
sRange=null;
}
/// <summary>
/// 设置某一列,某几列的列宽为自动适应大小,比如要设置第1列为自动适应大小SetColumnAutoFit("A","A")
/// </summary>
/// <param name="startColumn">开始的列</param>
/// <param name="endColumn">结束的列</param>
///
//TODO:stapangpang 要增加自动适应列大小的方法
public void SetColumnAutoFit(string startColumn,string endColumn)
{
Range sRange =(Range)exlWorkSheet.Columns[String.Format("{0}:{1}",startColumn,endColumn),Missing.Value];
sRange.Select();
sRange.EntireColumn.AutoFit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange);
sRange=null;
}
#endregion
#region " Get excel range method definition "
/// <summary>
/// 根据行列的定位,返回选定的单元格。因为Range 是通过Cell来定位的,而Cell需要2个参数定位,所以需要四个参数。
/// </summary>
/// <param name="iStartRow">定位开始Range的Cell的行</param>
/// <param name="iStartCol">定位开始Range的Cell的列</param>
/// <param name="iEndRow">定位结束Range的Cell的行</param>
/// <param name="iEndCol">定位结束Range的Cell的列</param>
/// <returns>返回指定范围的Range</returns>
public Range GetRange(int iStartRow,int iStartCol,int iEndRow,int iEndCol)
{
return exlWorkSheet.get_Range(exlApp.Cells[iStartRow,iStartCol],exlApp.Cells[iEndRow,iEndCol]);
}
/// <summary>
/// 返回指定的单元格
/// </summary>
/// <param name="cell">指定的单元格</param>
/// <returns>返回指定的单元格</returns>
public Range GetRange(string cell)
{
return exlWorkSheet.get_Range(cell,Missing.Value) ;
}
/// <summary>
/// 返回一个单元格的范围
/// </summary>
/// <param name="startCell">开始的单元格坐标</param>
/// <param name="endCell">结束的单元格坐标</param>
/// <returns>返回指定的单元格范围</returns>
public Range GetRange(string startCell,string endCell)
{
return exlWorkSheet.get_Range(startCell,endCell);
}
/// <summary>
/// 增加一个工作簿
/// </summary>
public void AddWorkSheet()
{
if (this.sheetNumber <=3)
{
exlApp.ActiveWorkbook.Sheets.Add(Missing.Value ,Missing.Value ,Missing.Value ,Missing.Value );
exlWorkSheet=(Worksheet)exlWorkBook.ActiveSheet;
exlWorkSheet.Select(Missing.Value);
}
else
{
sheetNumber++;
exlApp.ActiveWorkbook.Sheets.Add(Missing.Value ,Missing.Value ,Missing.Value ,Missing.Value );
exlWorkSheet=(Worksheet)exlWorkBook.ActiveSheet;
exlWorkSheet.Select(Missing.Value);
}
//exlWorkBook.ActiveSheet;
}
#endregion
#region " Excel range style method definition "
/// <summary>
/// 设置单元格的垂直方向对齐方式
/// </summary>
/// <param name="cell">指定的单元格</param>
/// <param name="cellAlignment">垂直方向的对齐方式</param>
public void SetCellVerticalAlignment(string cell, ExcelVerticalAlignment cellAlignment)
{
Range sRange=GetRange(cell);
sRange.Select();
sRange.VerticalAlignment = cellAlignment;
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange) ;
sRange=null;
}
/// <summary>
/// 设定指定范围的单元格的垂直对齐方式
/// </summary>
/// <param name="startCell">开始的单元格的坐标</param>
/// <param name="endCell">结束单元格的坐标</param>
/// <param name="cellAlignment">对齐方式</param>
public void SetCellAreaVerticalAlignment(string startCell,string endCell,ExcelVerticalAlignment cellAlignment)
{
Range sRange =GetRange(startCell,endCell);
sRange.Select();
sRange.VerticalAlignment = cellAlignment;
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange) ;
sRange=null;
}
/// <summary>
/// 设置指定范围的单元格的水平方向的对齐方式
/// </summary>
/// <param name="cell">指定的单元格</param>
/// <param name="cellAlignment">水平方向的对齐方式</param>
public void SetCellHorizontalAlignment(string cell,ExcelHorizontalAlignment cellAlignment)
{
Range sRange=GetRange(cell);
sRange.Select();
sRange.HorizontalAlignment = cellAlignment;
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange) ;
sRange=null;
}
/// <summary>
/// 设定指定范围的单元格的水平对齐方式
/// </summary>
/// <param name="startCell">开始的单元格的坐标</param>
/// <param name="endCell">结束单元格的坐标</param>
/// <param name="cellAlignment">对齐方式</param>
public void SetCellAreaHorizontalAlignment(string startCell,string endCell,ExcelHorizontalAlignment cellAlignment)
{
Range sRange=GetRange(startCell,endCell);
sRange.Select();
sRange.HorizontalAlignment = cellAlignment;
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange) ;
sRange=null;
}
/// <summary>
/// 设置指定单元格的边框,这里只能设置单个单元格的边框
/// </summary>
/// <param name="cell">要设定的单元格</param>
public void SetCellBorder(string cell)
{
Range sRange=GetRange(cell);
//上边框
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeTop].LineStyle =ExcelStyleLine.Continious ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeTop].Weight = ExcelBorderWeight.Thin ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeTop].ColorIndex =Excel.Constants.xlAutomatic ;
//底边框
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeBottom].LineStyle =ExcelStyleLine.Continious ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeBottom].Weight = ExcelBorderWeight.Thin ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeBottom].ColorIndex =Excel.Constants.xlAutomatic ;
//右边框
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeRight].LineStyle =ExcelStyleLine.Continious ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeRight].Weight = ExcelBorderWeight.Thin ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeRight].ColorIndex =Excel.Constants.xlAutomatic ;
//左边框
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeLeft].LineStyle =ExcelStyleLine.Continious ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeLeft].Weight = ExcelBorderWeight.Thin ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeLeft].ColorIndex =Excel.Constants.xlAutomatic ;
//释放资源
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange) ;
sRange=null;
}
/// <summary>
/// 设置指定范围的Excel单元格的边框,包括外边框,内边框
/// </summary>
/// <param name="startCell">开始的单元格坐标</param>
/// <param name="endCell">结束的单元格坐标</param>
public void SetAreaBorder(string startCell,String endCell)
{
Range sRange= GetRange(startCell,endCell);
//上边框
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeTop].LineStyle =ExcelStyleLine.Continious ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeTop].Weight = ExcelBorderWeight.Thin ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeTop].ColorIndex =Excel.Constants.xlAutomatic ;
//底边框
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeBottom].LineStyle =ExcelStyleLine.Continious ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeBottom].Weight = ExcelBorderWeight.Thin ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeBottom].ColorIndex =Excel.Constants.xlAutomatic ;
//右边框
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeRight].LineStyle =ExcelStyleLine.Continious ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeRight].Weight = ExcelBorderWeight.Thin ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeRight].ColorIndex =Excel.Constants.xlAutomatic ;
//左边框
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeLeft].LineStyle =ExcelStyleLine.Continious ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeLeft].Weight = ExcelBorderWeight.Thin ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeLeft].ColorIndex =Excel.Constants.xlAutomatic ;
//范围内水平横线
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.InsideHorizontal].LineStyle =ExcelStyleLine.Continious ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.InsideHorizontal].Weight = ExcelBorderWeight.Thin ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.InsideHorizontal].ColorIndex =Excel.Constants.xlAutomatic ;
//范围内竖直竖线
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.InsideVertical].LineStyle =ExcelStyleLine.Continious ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.InsideVertical].Weight = ExcelBorderWeight.Thin ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.InsideVertical].ColorIndex =Excel.Constants.xlAutomatic ;
//释放资源
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange) ;
sRange=null;
}
/// <summary>
/// 设置单元格的颜色
/// </summary>
/// <param name="cell">定位改单元格</param>
/// <param name="colorIndex">颜色的代码,我查了MSDN但是没有颜色代码的说明,Excel中一共有56种颜色的代码,常用的几个是
/// 1-黑色 2-白色 3-红色 4-草绿色 5-蓝色 6-黄色 7-紫色 ,如果想看仔细的颜色,就依次从 1 循环到 56 把颜色打印出来看看</param>
public void SetCellBackGroundColor(string cell,int colorIndex)
{
Range sRange =GetRange(cell);
sRange.Select();
sRange.Font.ColorIndex = colorIndex;
//释放资源
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange) ;
sRange=null;
}
/// <summary>
/// 设置指定单元格范围的颜色
/// </summary>
/// <param name="startCell">开始的单元格</param>
/// <param name="endCell">结束的单元格</param>
/// <param name="colorIndex">颜色的代码,我查了MSDN但是没有颜色代码的说明,Excel中一共有56种颜色的代码,常用的几个是
/// 1-黑色 2-白色 3-红色 4-草绿色 5-蓝色 6-黄色 7-紫色 ,如果想看仔细的颜色,就依次从 1 循环到 56 把颜色打印出来看看</param>
public void SetAreaCellBackGroundColor(string startCell ,string endCell,int colorIndex)
{
Range sRange=GetRange(startCell,endCell);
sRange.Select();
sRange.Font.ColorIndex =colorIndex;
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange);
sRange=null;
}
#endregion
}
}
* Author : Stpangpang
* Created : 2006/03/09
* Purpose : 操作Excel对象的类,因为有些报表如果要用Crystal Report 来做话,很麻烦,
* 还是专门做一个操作Excel的类,以后用的时候比较方便,目前只适用于已经做好的Excle模版。
* 2006/05已经增加了一些功能
* Version : 1.0
* -------------------------------------------------------------------------
**/
using Excel;
using System;
using System.Reflection;
namespace ExcelClass
{
/// <summary>
/// 为纪念三八妇女节,写的操作Excel的类,初步设计思想是考虑到报表的用途,自己用起来比较爽。 Stpangapng 2006/03/08
/// 2006年5月份扩充一些功能。
/// </summary>
public class ExcelBase
{
#region " Private Variable Definition "
private Application exlApp;
private _Workbook exlWorkBook;
private _Worksheet exlWorkSheet;
private int sheetNumber =1;
#endregion
#region " Public Property and Constant Definition "
/// <summary>
/// Excel单元格边框的线条的粗细枚举
/// </summary>
public enum ExcelBorderWeight
{
/// <summary>
/// 极细的线条
/// </summary>
Hairline=Excel.XlBorderWeight.xlHairline ,
/// <summary>
/// 中等的线条
/// </summary>
Medium=Excel.XlBorderWeight.xlMedium ,
/// <summary>
/// 粗线条
/// </summary>
Thick=Excel.XlBorderWeight.xlThick ,
/// <summary>
/// 细线条
/// </summary>
Thin=Excel.XlBorderWeight.xlThin
}
/// <summary>
/// Excel单元格边框枚举
/// </summary>
public enum ExcelBordersIndex
{
/// <summary>
/// 主对角线从
/// </summary>
DiagonalDown=Excel.XlBordersIndex.xlDiagonalDown ,
/// <summary>
/// 辅对角线
/// </summary>
DiagonUp=Excel.XlBordersIndex.xlDiagonalUp ,
/// <summary>
///底边框
/// </summary>
EdgeBottom=Excel.XlBordersIndex.xlEdgeBottom ,
/// <summary>
/// 左边框
/// </summary>
EdgeLeft=Excel.XlBordersIndex.xlEdgeLeft ,
/// <summary>
/// 右边框
/// </summary>
EdgeRight=Excel.XlBordersIndex.xlEdgeRight ,
/// <summary>
/// 顶边框
/// </summary>
EdgeTop=Excel.XlBordersIndex.xlEdgeTop ,
/// <summary>
/// 边框内水平横线
/// </summary>
InsideHorizontal=Excel.XlBordersIndex.xlInsideHorizontal ,
/// <summary>
/// 边框内垂直竖线
/// </summary>
InsideVertical=Excel.XlBordersIndex.xlInsideVertical
}
/// <summary>
/// Excel单元格的竖直方法对齐枚举
/// </summary>
public enum ExcelVerticalAlignment
{
/// <summary>
/// 居中
/// </summary>
Center=Excel.Constants.xlCenter ,
/// <summary>
/// 靠上
/// </summary>
Top=Excel.Constants.xlTop,
/// <summary>
/// 靠下
/// </summary>
Bottom=Excel.Constants.xlBottom ,
/// <summary>
/// 两端对齐
/// </summary>
Justify=Excel.Constants.xlJustify ,
/// <summary>
/// 分散对齐
/// </summary>
Distributed=Excel.Constants.xlDistributed
};
/// <summary>
/// Excel 水平方向对齐枚举
/// </summary>
public enum ExcelHorizontalAlignment
{
/// <summary>
///常规
/// </summary>
General = Excel.Constants.xlGeneral ,
/// <summary>
/// 靠左
/// </summary>
Left =Excel.Constants.xlLeft ,
/// <summary>
/// 居中
/// </summary>
Center=Excel.Constants.xlCenter ,
/// <summary>
/// 靠右
/// </summary>
Right=Excel.Constants.xlRight,
/// <summary>
/// 填充
/// </summary>
Fill=Excel.Constants.xlFill,
/// <summary>
/// 两端对齐
/// </summary>
Justify=Excel.Constants.xlJustify,
/// <summary>
/// 跨列居中
/// </summary>
CenterAcrossSelection=Excel.Constants.xlCenterAcrossSelection,
/// <summary>
/// 分散对齐
/// </summary>
Distributed=Excel.Constants.xlDistributed
}
/// <summary>
/// Excel边框线条的枚举
/// </summary>
public enum ExcelStyleLine
{
/// <summary>
/// 没有线条
/// </summary>
StyleNone =Excel.XlLineStyle.xlLineStyleNone ,
/// <summary>
/// 连续的细线
/// </summary>
Continious=Excel.XlLineStyle.xlContinuous ,
/// <summary>
/// 点状线
/// </summary>
Dot=Excel.XlLineStyle.xlDot ,
/// <summary>
/// 双条线
/// </summary>
Double=Excel.XlLineStyle.xlDouble ,
}
/// <summary>
/// 排序的玫举
/// </summary>
public enum ExcelSortOrder
{
/// <summary>
/// 升序
/// </summary>
Ascending = Excel.XlSortOrder.xlAscending,
/// <summary>
/// 降序
/// </summary>
Descending = Excel.XlSortOrder.xlDescending ,
}
#endregion
#region " Construction Method "
/// <summary>
/// 构造函数
/// </summary>
public ExcelBase()
{
//实例化Excel对象。
exlApp=new Excel.Application();
}
/// <summary>
/// 构造函数
/// </summary>
/// <param name="ExcelVisible">Excel是否可见</param>
public ExcelBase(bool ExcelVisible)
{
exlApp =new Excel.Application();
exlApp.Visible =ExcelVisible ;
}
#endregion
#region " Open and dispose method definition "
/// <summary>
/// 打开一个Excel文件
/// </summary>
public void Open()
{
//Get a new WorkSheet
exlWorkBook =(Workbook)exlApp.Workbooks.Add(Missing.Value);
exlWorkSheet=(Worksheet)exlWorkBook.ActiveSheet;
}
/// <summary>
/// 打开已经存在的Excel文件模版
/// </summary>
/// <param name="XLTPath">已经存在的文件模版的完整路径</param>
public void Open(string XLTPath )
{
if (System.IO.File.Exists(XLTPath))
{
exlWorkBook=(Workbook)exlApp.Workbooks.Add(XLTPath);
exlWorkSheet =(Worksheet)exlWorkBook.ActiveSheet;
}
else
{
throw new System.IO.FileNotFoundException(string.Format("{0}不存在,请重新确定文件名",XLTPath));
}
}
/// <summary>
/// 保存Excel文件
/// </summary>
/// <param name="fileName">保存的文件名</param>
public void SaveAs(string fileName)
{
exlWorkSheet.SaveAs(fileName, Missing.Value, Missing.Value, Missing.Value, false , false, Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value ,Missing.Value , Missing.Value);
}
/// <summary>
/// 彻底关闭Excel的资源和进程
/// </summary>
public void Dispose()
{
if (exlApp !=null)
{
exlApp.Quit();
}
if (exlWorkBook !=null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(exlWorkBook);
exlWorkBook=null;
}
System.Runtime.InteropServices.Marshal.ReleaseComObject(exlWorkSheet);
exlWorkSheet=null;
System.Runtime.InteropServices.Marshal.ReleaseComObject(exlApp);
exlApp = null;
GC.Collect();
}
#endregion
#region " Print and PrintPreview method definition "
/// <summary>
/// 打印Excel文件,可以设置是否是打印前预览打印的Excel文件
/// </summary>
/// <param name="IsPrintPreview">打印前是否预览 , true:打印前预览false:直接打印,不预览 </param>
public void Print(bool IsPrintPreview)
{
bool flag =exlApp.Visible ;
if (exlApp.Visible )
{
exlApp.Visible =true;
}
exlWorkSheet.PrintOut(Missing.Value,Missing.Value,Missing.Value ,IsPrintPreview,Missing.Value ,Missing.Value ,Missing.Value,Missing.Value ) ;
exlApp.Visible =flag;
}
/// <summary>
/// 打印Excel文件,可以设置是否打印预览,以及打印的份数
/// </summary>
/// <param name="IsPrintPreview">打印前是否预览 , true:打印前预览false:直接打印,不预览</param>
/// <param name="iCopy">打印的份数</param>
public void Print(bool IsPrintPreview,int iCopy)
{
if (iCopy < 1)
{
iCopy=1;
}
exlWorkSheet.PrintOut(Missing.Value,Missing.Value,Missing.Value ,IsPrintPreview,iCopy ,Missing.Value ,Missing.Value,Missing.Value ) ;
}
/// <summary>
/// 打印预览Excel文件
/// </summary>
public void PrintPreview()
{
exlWorkSheet.PrintPreview(Missing.Value) ;
}
#endregion
#region " Detail control excel method "
/// <summary>
/// 将Excel隐藏
/// </summary>
public void Hide()
{
exlApp.Visible =false;
}
/// <summary>
/// 将Excel显示
/// </summary>
public void Show()
{
exlApp.Visible =true;
}
/// <summary>
/// 设置工作簿的名称
/// </summary>
/// <param name="WorkSheet"></param>
public void SetWorkSheetName(string WorkSheet)
{
exlWorkSheet.Name =WorkSheet;
}
/// <summary>
///返回指定单元格的内容
/// </summary>
/// <param name="iRow">定位的行</param>
/// <param name="iCol">定位的列</param>
/// <returns>返回指定单元格的内容</returns>
public string GetCellText(int iRow,int iCol)
{
Range sRange =exlWorkSheet.get_Range(iRow,iCol);
string returnText =(string)sRange.Text ;
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange);
sRange=null;
return returnText;
}
/// <summary>
/// 设置指定范围单元格的内容,通过单元格,比如从"A1" 到 "B3"
/// </summary>
/// <param name="startCell">开始的单元格,比如"A1"</param>
/// <param name="endCell">结束的单元格,比如"B2"</param>机动车统计表.xlt
/// <param name="text">要设置的内容,可以使用Excel的公式</param>
public void SetCellText(string startCell,string endCell,string text)
{
Range sRange =exlWorkSheet.get_Range(startCell,endCell);
//这里没有用value属性,而用Formula属性,因为考虑到可以扩展,可以利用公式
sRange.Cells.Formula=text;
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange);
sRange=null;
}
/// <summary>
/// 设置指定范围的单元格的内容,通过行列来定位。如第1行第2列内容
/// </summary>
/// <param name="iRow">开始的行</param>
/// <param name="iCol">开始的列</param>
///<param name="text">要设置的文本,可以使用Excel的公式</param>
public void SetCellText(int iRow,int iCol,string text)
{
Range sRange=this.GetRange(iRow,iCol,iRow,iCol);
sRange.Cells.Formula=text;
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange) ;
sRange=null;
}
/// <summary>
/// 设置指定单元格的内容,比如设置"A1"单元格的内容
/// </summary>
/// <param name="cell">指定的单元格</param>
/// <param name="text">要设置的内容,可以使用Excel的公式,如sum(A1:A7)--合计A1到A7数值</param>
public void SetCellText(string cell,string text)
{
Range sRange=GetRange(cell);
sRange.Cells.Formula=text;
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange) ;
sRange=null;
}
/// <summary>
/// 设置指定单元格的内容
/// </summary>
/// <param name="cell">指定的单元格</param>
/// <param name="num">要设置的内容</param>
public void SetCellText(string cell,Int32 num)
{
Range sRange=GetRange(cell);
sRange.Cells.Formula=num.ToString();
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange) ;
sRange=null;
}
/// <summary>
/// 设置指定单元格的内容,可以指定格式
/// </summary>
/// <param name="cell">要指定的单元格</param>
/// <param name="textValue">要填写的内容</param>
/// <param name="StringFormat">要显示的格式</param>
///<param name="FontName">设置单元格的字体</param>
/// <param name="FontSize">设置单元格的字体大小</param>
public void setCellTextByFormat(string cell,string textValue,string StringFormat,string FontName ,string FontSize)
{
Range sRange=GetRange(cell);
sRange.Select();
if (StringFormat!= "")
{
sRange.NumberFormatLocal = StringFormat;
}
if (FontName !="")
{
sRange.Font.Name = FontName;
}
if (FontSize !="")
{
sRange.Font.Size = FontSize;
}
sRange.Cells.Formula=textValue;
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange) ;
sRange=null;
}
/// <summary>
/// 设置指定单元格的内容,可以指定格式
/// </summary>
/// <param name="cell">要指定的单元格</param>
/// <param name="textValue">要填写的内容</param>
/// <param name="StringFormat">要显示的格式</param>
///<param name="FontName">设置单元格的字体</param>
/// <param name="FontSize">设置单元格的字体大小</param>
/// <param name="colorIndex">设置单元格的颜色,我查了MSDN但是没有颜色代码的说明,Excel中一共有56种颜色的代码,常用的几个是
/// 1-黑色 2-白色 3-红色 4-草绿色 5-蓝色 6-黄色 7-紫色 ,如果想看仔细的颜色,就依次从 1 循环到 56 把颜色打印出来看看</param>
public void setCellTextByFormat(string cell,string textValue,string StringFormat,string FontName ,string FontSize,int colorIndex)
{
Range sRange=GetRange(cell);
sRange.Select();
if (StringFormat!= "")
{
sRange.Cells.NumberFormatLocal = StringFormat;
}
if (FontName !="")
{
sRange.Font.Name = FontName;
}
if (FontSize !="")
{
sRange.Font.Size = FontSize;
}
if(colorIndex !=0 )
{
sRange.Font.ColorIndex = colorIndex;
}
sRange.Cells.Formula=textValue;
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange) ;
sRange=null;
}
/// <summary>
/// 设置单元格的内容(指定单元格的格式化字符串)
/// </summary>
/// <param name="cell">指定的单元格</param>
/// <param name="textValue">内容</param>
/// <param name="stringFormat">格式化字符串</param>
public void setCellText(string cell,string textValue,string stringFormat)
{
Range sRange=GetRange(cell);
sRange.Select();
if (stringFormat!= "")
{
sRange.Cells.NumberFormatLocal = stringFormat;
}
sRange.Cells.Formula=textValue;
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange) ;
sRange=null;
}
/// <summary>
/// 得到指定单元格的内容
/// </summary>
/// <param name="cell">指定的单元格比如 A1,A2</param>
/// <returns>返回指定的内容</returns>
public object GetCellText(string cell)
{
object returnValue;
Range sRange=GetRange(cell);
returnValue= sRange.Cells.Text;
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange) ;
sRange=null;
return returnValue;
}
/// <summary>
/// 设置指定单元格的内容,比如设置"A1"单元格的内容
/// </summary>
/// <param name="cell">指定的单元格</param>
/// <param name="text">要设置的内容,使用Excel里面的R1C1这样的格式(不知道是不是画蛇添足,因为Excel里的Macro中是这样使用的)</param>
public void SetCellTextR1C1(string cell,string text)
{
Range sRange=GetRange(cell);
sRange.Cells.FormulaR1C1 =text;
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange) ;
sRange=null;
}
/// <summary>
///设置单元格的单元格格式
/// </summary>
/// <param name="cell">要设定的单元格的坐标</param>
/// <param name="formatString">单元格的格式化字符
/// 常规:"G/通用格式"
/// 数值:"[红色]-0.00"(表示是2位小数,如果是负数的话则用红色表示)
/// 货币:"¥#,##0.000;[红色]¥-#,##0.000"(¥是货币符号,可以用$,也可以不填写,0.000代表三位小数位;[红色]表示如果是负数的话,用红色表示)
/// 日期:@"yyyy"年"m"月"d"日";@" (表示用年月日了表示) @"[DBNum1][$-804]yyyy"年"m"月"d"日";@"(表示用汉字表示年月日)
/// 百分比:"0.000%;[红色]-0.000%"(表示小数位为3位,红色表示如果是负数的话则用红色表示)
/// 文本:"@"(表示是文本格式)
/// 特殊:"[DBNum1][$-804]G/通用格式"(能将数字转换成中文小写,如1234转换成一千二百三十四) "[DBNum2][$-804]G/通用格式"(能将数字转换成中文大写,如1234转换成 壹仟贰佰叁拾肆)
/// 自定义:输入自定义的格式化字符串
/// </param>
public void SetCellFormat(string cell,string formatString)
{
Range sRange=GetRange(cell);
sRange.Select();
sRange.NumberFormatLocal=formatString;
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange);
sRange=null;
}
/// <summary>
/// 设置指定范围的单元格格式
/// </summary>
/// <param name="startCell">开始的单元格</param>
/// <param name="endCell">结束的单元格</param>
/// <param name="formatString">单元格的格式化字符
/// 常规:"G/通用格式"
/// 数值:"[红色]-0.00"(表示是2位小数,如果是负数的话则用红色表示)
/// 货币:"¥#,##0.000;[红色]¥-#,##0.000"(¥是货币符号,可以用$,也可以不填写,0.000代表三位小数位;[红色]表示如果是负数的话,用红色表示)
/// 日期:@"yyyy"年"m"月"d"日";@" (表示用年月日了表示) @"[DBNum1][$-804]yyyy"年"m"月"d"日";@"(表示用汉字表示年月日)
/// 百分比:"0.000%;[红色]-0.000%"(表示小数位为3位,红色表示如果是负数的话则用红色表示)
/// 文本:"@"(表示是文本格式)
/// 特殊:"[DBNum1][$-804]G/通用格式"(能将数字转换成中文小写,如1234转换成一千二百三十四) "[DBNum2][$-804]G/通用格式"(能将数字转换成中文大写,如1234转换成 壹仟贰佰叁拾肆)
/// 自定义:输入自定义的格式化字符串</param>
public void SetAreaCellFormat(string startCell,string endCell,string formatString)
{
Range sRange=GetRange(startCell,endCell);
sRange.Select();
sRange.NumberFormatLocal=formatString;
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange);
sRange=null;
}
/// <summary>
/// 设置某一列,某几列的列宽为自动适应大小,比如要设置第1列为自动适应大小SetColumnAutoFit("A","A")
/// </summary>
/// <param name="startColumn">开始的列</param>
/// <param name="endColumn">结束的列</param>
///
//TODO:stapangpang 要增加自动适应列大小的方法
public void SetColumnAutoFit(string startColumn,string endColumn)
{
Range sRange =(Range)exlWorkSheet.Columns[String.Format("{0}:{1}",startColumn,endColumn),Missing.Value];
sRange.Select();
sRange.EntireColumn.AutoFit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange);
sRange=null;
}
#endregion
#region " Get excel range method definition "
/// <summary>
/// 根据行列的定位,返回选定的单元格。因为Range 是通过Cell来定位的,而Cell需要2个参数定位,所以需要四个参数。
/// </summary>
/// <param name="iStartRow">定位开始Range的Cell的行</param>
/// <param name="iStartCol">定位开始Range的Cell的列</param>
/// <param name="iEndRow">定位结束Range的Cell的行</param>
/// <param name="iEndCol">定位结束Range的Cell的列</param>
/// <returns>返回指定范围的Range</returns>
public Range GetRange(int iStartRow,int iStartCol,int iEndRow,int iEndCol)
{
return exlWorkSheet.get_Range(exlApp.Cells[iStartRow,iStartCol],exlApp.Cells[iEndRow,iEndCol]);
}
/// <summary>
/// 返回指定的单元格
/// </summary>
/// <param name="cell">指定的单元格</param>
/// <returns>返回指定的单元格</returns>
public Range GetRange(string cell)
{
return exlWorkSheet.get_Range(cell,Missing.Value) ;
}
/// <summary>
/// 返回一个单元格的范围
/// </summary>
/// <param name="startCell">开始的单元格坐标</param>
/// <param name="endCell">结束的单元格坐标</param>
/// <returns>返回指定的单元格范围</returns>
public Range GetRange(string startCell,string endCell)
{
return exlWorkSheet.get_Range(startCell,endCell);
}
/// <summary>
/// 增加一个工作簿
/// </summary>
public void AddWorkSheet()
{
if (this.sheetNumber <=3)
{
exlApp.ActiveWorkbook.Sheets.Add(Missing.Value ,Missing.Value ,Missing.Value ,Missing.Value );
exlWorkSheet=(Worksheet)exlWorkBook.ActiveSheet;
exlWorkSheet.Select(Missing.Value);
}
else
{
sheetNumber++;
exlApp.ActiveWorkbook.Sheets.Add(Missing.Value ,Missing.Value ,Missing.Value ,Missing.Value );
exlWorkSheet=(Worksheet)exlWorkBook.ActiveSheet;
exlWorkSheet.Select(Missing.Value);
}
//exlWorkBook.ActiveSheet;
}
#endregion
#region " Excel range style method definition "
/// <summary>
/// 设置单元格的垂直方向对齐方式
/// </summary>
/// <param name="cell">指定的单元格</param>
/// <param name="cellAlignment">垂直方向的对齐方式</param>
public void SetCellVerticalAlignment(string cell, ExcelVerticalAlignment cellAlignment)
{
Range sRange=GetRange(cell);
sRange.Select();
sRange.VerticalAlignment = cellAlignment;
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange) ;
sRange=null;
}
/// <summary>
/// 设定指定范围的单元格的垂直对齐方式
/// </summary>
/// <param name="startCell">开始的单元格的坐标</param>
/// <param name="endCell">结束单元格的坐标</param>
/// <param name="cellAlignment">对齐方式</param>
public void SetCellAreaVerticalAlignment(string startCell,string endCell,ExcelVerticalAlignment cellAlignment)
{
Range sRange =GetRange(startCell,endCell);
sRange.Select();
sRange.VerticalAlignment = cellAlignment;
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange) ;
sRange=null;
}
/// <summary>
/// 设置指定范围的单元格的水平方向的对齐方式
/// </summary>
/// <param name="cell">指定的单元格</param>
/// <param name="cellAlignment">水平方向的对齐方式</param>
public void SetCellHorizontalAlignment(string cell,ExcelHorizontalAlignment cellAlignment)
{
Range sRange=GetRange(cell);
sRange.Select();
sRange.HorizontalAlignment = cellAlignment;
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange) ;
sRange=null;
}
/// <summary>
/// 设定指定范围的单元格的水平对齐方式
/// </summary>
/// <param name="startCell">开始的单元格的坐标</param>
/// <param name="endCell">结束单元格的坐标</param>
/// <param name="cellAlignment">对齐方式</param>
public void SetCellAreaHorizontalAlignment(string startCell,string endCell,ExcelHorizontalAlignment cellAlignment)
{
Range sRange=GetRange(startCell,endCell);
sRange.Select();
sRange.HorizontalAlignment = cellAlignment;
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange) ;
sRange=null;
}
/// <summary>
/// 设置指定单元格的边框,这里只能设置单个单元格的边框
/// </summary>
/// <param name="cell">要设定的单元格</param>
public void SetCellBorder(string cell)
{
Range sRange=GetRange(cell);
//上边框
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeTop].LineStyle =ExcelStyleLine.Continious ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeTop].Weight = ExcelBorderWeight.Thin ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeTop].ColorIndex =Excel.Constants.xlAutomatic ;
//底边框
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeBottom].LineStyle =ExcelStyleLine.Continious ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeBottom].Weight = ExcelBorderWeight.Thin ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeBottom].ColorIndex =Excel.Constants.xlAutomatic ;
//右边框
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeRight].LineStyle =ExcelStyleLine.Continious ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeRight].Weight = ExcelBorderWeight.Thin ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeRight].ColorIndex =Excel.Constants.xlAutomatic ;
//左边框
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeLeft].LineStyle =ExcelStyleLine.Continious ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeLeft].Weight = ExcelBorderWeight.Thin ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeLeft].ColorIndex =Excel.Constants.xlAutomatic ;
//释放资源
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange) ;
sRange=null;
}
/// <summary>
/// 设置指定范围的Excel单元格的边框,包括外边框,内边框
/// </summary>
/// <param name="startCell">开始的单元格坐标</param>
/// <param name="endCell">结束的单元格坐标</param>
public void SetAreaBorder(string startCell,String endCell)
{
Range sRange= GetRange(startCell,endCell);
//上边框
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeTop].LineStyle =ExcelStyleLine.Continious ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeTop].Weight = ExcelBorderWeight.Thin ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeTop].ColorIndex =Excel.Constants.xlAutomatic ;
//底边框
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeBottom].LineStyle =ExcelStyleLine.Continious ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeBottom].Weight = ExcelBorderWeight.Thin ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeBottom].ColorIndex =Excel.Constants.xlAutomatic ;
//右边框
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeRight].LineStyle =ExcelStyleLine.Continious ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeRight].Weight = ExcelBorderWeight.Thin ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeRight].ColorIndex =Excel.Constants.xlAutomatic ;
//左边框
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeLeft].LineStyle =ExcelStyleLine.Continious ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeLeft].Weight = ExcelBorderWeight.Thin ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.EdgeLeft].ColorIndex =Excel.Constants.xlAutomatic ;
//范围内水平横线
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.InsideHorizontal].LineStyle =ExcelStyleLine.Continious ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.InsideHorizontal].Weight = ExcelBorderWeight.Thin ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.InsideHorizontal].ColorIndex =Excel.Constants.xlAutomatic ;
//范围内竖直竖线
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.InsideVertical].LineStyle =ExcelStyleLine.Continious ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.InsideVertical].Weight = ExcelBorderWeight.Thin ;
sRange.Borders[(Excel.XlBordersIndex)ExcelBordersIndex.InsideVertical].ColorIndex =Excel.Constants.xlAutomatic ;
//释放资源
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange) ;
sRange=null;
}
/// <summary>
/// 设置单元格的颜色
/// </summary>
/// <param name="cell">定位改单元格</param>
/// <param name="colorIndex">颜色的代码,我查了MSDN但是没有颜色代码的说明,Excel中一共有56种颜色的代码,常用的几个是
/// 1-黑色 2-白色 3-红色 4-草绿色 5-蓝色 6-黄色 7-紫色 ,如果想看仔细的颜色,就依次从 1 循环到 56 把颜色打印出来看看</param>
public void SetCellBackGroundColor(string cell,int colorIndex)
{
Range sRange =GetRange(cell);
sRange.Select();
sRange.Font.ColorIndex = colorIndex;
//释放资源
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange) ;
sRange=null;
}
/// <summary>
/// 设置指定单元格范围的颜色
/// </summary>
/// <param name="startCell">开始的单元格</param>
/// <param name="endCell">结束的单元格</param>
/// <param name="colorIndex">颜色的代码,我查了MSDN但是没有颜色代码的说明,Excel中一共有56种颜色的代码,常用的几个是
/// 1-黑色 2-白色 3-红色 4-草绿色 5-蓝色 6-黄色 7-紫色 ,如果想看仔细的颜色,就依次从 1 循环到 56 把颜色打印出来看看</param>
public void SetAreaCellBackGroundColor(string startCell ,string endCell,int colorIndex)
{
Range sRange=GetRange(startCell,endCell);
sRange.Select();
sRange.Font.ColorIndex =colorIndex;
System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange);
sRange=null;
}
#endregion
}
}
浙公网安备 33010602011771号