C#使用NPOI導(dǎo)出Excel類(lèi)封裝
NPOI是指構(gòu)建在POI 3.x版本之上的一個(gè)程序,NPOI可以在沒(méi)有安裝Office的情況下對(duì)Word或Excel文檔進(jìn)行讀寫(xiě)操作。 NPOI是一個(gè)開(kāi)源的C#讀寫(xiě)Excel、WORD等微軟OLE2組件文檔的項(xiàng)目。
以下代碼主要分3部分:通過(guò)實(shí)體類(lèi)的自定義特性導(dǎo)出Excel文件
1、封裝類(lèi):ExcelHelper
2、實(shí)體類(lèi):StudentModel
3、調(diào)用:Form1
ExcelHelper
?/// <summary>
/// Excel操作類(lèi)
/// </summary>
/// <typeparam name="T">實(shí)體類(lèi)</typeparam>
public class ExcelHelper<T> where T : class
? ? {
? ? ? ? /// <summary>
? ? ? ? /// 保存Excel文件
? ? ? ? /// </summary>
? ? ? ? /// <param name="excelName">Excel文件名</param>
? ? ? ? /// <param name="sheetName">Sheet工作表名</param>
? ? ? ? /// <param name="data">實(shí)體類(lèi)對(duì)象</param>
? ? ? ? public static void SaveExcelFile(string excelName, string sheetName, List<T> data)
? ? ? ? {
? ? ? ? ? ? IWorkbook workBook = new HSSFWorkbook(); //創(chuàng)建一個(gè)Excel文檔
? ? ? ? ? ? ISheet sheet = workBook.CreateSheet(sheetName); //創(chuàng)建一個(gè)工作表Sheet
? ? ? ? ? ? int rowNum = 0;
? ? ? ? ? ? var row = sheet.CreateRow(sheet.LastRowNum); //LastRowNum記錄當(dāng)前可用寫(xiě)入的行索引
? ? ? ? ? ? PropertyInfo[] preInfo = typeof(T).GetProperties();//獲取這個(gè)實(shí)體對(duì)象的所有屬性
? ? ? ? ? ? foreach (var item in preInfo)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? object[] objPres = item.GetCustomAttributes(typeof(DescriptionAttribute), true);//獲取當(dāng)前屬性的自定義特性列表
? ? ? ? ? ? ? ? if (objPres.Length > 0)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? for (int i = 0; i < objPres.Length; i++)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? row.CreateCell(rowNum).SetCellValue(((DescriptionAttribute)objPres[i]).Description);//創(chuàng)建行,將當(dāng)前自定義特性寫(xiě)入
? ? ? ? ? ? ? ? ? ? ? ? rowNum++;//行索引加1,下次往后一格創(chuàng)建行
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? int j = sheet.LastRowNum + 1, columnNum = 0;
? ? ? ? ? ? foreach (var item in data)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? columnNum = 0;
? ? ? ? ? ? ? ? row = sheet.CreateRow(j++);
? ? ? ? ? ? ? ? var itemProps = item.GetType().GetProperties(); ?//獲取當(dāng)前對(duì)象的屬性列表
? ? ? ? ? ? ? ? foreach (var itemPropSub in itemProps)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? //獲取當(dāng)前對(duì)象特性中的自定義特性[Description("自定義特性")]
? ? ? ? ? ? ? ? ? ? var objs = itemPropSub.GetCustomAttributes(typeof(DescriptionAttribute), true);
? ? ? ? ? ? ? ? ? ? if (objs.Length > 0)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? //將當(dāng)前對(duì)象的特性值,插入當(dāng)前行的第n列單元格
? ? ? ? ? ? ? ? ? ? ? ? row.CreateCell(columnNum).SetCellValue(itemPropSub.GetValue(item, null) == null ? "" : itemPropSub.GetValue(item, null).ToString());
? ? ? ? ? ? ? ? ? ? ? ? columnNum++;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? //文件流寫(xiě)入
? ? ? ? ? ? using (MemoryStream ms = new MemoryStream())
? ? ? ? ? ? {
? ? ? ? ? ? ? ? workBook.Write(ms);
? ? ? ? ? ? ? ? using (FileStream fs = new FileStream(excelName, FileMode.Create, FileAccess.Write))
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ms.WriteTo(fs);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ms.Flush();
? ? ? ? ? ? ? ? ms.Position = 0;
? ? ? ? ? ? ? ? workBook.Close();
? ? ? ? ? ? }
? ? ? ? }
? ? }StudentModel
//實(shí)體類(lèi)
public class StudentModel
? ? {
? ? ? ? [Description("學(xué)號(hào)")]
? ? ? ? public string ID { get; set; }
? ? ? ? [Description("姓名")]
? ? ? ? public string Name { get; set; }
? ? ? ? [Description("年齡")]
? ? ? ? public string Age { get; set; }
? ? ? ? [Description("性別")]
? ? ? ? public string Six { get; set; }
? ? ? ? [Description("地址")]
? ? ? ? public string Address { get; set; }
? ? ? ? [Description("電話(huà)")]
? ? ? ? public string Tel { get; set; }
? ? }調(diào)用:
List<StudentModel> stdList = new List<StudentModel>();
stdList.Add(new StudentModel() { ID = "001", Name = "Peter", Age = "26", Six = "男", Address = "東京", Tel = "123456789" });
stdList.Add(new StudentModel() { ID = "002", Name = "Jerry", Age = "36", Six = "男", Address = "首爾", Tel = "987654321" });
ExcelHelper<StudentModel>.SaveExcelFile(Application.StartupPath + "\\StudentInfo.xls", "Student", stdList);結(jié)果:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
基于params,ref,out的參數(shù)問(wèn)題詳解
本篇文章是對(duì)params,ref,out的參數(shù)問(wèn)題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
C#?WPF實(shí)現(xiàn)顯示本機(jī)網(wǎng)絡(luò)通訊狀態(tài)
這篇文章主要為大家詳細(xì)介紹了如何在?WPF?中實(shí)現(xiàn)一個(gè)界面來(lái)顯示本機(jī)網(wǎng)絡(luò)接口的狀態(tài),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下2024-12-12
BootStrap mvcpager分頁(yè)樣式(get請(qǐng)求,刷新頁(yè)面)
這篇文章主要介紹了BootStrap mvcpager分頁(yè)樣式(get請(qǐng)求,刷新頁(yè)面)的相關(guān)資料,通過(guò)引入相關(guān)文件,實(shí)現(xiàn)此功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08
深入了解C#設(shè)計(jì)模式之訂閱發(fā)布模式
這篇文章主要介紹了C#設(shè)計(jì)模式之訂閱發(fā)布模式的的相關(guān)資料,文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下2020-06-06
C#結(jié)合JavaScript對(duì)Web控件進(jìn)行數(shù)據(jù)輸入驗(yàn)證的實(shí)現(xiàn)方法
在 Web 應(yīng)用的錄入界面,數(shù)據(jù)驗(yàn)證是一項(xiàng)重要的實(shí)現(xiàn)功能,數(shù)據(jù)驗(yàn)證是指確認(rèn) Web 控件輸入或選擇的數(shù)據(jù),本文我們將介紹如何通過(guò)C# 后端及JavaScript 前端對(duì) Web 控件進(jìn)行數(shù)據(jù)輸入有效性的驗(yàn)證,感興趣的朋友可以參考一下2024-05-05

