asp.net生成excel

.Net 生成Excel文件
以下为.NET生成Excel文件的全部代码,并包含一定操作。其中引用到一个枚举public enum ExcelAlign {Left,Right,Center};请自行定义在合适处并修改代码中相应部分。

注:本代码在windows2000 server office2003环境下测试通过,不会遗留Excel进程;使用VS.net 2003编写

------------------------

using System;

using System.Collections;

using Excel;

namespace JointSkyLibrary.JExcel

{

///

/// 对Excel进行操作的类。

///

public class JointExcel

{

  #region 私有成员

  private Excel.ApplicationClass m_objExcel;//Excel应用程序对象

  private Excel.Workbooks m_objBooks;//Excel的Books对象

  private Excel.Workbook m_objBook;//当前Book对象

  private Excel.Worksheet m_objSheet;//当前Sheet对象

  private Excel.Range m_Range;//当前Range对象

  private System.Reflection.Missing miss = System.Reflection.Missing.Value;//空数据变量

  private Excel.Font m_Font;//当前单元格的字体属性对象

  private Excel.Borders m_Borders;//当前单元格或者区域的边框属性对象

  //单元格的四条边框对象

  private Excel.Border m_BorderTop;

  private Excel.Border m_BorderBottom;

  private Excel.Border m_BorderLeft;

  private Excel.Border m_BorderRight;

  private Excel.Range m_cellRange;//单元格Range对象,用来取得对象的Rows和Columns属性对象

  //单元格列号数组

  private string[] m_colString = new string[26] {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};

  #endregion

  ///

  /// 本类使用在web application中时,请在Web.Config中添加

  ///

  ///

  public JointExcel()

  {

   m_objExcel = new Excel.ApplicationClass();

   m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;

   m_objBook = (Excel.Workbook)(m_objBooks.Add(miss));

   m_objSheet = (Excel.Worksheet)m_objBook.ActiveSheet;

  }

  ~JointExcel()

  {

   //释放所有Com对象

   if(m_cellRange != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(m_cellRange);

   if(m_BorderTop != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(m_BorderTop);

   if(m_BorderBottom != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(m_BorderBottom);

   if(m_BorderLeft != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(m_BorderLeft);

   if(m_BorderRight != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(m_BorderRight);

   if(m_Borders != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(m_Borders);

   if(m_Font != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(m_Font);

   if(m_Range != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(m_Range);

   if(m_objSheet != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objSheet);

   if(m_objBook != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objBook);

   if(m_objBooks != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objBooks);

   if(m_objExcel != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objExcel);

   GC.Collect();

  }

  #region 选定单元格

  private string GetCell(int ColNum,int RowNum)

  {

   int row = RowNum +1;

   if(ColNum<0 || ColNum >255)

   {

    throw new Exception("行号错误");

   }

   int i0,i1 = 0;

   i0 = Math.DivRem(ColNum,25,out i1);

   if(i0==0 && i1==0)

   {

    return "A"+row.ToString();

   }

   else if(i0==0 && i1>0)

   {

    return m_colString[i1]+row.ToString();

   }

   else

   {

    return m_colString[i0]+m_colString[i1]+row.ToString();

   }

  }

  ///

  /// 选定相应单元格

  ///

  /// int 列号

  /// int 行号

  public void SetRange(int ColNum,int RowNum)

  {

   m_Range = m_objSheet.get_Range((object)GetCell(ColNum,RowNum),miss);

   m_Font = m_Range.Font;

   m_Borders = m_Range.Borders;

   m_BorderTop = m_Borders[Excel.XlBordersIndex.xlEdgeTop];

   m_BorderBottom = m_Borders[Excel.XlBordersIndex.xlEdgeBottom];

   m_BorderLeft = m_Borders[Excel.XlBordersIndex.xlEdgeLeft];

   m_BorderRight = m_Borders[Excel.XlBordersIndex.xlEdgeRight];

   m_cellRange = m_Range;

  }

  ///

  /// 选择相应的区域

  ///

  /// 起始单元格列号

  /// 起始单元格行号

  /// 结束单元格列号

  /// 结束单元格行号

  public void SetRange(int startColNum,int startRowNum,int endColNum,int endRowNum)

  {

   m_Range = m_objSheet.get_Range((object)GetCell(startColNum,startRowNum),(object)GetCell(endColNum,endRowNum));

   m_Font = m_Range.Font;

   m_Borders = m_Range.Borders;

   m_BorderTop = m_Borders[Excel.XlBordersIndex.xlEdgeTop];

   m_BorderBottom = m_Borders[Excel.XlBordersIndex.xlEdgeBottom];

   m_BorderLeft = m_Borders[Excel.XlBordersIndex.xlEdgeLeft];

   m_BorderRight = m_Borders[Excel.XlBordersIndex.xlEdgeRight];

   m_cellRange = m_Range;

  }

  #endregion

  //开始具体的Excel操作

  #region 给单元格附值

  ///

  /// 给选定单元格附值

  ///

  /// 值

  public void SetCellValue(string value)

  {

   if(m_Range == null) throw new System.Exception("没有设定单元格或者区域");

   m_Range.Value2 = value;

  }

  ///

  /// 给选定单元格附值

  ///

  /// 列号

  /// 行号

  /// 值

  public void SetCellValue(int row,int col,string value)

  {

   SetRange(col,row);

   m_Range.Value2 = value;

  }

  ///

  /// 合并选定区域后给其附值

  ///

  /// 起始行号

  /// 起始列号

  /// 结束行号

  /// 结束列号

  /// 值

  public void SetCellValue(int startRow,int startCol,int endRow,int endCol,string value)

  {

   Merge(startRow,startCol,endRow,endCol);

   m_Range.Value2 = value;

  }

  #endregion

  #region 设定单元格对齐方式

  ///

  /// 设定单元格中文字的对齐方式

  ///

  /// 对齐方式

  public void SetHorizontal(JointEmun.ExcelAlign ea)

  {

   if(m_Range == null) throw new System.Exception("没有设定单元格或者区域");

   switch(ea.ToString())

   {

    case "Left" :

     m_Range.HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft;

     break;

    case "Right" :

     m_Range.HorizontalAlignment = Excel.XlHAlign.xlHAlignRight;

     break;

    case "center" :

     m_Range.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;

     break;

    default:

     m_Range.HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft;

     break;

   }

  }

  ///

  /// 设定单元格中文字的对齐方式

  ///

  /// 单元格行号

  /// 单元格列号

  /// 对齐方式

  public void SetHorizontal(int rowIndex, int columnIndex,JointEmun.ExcelAlign ea)

  {

   SetRange(columnIndex,rowIndex);

   switch(ea.ToString())

   {

    case "Left" :

     m_Range.HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft;

     break;

    case "Right" :

     m_Range.HorizontalAlignment = Excel.XlHAlign.xlHAlignRight;

     break;

    case "center" :

     m_Range.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;

     break;

    default:

     m_Range.HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft;

     break;

   }

  }

  ///

  /// 设定选定区域的对齐方式

  ///

  /// 起始行号

  /// 起始列号

  /// 结束行号

  /// 结束列号

  /// 对齐方式

  public void SetHorizontal(int startRowIndex, int startColumnIndex,int endRowIndex, int endColumnIndex,JointEmun.ExcelAlign ea)

  {

   SetRange(startColumnIndex,startRowIndex,endColumnIndex,endRowIndex);

   switch(ea.ToString())

   {

    case "Left" :

     m_Range.HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft;

     break;

    case "Right" :

     m_Range.HorizontalAlignment = Excel.XlHAlign.xlHAlignRight;

     break;

    case "center" :

     m_Range.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;

     break;

    default:

     m_Range.HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft;

     break;

   }

  }

  #endregion

  #region 设置行高和列宽

  ///

  /// 设置列宽

  ///

  /// 列宽度

  public void SetColumnWidth(float columnWidth)

  {

   m_Range.ColumnWidth = columnWidth;

  }

  ///

  /// 设置列宽

  ///

  /// 列号

  /// 列宽度

  public void SetColumnWidth(int columnIndex, float columnWidth)

  {

   SetRange(columnIndex,0);

   m_Range.ColumnWidth = columnWidth;

  }

  ///

  /// 设置行高

  ///

  /// 行宽度

  public void SetRowHeigh(float rowHeigh)

  {

   m_Range.RowHeight = rowHeigh;

  }

  ///

  /// 设置行高

  ///

  /// 行号

  /// 行宽度

  public void SetRowHeigh(int rowIndex, float rowHeigh)

  {

   SetRange(0,rowIndex);

   m_Range.RowHeight = rowHeigh;

  }

  #endregion

  #region 合并单元格

  ///

  /// 将选定区域中的单元格合并

  ///

  public void Merge()

  {

   m_Range.Merge(null);

  }

  ///

  /// 将选定区域中的单元格合并

  ///

  /// 起始行号

  /// 起始列号

  /// 结束行号

  /// 结束列号

  public void Merge(int startRowIndex, int startColumnIndex, int endRowIndex, int endColumnIndex)

  {

   SetRange(startColumnIndex ,startRowIndex , endColumnIndex, endRowIndex);

   m_Range.Merge(null);

  }

  #endregion

  #region 设置字体名称、大小

  ///

  /// 设置区域内的字体

  ///

  /// 起始行号

  /// 起始列号

  /// 结束行号

  /// 结束列号

  /// 字体名称

  public void SetFont(int startRowIndex, int startColumnIndex, int endRowIndex, int endColumnIndex, string fontName)

  {

   SetRange(startColumnIndex, startRowIndex, endColumnIndex, endRowIndex);

   m_Font.Name = fontName;

  }

  ///

  /// 设置区域内的字号(文字大小)

  ///

  /// 起始行号

  /// 起始列号

  /// 结束行号

  /// 结束列号

  /// 字号

  public void SetFont(int startRowIndex, int startColumnIndex, int endRowIndex, int endColumnIndex, int fontSize)

  { 

   SetRange(startColumnIndex, startRowIndex, endColumnIndex, endRowIndex);

   m_Font.Size = fontSize;

  }

  ///

  /// 设置区域内的字体以及字号

  ///

  /// 起始行号

  /// 起始列号

  /// 结束行号

  /// 结束列号

  /// 字体名称

  /// 字号

  public void SetFont(int startRowIndex, int startColumnIndex, int endRowIndex, int endColumnIndex, string fontName, int fontSize)

  {

   SetRange(startColumnIndex, startRowIndex, endColumnIndex, endRowIndex);

   m_Font.Name = fontName;

   m_Font.Size = fontSize;

  }

  ///

  /// 设置单元格的字体和字号

  ///

  /// 行号

  /// 列号

  /// 字体

  /// 字号

  public void SetFont(int rowIndex, int columnIndex, string fontName, int fontSize)

  {

   SetRange(columnIndex, rowIndex);

   m_Font.Name = fontName;

   m_Font.Size = fontSize;

  }

  ///

  /// 设置单元格的字体

  ///

  /// 行号

  /// 列号

  /// 字体

  public void SetFont(int rowIndex, int columnIndex, string fontName )

  {

   SetRange(columnIndex, rowIndex);

   m_Font.Name = fontName;

  }

  ///

  /// 设置单元格的字号

  ///

  /// 行号

  /// 列号

  /// 字号

  public void SetFont(int rowIndex, int columnIndex, int fontSize)

  { 

   SetRange(columnIndex, rowIndex);

   m_Font.Size = fontSize;

  }

  ///

  /// 设定字体

  ///

  /// 字体

  public void SetFont(string fontName)

  {

   m_Font.Name = fontName;

  }

  ///

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值