我目前在練習MVC的Excel操作物件的匯入匯出
用的是Npoi的參考
我想問問這class類別的欄位能否動態建立?
否則我可能用 new XSSFWorkbook() 這方法試試
第一列的欄位名稱建立
第二列的資列輸入
var currentRow = 0; // 開始行號-建立欄位名
sheet.Cell(currentRow, 0).SetCellValue("編號");
sheet.Cell(currentRow, 1).SetCellValue("姓名");
sheet.Cell(currentRow, 2).SetCellValue("性別");
→動態欄位
var currentRow = 1; // 建立資料
sheet.Cell(currentRow, 0).SetCellValue(dr["編號"].ToString());
sheet.Cell(currentRow, 1).SetCellValue(dr["姓名"].ToString());
sheet.Cell(currentRow, 2).SetCellValue(dr["性別"].ToString());
→根據動態欄位匯出的資料
目前Googlet查到Npoi的相關作法~

匯出後得到此Excel

我改成從資料庫SQL匯出後
        [HttpPost, ValidateAntiForgeryToken]
        public ActionResult ReportSet(AttendanceStatisticsMonthReportModel model)
        {
            var students = new List<Student>();
            var Sql = @"
                select Id,Name,Sex
                from Students
            ";
            var dt = MSSQLHelper.GetTable(Sql, System.Data.CommandType.Text);
            if (dt.Rows.Count > 0)
            {
                foreach (System.Data.DataRow dr in dt.Rows)
                {
                    students.Insert(0
                    , new Student
                    {
                        Id = dr["Id"].ToString(),
                        Name = dr["Name"].ToString(),
                        Sex = dr["Sex"].ToString()
                    });
                }
            }
            var mapper = new Mapper(); //建立Excel操作物件
            var stream = new MemoryStream(); //建立IO檔案資料流
            //将students陣列生成的Excel資料,直接放置到Stream資料流
            mapper.Save(stream, students, "sheet1", overwrite: true, xlsx: true);
            //下載Excel檔案
            return File(stream.ToArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Student.xlsx");
        }
        public class Student
        {
            [Column("學號")]
            public string Id { get; set; }
            [Column("姓名")]
            public string Name { get; set; }
            [Column("性別")]
            public string Sex { get; set; }
        }
驗證此匯出有效~
那麼可能將 class類別 Student 改成動態欄位定義嗎?
如下圖: