【发布时间】:2023-04-04 12:59:01
【问题描述】:
您好,我有一个控制台应用程序,我必须使用它从几个表中获取数据并从中创建一个 excel 文件,这是我的代码
var Result = (from a in Db.tbl_ApplicantMaster
join b in Db.tbl_App_Process on a.APP_ID equals b.APID
join c in Db.tbl_Process on b.ProcessID equals c.ID
join d in Db.tbl_Nationality on a.Nationality equals d.country_code
join e in Db.tbl_AgencyMaster on a.Agn_ID equals e.AgID
select new ExcelData
{
Name = a.Name,
AppId = a.APP_ID,
ProcessName = c.Process,
StartDate = b.StartTime.ToString(),
EndDate = b.EndTime.ToString(),
Nationality = d.country_enName,
Agency = e.AgencyName,
}).ToList();
var File = new FileInfo(@"C:\path\ExcelSheet.xlsx");
await GetExcelFile.ExportDataToExcel(Result, File);
这是我用来创建 Excel 文件的代码
public static async Task ExportDataToExcel(List <ExcelData> data,FileInfo File)
{
try
{
DeleteIfExists(File);
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
using (var Package =new ExcelPackage(File))
{
var Ws = Package.Workbook.Worksheets.Add(Name: "MainReport");
var range = Ws.Cells[Address: "A1"].LoadFromCollection(data, true);
range.AutoFitColumns();
await Package.SaveAsync();
}
}
catch (Exception)
{
throw;
}
}
这是我的模特
public class ExcelData{
public int AppId { get; set; }
public string Name { get; set; }
public string ProcessName { get; set; }
public string StartDate { get; set; }
public string EndDate { get; set; }
public string Nationality { get; set; }
public string Agency { get; set; }
public double No_of_Days { get; set; }
}
有了这个,我可以获取所需的数据,甚至可以从中创建一个 excel 表,但是 excel 表需要采用特定的模式,其中只应显示申请人姓名,然后是每个流程的日期和名称,每个申请人有16个流程,所以每列与流程重复相同的名称不好,当前数据如下
ApplicantID:111
Name: X
ProcessName:Licence
startDate:10-10-2021
EndDate: 20-10-2021
ApplicantID:111
Name:x
ProcessName:TOIEC Test
start date:10-10-2021
End Date: 20-10-2021
ApplicantID:111
Name:x
ProcessName:Physical Test
start date:10-10-2021
End Date: 20-10-2021
但我希望它像
ApplicantID:111
Name: X
ProcessName:Licence
startDate:10-10-2021
EndDate: 20-10-2021
ProcessName:TOIEC Test
start date:10-10-2021
End Date: 20-10-2021
ProcessName:Physical Test
start date:10-10-2021
End Date: 20-10-2021
如何在 C# 中实现这一点?我必须为此使用任何第三方库吗?请帮帮我,谢谢
【问题讨论】:
-
这取决于您如何从中创建 excel 文件。无论您是在循环语句中将行添加到 Excel 工作表,还是调用需要准备好的行数据集合的导出函数,解决方案都会有所不同。请告诉我们您是如何导出到 excel 的。
-
@OlivierJacot-Descombes 感谢您抽出宝贵时间回答我的问题,我已经编辑了帖子并提供了更多详细信息。请再次检查,如果您有任何解决方案,请回复。
标签: c# asp.net-mvc linq console