日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達者為師

網(wǎng)站首頁 編程語言 正文

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

作者:武尚發(fā)的博客 ? 更新時間: 2022-04-25 編程語言

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

?/// 
/// Excel操作類
/// 
/// 實體類
public class ExcelHelper where T : class
? ? {
? ? ? ? /// 
? ? ? ? /// 保存Excel文件
? ? ? ? /// 
? ? ? ? /// Excel文件名
? ? ? ? /// Sheet工作表名
? ? ? ? /// 實體類對象
? ? ? ? public static void SaveExcelFile(string excelName, string sheetName, List 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記錄當前可用寫入的行索引
? ? ? ? ? ? PropertyInfo[] preInfo = typeof(T).GetProperties();//獲取這個實體對象的所有屬性
? ? ? ? ? ? foreach (var item in preInfo)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? object[] objPres = item.GetCustomAttributes(typeof(DescriptionAttribute), true);//獲取當前屬性的自定義特性列表
? ? ? ? ? ? ? ? if (objPres.Length > 0)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? for (int i = 0; i < objPres.Length; i++)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? row.CreateCell(rowNum).SetCellValue(((DescriptionAttribute)objPres[i]).Description);//創(chuà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(); ?//獲取當前對象的屬性列表
? ? ? ? ? ? ? ? foreach (var itemPropSub in itemProps)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? //獲取當前對象特性中的自定義特性[Description("自定義特性")]
? ? ? ? ? ? ? ? ? ? var objs = itemPropSub.GetCustomAttributes(typeof(DescriptionAttribute), true);
? ? ? ? ? ? ? ? ? ? if (objs.Length > 0)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? //將當前對象的特性值,插入當前行的第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 stdList = new List();
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.SaveExcelFile(Application.StartupPath + "\\StudentInfo.xls", "Student", stdList);

結(jié)果:

原文鏈接:https://blog.csdn.net/qq_34699535/article/details/106225726

欄目分類
最近更新