c#到excel动态添加字典数据

c#到excel动态添加字典数据,c#,excel,dictionary,C#,Excel,Dictionary,我有一个报表工具,它可以将数据从API导出到excel,我遇到的问题是,在这个数据中有一个字典,其中有更多的数据,我也想显示在同一行中,但当我尝试导出这些数据时,excel中的结果是这样的 正如您所看到的,它最终成为Models.UserDetails之类的东西。如何正确地使其显示字典中的值。这就是我到目前为止所做的 foreach (var reportItem in model.Entries) { var userDetails= new List<UserDetails&g

我有一个报表工具,它可以将数据从API导出到excel,我遇到的问题是,在这个数据中有一个字典,其中有更多的数据,我也想显示在同一行中,但当我尝试导出这些数据时,excel中的结果是这样的

正如您所看到的,它最终成为Models.UserDetails之类的东西。如何正确地使其显示字典中的值。这就是我到目前为止所做的

foreach (var reportItem in model.Entries)
{
    var userDetails= new List<UserDetails>();

    foreach (KeyValuePair<int, UserDetails> entry in reportItem.UserDetails)
    {
        userDetails.Add(entry.Value);
    }

    exportData.ReportDetails.Add(new UserReportExportDetailModel
    {
        ProductGroup = reportItem.ProductGroup,
        UserId = reportItem.ExternalId,
        Country = reportItem.Country,
        Brand = reportItem.Brand,
        FinalScore = reportItem.TotalPoints,
        TimeOfLogin = reportItem.Time,
        Position = reportItem.Position + 1,
        UserDetails = userDetails
    });
}

那么,如何让excel中的UserDetails列显示字典中的数据呢?

excel无法在单个单元格中显示对象列表,因此您需要帮助他将该列表转换为excel能够理解的内容,例如字符串

伪代码:

    foreach (var reportItem in model.Entries) {

        var userDetails = new System.Text.StringBuilder();
    
        foreach (KeyValuePair<int, UserDetails> entry in reportItem.UserDetails)
        {
            userDetails.AppendFormat("{0},{1},{2}", entry.Value.Points, entry.Value.Time, entry.Value.LoginId);
        }
    
        exportData.ReportDetails.Add(new UserReportExportDetailModel
        {
            ProductGroup = reportItem.ProductGroup,
            UserId = reportItem.ExternalId,
            Country = reportItem.Country,
            Brand = reportItem.Brand,
            FinalScore = reportItem.TotalPoints,
            TimeOfLogin = reportItem.Time,
            Position = reportItem.Position + 1,
            UserDetails = userDetails.ToString()
        }); 
   }
foreach(model.Entries中的var reportItem){
var userDetails=new System.Text.StringBuilder();
foreach(reportItem.UserDetails中的KeyValuePair条目)
{
AppendFormat(“{0},{1},{2}”,entry.Value.Points,entry.Value.Time,entry.Value.LoginId);
}
exportData.ReportDetails.Add(新用户ReportExportDetailModel
{
ProductGroup=reportItem.ProductGroup,
UserId=reportItem.ExternalId,
Country=reportItem.Country,
品牌=报告项。品牌,
FinalScore=reportItem.TotalPoints,
TimeOfLogin=reportItem.Time,
位置=报告项。位置+1,
UserDetails=UserDetails.ToString()
}); 
}
    foreach (var reportItem in model.Entries) {

        var userDetails = new System.Text.StringBuilder();
    
        foreach (KeyValuePair<int, UserDetails> entry in reportItem.UserDetails)
        {
            userDetails.AppendFormat("{0},{1},{2}", entry.Value.Points, entry.Value.Time, entry.Value.LoginId);
        }
    
        exportData.ReportDetails.Add(new UserReportExportDetailModel
        {
            ProductGroup = reportItem.ProductGroup,
            UserId = reportItem.ExternalId,
            Country = reportItem.Country,
            Brand = reportItem.Brand,
            FinalScore = reportItem.TotalPoints,
            TimeOfLogin = reportItem.Time,
            Position = reportItem.Position + 1,
            UserDetails = userDetails.ToString()
        }); 
   }