程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#調用操作Excel的一個類

C#調用操作Excel的一個類

編輯:關於C語言

在這兒本來想寫長一點的文章,但因為時間的關系,沒有寫成。現把自己做的一個小東西,C#調用Excel作報表的源代碼放在這兒給大家看看。關於代碼的構成,在源代碼中已經有完整的代碼注釋了,這兒就不說什麼了。

下面的這個類中,主要完成的功能是從數據庫中逐字段讀出數據,設置格式後,在Excel中顯示出來。這是它運行後的效果圖:

在這個類中,有兩個參數傳進來,一個是它的數據源,另一個是整個報表的標題字符串,具體看代碼就應該知道了。

using System;
using System.Data;
using Excel;

namespace LogicLayer
{
?///
?/// OutputExcel 的摘要說明
?///
?public class OutputExcel
?{
??public OutputExcel(DataVIEw dv,string str)
??{
???//
???// TODO: 在此處添加構造函數邏輯
???//
???Excel.Application Excel;
???int rowIndex=4;
???int colIndex=1;

???Excel._Workbook xBk;
???Excel._Worksheet xSt;

???excel= new Excel.ApplicationClass();;
???xBk = Excel.Workbooks.Add(true);
???xSt = (Excel._Worksheet)xBk.ActiveSheet;

???//
???//取得標題
???//
???foreach(DataColumn col in dv.Table.Columns)
???{
????colIndex++;
????Excel.Cells[4,colIndex] = col.ColumnName;
????xSt.get_Range(excel.Cells[4,colIndex],excel.Cells[4,colIndex]).HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;//設置標題格式為居中對齊
???}

???//
???//取得表格中的數據
???//
???foreach(DataRowVIEw row in dv)
???{
????rowIndex ++;
????colIndex = 1;
????foreach(DataColumn col in dv.Table.Columns)
????{
?????colIndex ++;
?????if(col.DataType == System.Type.GetType("System.DateTime"))
?????{
??????Excel.Cells[rowIndex,colIndex] = (Convert.ToDateTime(row[col.ColumnName].ToString())).ToString("yyyy-MM-dd");
??????xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]).HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;//設置日期型的字段格式為居中對齊
?????}
?????else
?????if(col.DataType == System.Type.GetType("System.String"))
?????{
??????Excel.Cells[rowIndex,colIndex] = "'"+row[col.ColumnName].ToString();
??????xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]).HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;//設置字符型的字段格式為居中對齊
?????}
?????else
?????{
??????Excel.Cells[rowIndex,colIndex] = row[col.ColumnName].ToString();
?????}
????}
???}
???//
???//加載一個合計行
???//
???int rowSum = rowIndex + 1;
???int colSum = 2;
???Excel.Cells[rowSum,2] = "合計";
???xSt.get_Range(excel.Cells[rowSum,2],excel.Cells[rowSum,2]).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
???//
???//設置選中的部分的顏色
???//
???xSt.get_Range(excel.Cells[rowSum,colSum],Excel.Cells[rowSum,colIndex]).Select();
???xSt.get_Range(excel.Cells[rowSum,colSum],Excel.Cells[rowSum,colIndex]).Interior.ColorIndex = 19;//設置為淺黃色,共計有56種
???//
???//取得整個報表的標題
???//
???Excel.Cells[2,2] = str;
???//
???//設置整個報表的標題格式
???//
???xSt.get_Range(excel.Cells[2,2],Excel.Cells[2,2]).Font.Bold = true;
???xSt.get_Range(excel.Cells[2,2],Excel.Cells[2,2]).Font.Size = 22;
???//
???//設置報表表格為最適應寬度
???//
???xSt.get_Range(excel.Cells[4,2],Excel.Cells[rowSum,colIndex]).Select();
???xSt.get_Range(excel.Cells[4,2],Excel.Cells[rowSum,colIndex]).Columns.AutoFit();
???//
???//設置整個報表的標題為跨列居中
???//
???xSt.get_Range(excel.Cells[2,2],Excel.Cells[2,colIndex]).Select();
???xSt.get_Range(excel.Cells[2,2],excel.Cells[2,colIndex]).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenterAcrossSelection;
???//
???//繪制邊框
???//
???xSt.get_Range(excel.Cells[4,2],Excel.Cells[rowSum,colIndex]).Borders.LineStyle = 1;
???xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,2]).Borders[Excel.XlBordersIndex.xlEdgeLeft].Weight = Excel.XlBorderWeight.xlThick;//設置左邊線加粗
???xSt.get_Range(excel.Cells[4,2],excel.Cells[4,colIndex]).Borders[Excel.XlBordersIndex.xlEdgeTop].Weight = Excel.XlBorderWeight.xlThick;//設置上邊線加粗
???xSt.get_Range(excel.Cells[4,colIndex],excel.Cells[rowSum,colIndex]).Borders[Excel.XlBordersIndex.xlEdgeRight].Weight = Excel.XlBorderWeight.xlThick;//設置右邊線加粗
???xSt.get_Range(excel.Cells[rowSum,2],excel.Cells[rowSum,colIndex]).Borders[Excel.XlBordersIndex.xlEdgeBottom].Weight = Excel.XlBorderWeight.xlThick;//設置下邊線加粗
???//
???//顯示效果
???//
???Excel.Visible=true;
??}
?}
}
有人在問,如何結束Excel進程?
可以強制結束進程:)
一般采用垃圾自動回收的技術,但為了更徹底地結束Excel進程。我們可以再加上一個事件:判斷Excel是否還在進程集裡面。如果有的話,返回true;當然,如果沒有的話,返回false。
當事件為真的時候,采用強制進程殺死技術就行了。
如果要判斷Excel是否在進程集裡面,可以參考下面的代碼:
??????????? int ProceedingCount = 0;
??????????? Process[] ProceddingCon = Process.GetProcesses();
??????????? foreach(Process IsProcedding in ProceddingCon)
??????????? {
??????????????? if(IsProcedding.ProcessName == "Excel")
??????????????? {
??????????????????? ProceedingCount += 1;
??????????????? }
??????????? }
??????????? if(ProceedingCount > 0)
??????????? {
??????????????? MessageBox.Show("該系統中已經在運行Excel了。","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
return true;
??????????? }
else
{
return false;
}
??}
==================
要殺死進程的話,用一個叫什麼Kill()的事件吧。好象是這樣的。:)


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved