最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#使用NPOI導(dǎo)出Excel類封裝

 更新時間:2022年02月21日 16:37:02   作者:武尚發(fā)的博客  
這篇文章主要為大家詳細介紹了C#使用NPOI導(dǎo)出Excel類封裝,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

NPOI是指構(gòu)建在POI 3.x版本之上的一個程序,NPOI可以在沒有安裝Office的情況下對Word或Excel文檔進行讀寫操作。 NPOI是一個開源的C#讀寫Excel、WORD等微軟OLE2組件文檔的項目。

以下代碼主要分3部分:通過實體類的自定義特性導(dǎo)出Excel文件

1、封裝類:ExcelHelper
2、實體類:StudentModel
3、調(diào)用:Form1

ExcelHelper

?/// <summary>
/// Excel操作類
/// </summary>
/// <typeparam name="T">實體類</typeparam>
public class ExcelHelper<T> where T : class
? ? {
? ? ? ? /// <summary>
? ? ? ? /// 保存Excel文件
? ? ? ? /// </summary>
? ? ? ? /// <param name="excelName">Excel文件名</param>
? ? ? ? /// <param name="sheetName">Sheet工作表名</param>
? ? ? ? /// <param name="data">實體類對象</param>
? ? ? ? public static void SaveExcelFile(string excelName, string sheetName, List<T> data)
? ? ? ? {

? ? ? ? ? ? IWorkbook workBook = new HSSFWorkbook(); //創(chuàng)建一個Excel文檔
? ? ? ? ? ? ISheet sheet = workBook.CreateSheet(sheetName); //創(chuàng)建一個工作表Sheet


? ? ? ? ? ? int rowNum = 0;
? ? ? ? ? ? var row = sheet.CreateRow(sheet.LastRowNum); //LastRowNum記錄當(dāng)前可用寫入的行索引
? ? ? ? ? ? PropertyInfo[] preInfo = typeof(T).GetProperties();//獲取這個實體對象的所有屬性
? ? ? ? ? ? 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)前自定義特性寫入
? ? ? ? ? ? ? ? ? ? ? ? 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)前對象的屬性列表
? ? ? ? ? ? ? ? foreach (var itemPropSub in itemProps)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? //獲取當(dāng)前對象特性中的自定義特性[Description("自定義特性")]
? ? ? ? ? ? ? ? ? ? var objs = itemPropSub.GetCustomAttributes(typeof(DescriptionAttribute), true);
? ? ? ? ? ? ? ? ? ? if (objs.Length > 0)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? //將當(dāng)前對象的特性值,插入當(dāng)前行的第n列單元格
? ? ? ? ? ? ? ? ? ? ? ? row.CreateCell(columnNum).SetCellValue(itemPropSub.GetValue(item, null) == null ? "" : itemPropSub.GetValue(item, null).ToString());
? ? ? ? ? ? ? ? ? ? ? ? columnNum++;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }

? ? ? ? ? ? //文件流寫入
? ? ? ? ? ? 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

//實體類
public class StudentModel
? ? {
? ? ? ? [Description("學(xué)號")]
? ? ? ? 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("電話")]
? ? ? ? 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é)果:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#實現(xiàn)簡單飛行棋小游戲

    C#實現(xiàn)簡單飛行棋小游戲

    這篇文章主要為大家詳細介紹了C#實現(xiàn)簡單飛行棋小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • 基于params,ref,out的參數(shù)問題詳解

    基于params,ref,out的參數(shù)問題詳解

    本篇文章是對params,ref,out的參數(shù)問題進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • C#?WPF實現(xiàn)顯示本機網(wǎng)絡(luò)通訊狀態(tài)

    C#?WPF實現(xiàn)顯示本機網(wǎng)絡(luò)通訊狀態(tài)

    這篇文章主要為大家詳細介紹了如何在?WPF?中實現(xiàn)一個界面來顯示本機網(wǎng)絡(luò)接口的狀態(tài),文中的示例代碼講解詳細,感興趣的小伙伴可以參考一下
    2024-12-12
  • C#多線程ThreadPool線程池詳解

    C#多線程ThreadPool線程池詳解

    這篇文章主要為大家詳細介紹了C#多線程ThreadPool線程池的相關(guān)資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • BootStrap mvcpager分頁樣式(get請求,刷新頁面)

    BootStrap mvcpager分頁樣式(get請求,刷新頁面)

    這篇文章主要介紹了BootStrap mvcpager分頁樣式(get請求,刷新頁面)的相關(guān)資料,通過引入相關(guān)文件,實現(xiàn)此功能,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-08-08
  • C#異步編程由淺入深(一)

    C#異步編程由淺入深(一)

    這篇文章主要介紹了C#異步編程由淺入深(一),本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • 再議C#中的裝箱與拆箱的問題詳解

    再議C#中的裝箱與拆箱的問題詳解

    本篇文章再次介紹了C#中的裝箱與拆箱,這次們看下使用泛型和不使用泛型引發(fā)裝箱拆箱的情況
    2013-05-05
  • C#雙緩沖技術(shù)實例詳解

    C#雙緩沖技術(shù)實例詳解

    這篇文章主要介紹了C#雙緩沖技術(shù),結(jié)合實例形式較為詳細的分析了C#雙緩沖的功能,實現(xiàn)技巧與相關(guān)注意事項,需要的朋友可以參考下
    2016-02-02
  • 深入了解C#設(shè)計模式之訂閱發(fā)布模式

    深入了解C#設(shè)計模式之訂閱發(fā)布模式

    這篇文章主要介紹了C#設(shè)計模式之訂閱發(fā)布模式的的相關(guān)資料,文中示例代碼非常詳細,供大家參考和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • C#結(jié)合JavaScript對Web控件進行數(shù)據(jù)輸入驗證的實現(xiàn)方法

    C#結(jié)合JavaScript對Web控件進行數(shù)據(jù)輸入驗證的實現(xiàn)方法

    在 Web 應(yīng)用的錄入界面,數(shù)據(jù)驗證是一項重要的實現(xiàn)功能,數(shù)據(jù)驗證是指確認 Web 控件輸入或選擇的數(shù)據(jù),本文我們將介紹如何通過C# 后端及JavaScript 前端對 Web 控件進行數(shù)據(jù)輸入有效性的驗證,感興趣的朋友可以參考一下
    2024-05-05

最新評論

台东县| 青州市| 阿巴嘎旗| 丰原市| 黄浦区| 虎林市| 屯门区| 尼勒克县| 浪卡子县| 兴宁市| 睢宁县| 梨树县| 滁州市| 枞阳县| 郸城县| 汝州市| 绥阳县| 蒙城县| 昌乐县| 响水县| 莫力| 易门县| 阳江市| 杭州市| 天峻县| 通山县| 临高县| 镇安县| 乌拉特后旗| 分宜县| 安远县| 龙川县| 邮箱| 会泽县| 凭祥市| 韩城市| 尼木县| 宁明县| 林周县| 泗阳县| 通州市|