繁体   English   中英

在Excel工作表中将表数据分组为列标题

Grouping Table Data As Column Headers on Excel Sheet

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个问卷调查应用程序正在为我们的一个团队构建,并且在按照他们的意愿制作报告时遇到了问题(如果可能的话)。 我目前拥有的是:

var completedSurveys = (from s in db.SurveyResponses
                                    join d in db.Demographics on s.SurveyID equals d.SurveyID into grpjoin
                                    from d in grpjoin.DefaultIfEmpty()
                                    select new
                                    {
                                        Survey_ID = s.SurveyID,
                                        Survey_Date = s.Survey.SurveyDate,
                                        Question = s.Questions.QuestionTxt,
                                        Response = s.Responses.ResponseTxt,        
                                        Zip_Code = d.ZipCode,
                                        Department = d.CityDepartments.Department,
                                        Ace_Score = s.Survey.AceScore,

                                    }).ToList();

在运行gridview / excel代码后生成的结果是:

我当前的Excel工作表

他们想要的是一个Excel工作表,该工作表的“问题”列标题以及“ SurveyID”,“日期”,“邮编”,“部门”和“分数”以及对问题的回答作为行数据,因此所有内容仅显示一次。 像这样的excel表,我从其他地方得到的:

例如,我尝试了多个不同的分组:

    var completedSurveys = (from s in db.SurveyResponses
                            join d in db.Demographics on s.SurveyID equals d.SurveyID into grpjoin
                            from d in grpjoin.DefaultIfEmpty()
                            group new {s.Questions.QuestionTxt, s.Survey.SurveyDate } by new { s.SurveyID, s.Responses.ResponseTxt, d.ZipCode, d.CityDepartments.Department, s.Survey.AceScore } into g
                            orderby g.Key.SurveyID ascending
                            select new
                            {
                                Survey_ID = g.Key.SurveyID,
                                Survey_Date = g.Select(s => s.SurveyDate),
                                Response = g.Key.ResponseTxt,
                                Zip = g.Key.ZipCode,
                                Department = g.Key.Department,
                                Ace_Score = g.Key.AceScore

                            }).ToList();

但是我仍然没有得到想要的东西。 如果我必须告诉他们我已经获得的一切都很好,那很好,但是我认为我至少会提出一些建议。 任何援助将不胜感激。

谢谢

1 个回复

您的问题中有几个未知数,但是如果问题的症结是“如何在c#中旋转数据”,那么我有个好消息和个坏消息。 好消息是它是可行的。 坏消息是它并不漂亮。

首先,您想按SurveyId将“ completedSurveys”分组:

var groupedSurveys = 
    completedSurveys
    .GroupBy(g => g.Survey_ID);

然后创建一个您希望自己的行看起来像的类:

public class survey {
    public int Survey_ID;
    public DateTime date;
    public int Zip_Code;
    public int Ace_Score;
    public string Q1;
    public string Q2;
    public string Q3;   
}

然后,为此类对象创建一个主目录:

var surveys = new List<survey>();

然后,循环浏览分组调查中的分组。 我们将其称为外循环。

在每个外部循环中:

  • 创建“调查”的新实例
  • 所有项目的通用数据都将存在于第一项目中,因此您可以为此目的填充它。 如果null妨碍您,那么您将必须在内部循环内执行适当的逻辑(如下所述)
  • 循环浏览分组中的各个项目(内部循环)
  • 在内部循环中,使用switch语句使用期望的问题文本将组中的项目映射到“调查”类中的相应字段。
  • 完成内部循环后,将调查实例推到调查主页。
  • 进行下一个外循环迭代

示例代码如下:

foreach (var surveyItems in groupedSurveys) {

    var firstItem = surveyItems.FirstOrDefault();

    var survey = new survey() {
        Survey_ID = firstItem.Survey_ID,
        date = firstItem.Survey_Date,
        Zip_Code = firstItem.Zip_Code,
        Ace_Score = firstItem.Ace_Score
    };

    foreach(var item in surveyItems) {
        switch (item.Question) {
            case "Text for question 1":
                survey.Q1 = item.Response;
                break;
            case "Text for question 2":
                survey.Q2 = item.Response;
                break;
            case "Text for question 3":
                survey.Q3 = item.Response;
                break;
        }
    }

    surveys.Add(survey);

}

您会看到您的调查对象现在具有数据透视,每个调查都有一个“行”。

但是,所有这些都不知道您的excel编写代码。 将事物“标准化”并在此处进行解析可能更明智。 您也可以考虑在服务器级别进行数据透视。 数据透视语句可能会更友好一些。

另外,我不想切入您的逻辑来创建“ completedSurveys”。 但是,只要您将其裁剪,就可以使它整体上看起来更优雅。

2 从Excel工作表导入数据时更改默认列标题

我有一个gridview,总共有4列,现在我从一个名为“ FileName”的excel工作表中导入的第一列名。gridview将columnheader设为F1而不是filename。我需要用我的f1替换列标题名称。 到目前为止,我已经尝试过 这样,将添加文件名的所有新列,但不会 ...

3 从Excel工作表导入数据,具体取决于列标题

我需要执行以下操作,请告诉我是否可能 我在phpMyAdmin中有一个数据库,上面说'n'列,并在一个Excel表中说'm'列。 列之一是参考编号。 我需要的是,将数据从excel工作表导入phpmy数据库,以获取excel和phpmy数据库中参考号均匹配的行。 对于每个匹配项,都应 ...

4 合并来自不同Excel工作表基础列标题的数据

我正在从大约42个不同的Excel工作表创建一个Excel仪表板。 我正在尝试将所有工作表合并到一个主数据表中。 42个不同的工作表可能具有与另一个工作表相同的标题数或更多的标题。 有人可以通过VBA代码帮助我,在那里我可以匹配列标题,如果匹配,则追加该列,否则在最后创建一个新列并将数据粘 ...

2019-01-22 09:06:47 0 49   excel/ vba
5 Excel工作表子标题作为列

我对这种挑战完全陌生,不知道有什么可用的东西(即使我要搜索的依据也不确定) 在下面的excel工作表图片中,列“ A”在两个位置(行号2,3和9,10)具有标题。 实际的Excel工作表有六千多行和太多这样的子标题(如果是小文件,我可以手动完成..但超过六千行) 挑战:-我想在子标 ...

7 带数据标题的分组表

大家好,我试图将我的数据表分组以显示按部门列出的用户,例如: 但是我的显示如下: 我读了一些关于数据表分组的文章,但是却发现任何可以解释它如何工作以及如何实现的内容。 我的代码如下。 如果有人可以指向我提供帮助的链接,将不胜感激,谢谢。 ...

2016-07-04 06:22:40 1 96   php/ html
9 在Excel中将2个不同的工作表与相同的数据合并

我有来自不同来源的相同数据,但数据都不完整,但综合来看它们可能不太完整。 我有2个档案; 文件#1具有; ID,邮政编码,YoB,性别 文件#2具有:电子邮件,ID,邮政编码,Yob,性别 两个文件中的ID相同,但#1具有一些ID,而#2没有,而另一种方式引起了人们的注意。 ...

10 在多张工作表的C列中将基于文本的数据列出到excel主表中的一列中

我有一个工作簿,其中包含几个不同工作表上的基于文本的数据。 所有工作表使用相同的标题,但各列中的文本不同。 我希望能够从新工作表的单个列中的所有工作表中列出C列中包含的信息。 有没有一种方法可以将所有数据放入一个单独的列中而不必从近100个不同的工作表中复制和粘贴? ...

2014-12-03 22:49:55 1 51   excel
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM