我目前在練習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 改成動態欄位定義嗎?
如下圖: