Epplus:使用 LoadFromCollection 时,导出的 Excel 文件中的布尔列为空
Epplus: When using LoadFromCollection, boolean column is blank in exported Excel file
在我的 MVC 应用程序中,我有一个加载 IEnumerable 并将其导出到 Excel 文件的 ActionResult。那部分效果很好,除非我有一个布尔列。在这种情况下,布尔列的值为空。
LoadFromCollection 不支持布尔列吗?
为了解决这个问题,我可以在模型中创建一个单独的字段,将布尔值转换为字符串值。但是,我希望我可以在 ExcelPackage()
块中添加一个语句来完成这项工作,而无需调整模型。这是可能的,还是重写模型是唯一可能的解决方案?
public ActionResult ExportToExcel(string _searchString, string _setScale)
{
// This is the query result set the user wishes to export to file
IEnumerable<CreditsAllsExport> exportQuery;
/* ... irrelevant code redacted ... */
exportQuery = exportQuery.AsEnumerable();
byte[] response;
using (var excelFile = new ExcelPackage())
{
/* ... irrelevant code redacted ... */
worksheet.Cells["A5"].LoadFromCollection(Collection: exportQuery, PrintHeaders: true);
/* TRANSLATE BOOLEAN TO Yes or No */
response = excelFile.GetAsByteArray();
}
/* ... irrelevant code redacted ... */
}
这很好用...
var rnd = new Random();
var pkg = new ExcelPackage();
var ws = pkg.Workbook.Worksheets.Add("Test");
var blist = new List<bool>();
for(int i=0; i < 20;i++) {
blist.Add(rnd.NextDouble() > .5 ? true : false);
}
ws.Cells["A5"].LoadFromCollection(blist, true);
pkg.SaveAs(new FileInfo(@"c:\tmp\bool.xlsx"));
这很尴尬,但事实证明我的专栏没有出现在结果中,因为我没有将它包含在我的 select 声明中。
如@Izydrmr 所示,布尔值 是 受 LoadFromCollection 支持。所以要点是,如果没有出现布尔列,则检查 select 语句。
IEnumerable<CreditsAllsExport> exportQuery =
from s in db.CreditsAlls
select new CreditsAllsExport
{
FiscalYear = s.FiscalYear,
Campus = s.Campus,
StudentName = s.StudentName,
CourseID = s.CourseID,
CourseTitle = s.CourseTitle,
CreditEarned = s.CreditEarned,
DateEarned = s.DateEarned,
Department = s.Department,
School = s.School,
Teacher = s.Teacher,
/* I had forgotten this column*/ Transfer=s.Transfer,
CampusSchoolMatch = s.CampusSchoolMatch
};
在我的 MVC 应用程序中,我有一个加载 IEnumerable 并将其导出到 Excel 文件的 ActionResult。那部分效果很好,除非我有一个布尔列。在这种情况下,布尔列的值为空。
LoadFromCollection 不支持布尔列吗?
为了解决这个问题,我可以在模型中创建一个单独的字段,将布尔值转换为字符串值。但是,我希望我可以在 ExcelPackage()
块中添加一个语句来完成这项工作,而无需调整模型。这是可能的,还是重写模型是唯一可能的解决方案?
public ActionResult ExportToExcel(string _searchString, string _setScale)
{
// This is the query result set the user wishes to export to file
IEnumerable<CreditsAllsExport> exportQuery;
/* ... irrelevant code redacted ... */
exportQuery = exportQuery.AsEnumerable();
byte[] response;
using (var excelFile = new ExcelPackage())
{
/* ... irrelevant code redacted ... */
worksheet.Cells["A5"].LoadFromCollection(Collection: exportQuery, PrintHeaders: true);
/* TRANSLATE BOOLEAN TO Yes or No */
response = excelFile.GetAsByteArray();
}
/* ... irrelevant code redacted ... */
}
这很好用...
var rnd = new Random();
var pkg = new ExcelPackage();
var ws = pkg.Workbook.Worksheets.Add("Test");
var blist = new List<bool>();
for(int i=0; i < 20;i++) {
blist.Add(rnd.NextDouble() > .5 ? true : false);
}
ws.Cells["A5"].LoadFromCollection(blist, true);
pkg.SaveAs(new FileInfo(@"c:\tmp\bool.xlsx"));
这很尴尬,但事实证明我的专栏没有出现在结果中,因为我没有将它包含在我的 select 声明中。
如@Izydrmr 所示,布尔值 是 受 LoadFromCollection 支持。所以要点是,如果没有出现布尔列,则检查 select 语句。
IEnumerable<CreditsAllsExport> exportQuery =
from s in db.CreditsAlls
select new CreditsAllsExport
{
FiscalYear = s.FiscalYear,
Campus = s.Campus,
StudentName = s.StudentName,
CourseID = s.CourseID,
CourseTitle = s.CourseTitle,
CreditEarned = s.CreditEarned,
DateEarned = s.DateEarned,
Department = s.Department,
School = s.School,
Teacher = s.Teacher,
/* I had forgotten this column*/ Transfer=s.Transfer,
CampusSchoolMatch = s.CampusSchoolMatch
};