.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;
}
///