zoukankan      html  css  js  c++  java
  • Excel操作类

    [c#]代码库
    using Excel;
    using System;
    using System.Reflection;

    namespace ExcelClass
    {
    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 = GetRange(iRow, iCol, iRow, iCol);
    string returnText = (string)sRange.Text;
    System.Runtime.InteropServices.Marshal.ReleaseComObject(sRange);
    sRange = null;
    return returnText;
    }

    /// <summary>
    ///返回指定单元格的内容
    /// </summary>
    /// <param name="iRow">定位的行</param>
    /// <param name="iCol">定位的列</param>
    /// <returns>返回指定单元格的内容</returns>
    public string GetCellText(int startRow, int startCol, int startRow2, int startCol2)
    {
    Range sRange = GetRange(startRow, startCol, startRow2, startCol2);
    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>
    /// 设置指定范围单元格的内容,通过单元格,比如从"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, int text)
    {
    Range sRange = exlWorkSheet.get_Range(startCell, endCell);
    //这里没有用value属性,而用Formula属性,因为考虑到可以扩展,可以利用公式
    sRange.Cells.Formula = text.ToString();
    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>
    /// 设置指定范围的单元格的内容,通过行列来定位。如第1行第2列内容
    /// </summary>
    /// <param name="iRow">开始的行</param>
    /// <param name="iCol">开始的列</param>
    ///<param name="text">要设置的文本,可以使用Excel的公式</param>
    public void SetCellTextNOZero(int iRow, int iCol, string text)
    {
    string txt = "";
    try
    {
    if (System.Convert.ToInt32(text) == 0)
    {
    txt = "";
    }
    else
    {
    txt = text;
    }
    }
    catch
    {
    txt = text;
    }


    Range sRange = this.GetRange(iRow, iCol, iRow, iCol);
    sRange.Cells.Formula = txt;
    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, int 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>
    /// <param name="FontName">设置单元格的字体</param>
    /// <param name="FontSize">设置单元格的字体大小</param>
    /// <param name="colorIndex">设置单元格的颜色,我查了MSDN但是没有颜色代码的说明,Excel中一共有56种颜色的代码,常用的几个是
    /// 1-黑色 2-白色 3-红色 4-草绿色 5-蓝色 6-黄色 7-紫色 ,如果想看仔细的颜色,就依次从 1 循环到 56 把颜色打印出来看看</param>
    /// <param name="Bold">设置单元格的字体是否粗体</param>
    public void setCellTextByFormat(string cell, string textValue, string StringFormat, string FontName, string FontSize, int colorIndex, bool Bold)
    {
    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.Font.Bold = Bold;
    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>
    /// <param name="Bold">设置单元格的字体是否粗体</param>
    /// <param name="BcolorIndex">设置单元格背景颜色</param>
    public void setCellTextByFormat(string cell, string textValue, string StringFormat, string FontName, string FontSize, int colorIndex, bool Bold, int BcolorIndex)
    {
    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.Font.Bold = Bold;
    sRange.Cells.Formula = textValue;
    sRange.Interior.ColorIndex = BcolorIndex;

    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 SetAreaBorder1(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.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>
    /// 设置指定范围的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;

    }

    /// <summary>
    /// 合并单元格
    /// <param name="startCell">开始的单元格</param>
    /// <param name="endCell">结束的单元格</param>
    /// </summary>
    public void SetMergeCells(string startCell, string endCell)
    {
    Range sRange = GetRange(startCell, endCell);
    sRange.MergeCells = true;
    }
    /// <summary>
    /// 合并单元格
    /// <param name="iStartRow">定位开始Range的Cell的行(A1=1,1)</param>
    /// <param name="iStartCol">定位开始Range的Cell的列(A1=1,1)</param>
    /// <param name="iEndRow">定位结束Range的Cell的行(A1=1,1)</param>
    /// <param name="iEndCol">定位结束Range的Cell的列(A1=1,1)</param>
    /// </summary>
    public void SetMergeCells(int iStartRow, int iStartCol, int iEndRow, int iEndCol)
    {
    Range sRange = GetRange(iStartRow, iStartCol, iEndRow, iEndCol);
    sRange.MergeCells = true;
    }

    /// <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>
    /// </summary>
    public void SetInteriorColor(string startCell, string endCell, int ColorIndex)
    {
    Range sRange = GetRange(startCell, endCell);
    sRange.Interior.ColorIndex = ColorIndex;
    }

    /// <summary>
    /// 设置单元格背景颜色
    /// <param name="iStartRow">定位开始Range的Cell的行(A1=1,1)</param>
    /// <param name="iStartCol">定位开始Range的Cell的列(A1=1,1)</param>
    /// <param name="iEndRow">定位结束Range的Cell的行(A1=1,1)</param>
    /// <param name="iEndCol">定位结束Range的Cell的列(A1=1,1)</param>
    /// <param name="ColorIndex">颜色的代码,我查了MSDN但是没有颜色代码的说明,Excel中一共有56种颜色的代码,常用的几个是
    /// 1-黑色 2-白色 3-红色 4-草绿色 5-蓝色 6-黄色 7-紫色 ,如果想看仔细的颜色,就依次从 1 循环到 56 把颜色打印出来看看</param>
    /// </summary>
    public void SetInteriorColor(int iStartRow, int iStartCol, int iEndRow, int iEndCol, int ColorIndex)
    {
    Range sRange = GetRange(iStartRow, iStartCol, iEndRow, iEndCol);
    sRange.Interior.ColorIndex = ColorIndex;
    }
    #endregion

    }
    }

  • 相关阅读:
    BZOJ 2400: Spoj 839 Optimal Marks (按位最小割)
    bzoj4873: [Shoi2017]寿司餐厅(最大权闭合子图)
    bzoj1497: [NOI2006]最大获利(最大权闭合子图)
    bzoj1607: [Usaco2008 Dec]Patting Heads 轻拍牛头
    bzoj1024: [SCOI2009]生日快乐
    bzoj2761: [JLOI2011]不重复数字
    bzoj1257: [CQOI2007]余数之和sum
    bzoj2456: mode
    bzoj1831: [AHOI2008]逆序对(DP+双精bzoj1786)
    bzoj2431: [HAOI2009]逆序对数列
  • 原文地址:https://www.cnblogs.com/chuangjie1988/p/6821914.html
Copyright © 2011-2022 走看看