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;

  }

  ///

發佈了18 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章