none
Суммирование данных и сохранение в Excel файл. RRS feed

  • Вопрос

  • Добрый день. Ниже указан код с помощью которого получается Рис. 1

    namespace ConsoleApplication1.Reports
    {
        public static class FirstReportKgs1
        {    
            private static readonly Guid LichDelo = new Guid("{B9B0D237-CA2F-41A2-BC26-D1C83CE3907E}");     
          
          //справочник Национальности (Nationalities)
            private static readonly Guid NkgId = new Guid("{0D409D32-8657-4AA2-84AA-09B779F1A735}");                
            private static readonly Guid NkzId = new Guid("{BFE340AB-4494-4D0A-BB7F-DA04074804E6}");          //казахи
            private static readonly Guid NruId = new Guid("{06FAF734-C00B-4EAE-B5C6-86E3B134CF80}");            //русские
            private static readonly Guid NuzId = new Guid("{47B94476-6F15-403D-A008-219256F4A94E}");           //узбеки       
            private static readonly Guid NukId = new Guid("{79E2D364-D1EB-45F6-BC9F-441EE75F8FB1}");                
            private static readonly Guid NuiId = new Guid("{BFEB52CE-A97E-4F6A-BEED-5F07AD2D84DB}");               
            private static readonly Guid NttId = new Guid("{4846F196-F11B-4CFD-9849-8516E6AF11E2}");                    
            private static readonly Guid NtjId = new Guid("{8D18CFAE-B429-4C9B-990F-478D5FBA43AD}");                  
    
           public static void Build(Guid orgId)
            {
                var qb = new QueryBuilder(LichDelo, orgId);   
               
                       qb.Where("InquestReport").Include("Applicant").Include("Nationality").In(new object[]
                                                                                         {
                                                                                             NkgId,   
                                                                                             NkzId,    
                                                                                             NruId,   
                                                                                             NuzId,
                                                                                             NukId,
                                                                                             NuiId,
                                                                                             NttId,
                                                                                             NtjId
                                                                                         }).End();
    
                 var query = SqlQueryBuilder.Build(qb.Def);
                        query.AddAttribute("Nationality");
                        query.AddAttribute("Sex");
                       
                using (var reader = new SqlQueryReader(query))
                {
                    reader.Open();
                    while (reader.Read())
                    {
                        var nati = !reader.IsDbNull(0) ? reader.GetGuid(0) : Guid.Empty;
                        var pol = !reader.IsDbNull(1) ? reader.GetGuid(1) : Guid.Empty;
                        
                        Console.WriteLine(String.Format("{0};{1}", new object[]
                                                                               {
                                                                                  nati, 
                                                                                  pol 
                                                                                
                                                                                }
                                                                                ));
                    }
                    reader.Close();
                }
            }
    

    Рис. 1

    

    Выше полученном выводе первое поле является Id национальностей, второе Id полов. Мне надо получить итоговую сумму, т.е. одинаковые национальности и одинаковые полы должны складываться и дать сумму.

    Например: русские  = 6, жен = 10, а муж =2. Потом полученные данные закинуть в EXCEL файл, как это сделать?

    Заранее спасибо!

    • Перемещено Abolmasov Dmitry 5 декабря 2012 г. 9:13 (От:Работа в среде Visual Studio)
    • Изменен тип Abolmasov Dmitry 7 декабря 2012 г. 11:19
    • Изменен тип Abolmasov Dmitry 25 декабря 2012 г. 8:30
    26 ноября 2012 г. 8:18

Ответы

  • Здравствуйте!!! Решение выше поставленной задачи.

      public static void CalcItems( WorkflowContext context, dynamic report, Guid userId, Guid orgId, int year, int month,
      Doc item1, Doc item2, Doc item3, Doc item4, Doc item5, Doc item6, Doc item7, Doc item8, Doc item9, Doc item10,
      Doc item11, Doc item12, Doc item13, Doc item14, Doc item15, Doc item16)
        {                                                                                                                                                                                                         
                                                                                                                                                                              
            int maleCount = 0;      //мужчины                                                                         
            int femaleCount = 0;    //женщины                                                             
            int notSpecifiedSex = 0;                                                                    
            int mFemaleCount = 0;   //сумма мужчины+женщины+не указавшие пол                                         
                                                                                                                                                                                                                                                                                         
            var qb = new QueryBuilder(LichDelo, userId);                                                                                                                                                                                
                qb.Where("&OrgId").Eq(orgId);          //условие надо поставить дата поступление типа                                                                                                                                                                  
                                                                                                                      
            var query = SqlQueryBuilder.Build(qb.Def);                                    
            var s = query.JoinSource(query.Source, petitionDefId, SqlSourceJoinType.Inner, "Petition");                                     
            var s1 =query.JoinSource(s, inquestReportDefId, SqlSourceJoinType.Inner, "InquestReport");                                                                                                                                                       
                    query.JoinSource(s1, personDefId, SqlSourceJoinType.Inner, "Applicant");                                                                                     
                    query.AddAttributes(new[] {"Sex", "Nationality", "YearCat"});                                             
                                                                                                                                                                                                                                                                                                         
            using (var reader = new SqlQueryReader(query))                                                           
            {                                                                                            
                while (reader.Read())                                                                         
                {                                                                                                 
                                                                                                           
                  var sexWm = reader.IsDbNull(0) ? Guid.Empty : reader.GetGuid(0);                               
                  var nation = reader.IsDbNull(1) ? Guid.Empty : reader.GetGuid(1);          
                  var category = reader.IsDbNull(2) ? Guid.Empty : reader.GetGuid(2);
                  Doc item;                                                                                                                                                                                                                                          
                   if (nation == NkgId) item = item1;                                                                     
                   else if (nation == NkzId) item = item2;                                                    
                   else if (nation == NruId) item = item3;                                     
                   else if (nation == NuzId) item = item4;                                           
                   else if (nation == NukId) item = item5;                                      
                   else if (nation == NuiId) item = item6;                                         
                   else if (nation == NttId) item = item7;                                                          
                   else if (nation == NtjId) item = item8;
                   else item = item9;                                 
                   if (category == From4To8Age) item = item10;                               
                   else if (category == From8To15Age) item = item11;                         
                   else if (category == From15To19Age) item = item12;                                           
                   else if (category == From19To35Age) item = item13;
                   else if (category == From35To59Age) item = item14;                
                   else if (category == From59To64Age) item = item15;
                   else if (category == From64ToOld) item = item16;                
                                                                              
                   if (sexWm == sexM)                                                                  
                    {                                                                                     
                         maleCount = item["Men"] != null ? (int) item["Men"] : 0;                           
                         maleCount++;                                                           
                         item["Men"] = maleCount;                                                        
                    }                                                                 
                    else if (sexWm == sexW)                                                        
                    {                                                  
                         femaleCount = item["Women"] != null ? (int) item["Women"] : 0;                                                                 
                         femaleCount++;                                                                
                         item["Women"] = femaleCount;                                                             
                    }                                         
                    else                       
                    {                                                            
                         notSpecifiedSex = item["NotSpecifiedSex"] != null ? (int) item["NotSpecifiedSex"] : 0;   
                         notSpecifiedSex++;                                 
                         item["NotSpecifiedSex"] = notSpecifiedSex;          
                    }                 
                         mFemaleCount =  item["All"]  != null ? (int) item["All"] : 0;
                         mFemaleCount = maleCount + femaleCount + notSpecifiedSex;    
                         item["All"] = mFemaleCount;  
                          
                  }           
    

     
    • Помечено в качестве ответа Abolmasov Dmitry 25 декабря 2012 г. 8:30
    24 декабря 2012 г. 13:08

Все ответы

  • У вас здесь не один вопрос а два, но давайте попробую помочь.

    1. Как посчитать суммы?

    Я бы выбрал все промежуточную коллекцию и затем работал бы с ней. Как вариант, сгруппировать при помощи GroupBy по национальности, а потом вложенные коллекции по полу, ну и вызвать Count для подсчета количества

    2. Как выгрузить в Excel?

    Если у вас нет требования, чтобы это были файлы Excel 97-2003, то я бы рекомендовал OpenXML. Быстро, не требует наличия Office на машине. Если нужны старые форматы, то можно генерировать Excel, через Interrop.

    26 ноября 2012 г. 12:22
    Отвечающий
  • Здравствуйте!!! Можете какой нибудь приблизительный код закинуть или подкорректировать следующий а то оно не те данные выводит. 

    А надо что бы выводила примерно так:

    {0D409D32-8657-4AA2-84AA-09B779F1A735} – корейцы 5 человек из них  4 жен. 1 муж.

    {06FAF734-C00B-4EAE-B5C6-86E3B134CF80} – русские 6 человек из них 5 жен. 1 муж.

    {47B94476-6F15-403D-A008-219256F4A94E} – японцы 1 человек 0 жен 1 муж.
      public static void Build(Guid orgId)
            {
                var qb = new QueryBuilder(LichDelo, orgId);         //InquestReport - акт обследование (документ)
                      qb.Where("InquestReport").Include("Applicant").Include("Nationality").In(new object[]
                                                                                                {
                                                                                                    NkgId,   
                                                                                                    NkzId,    
                                                                                                    NruId,   
                                                                                                    NuzId,
                                                                                                    NukId,
                                                                                                    NuiId,
                                                                                                    NttId,
                                                                                                    NtjId
                                                                                                }).And("Sex").In(new object[]
                                                                                                {
                                                                                                 SexW,
                                                                                                 SexM
                                                                                                }).End();
    
                var query = SqlQueryBuilder.Build(qb.Def);
                query.AddAttribute("Nationality");
                query.AddAttribute("Sex");
    
                using (var reader = new SqlQueryReader(query))
                {
                    reader.Open();
                    while (reader.Read())
                    {
                        //когда тип атрибута Enum - используется GetGuid(0) : Guid.Empty
                        var nationality = !reader.IsDbNull(0) ? reader.GetGuid(0) : Guid.Empty;
                        var sexWm = !reader.IsDbNull(1) ? reader.GetGuid(1) : Guid.Empty;
    
                        string[] nationalitty = {"{0D409D32-8657-4AA2-84AA-09B779F1A735}", "{06FAF734-C00B-4EAE-B5C6-86E3B134CF80}", "{47B94476-6F15-403D-A008-219256F4A94E}"};
                        try
                        {
                            int numberOfnati = nationalitty.Count();
                            Console.WriteLine("Количество национальностей {0}.", numberOfnati);
    
                        }
                        catch (OverflowException)
                        {
                            Console.WriteLine("Ошибка!!!.");
                            
                        }
                    }
                }
           }
     
    27 ноября 2012 г. 8:38
  • Попробовала по следующему написать, но данные выходит не правильно.

      public static void BuildNati(Guid orgId)
            {
                var qb = new QueryBuilder(LichDelo, orgId);         //InquestReport - акт обследование (документ)
                      qb.Where("InquestReport").Include("Applicant").Include("Nationality").In(new object[]
                                                                                                {
                                                                                                    NkgId,   
                                                                                                    NkzId,    
                                                                                                    NruId,   
                                                                                                    NuzId,
                                                                                                    NukId,
                                                                                                    NuiId,
                                                                                                    NttId,
                                                                                                    NtjId
                                                                                                }).And("Sex").In(new object[]
                                                                                                {
                                                                                                 SexW,
                                                                                                 SexM
                                                                                                }).End();
    
                var query = SqlQueryBuilder.Build(qb.Def);
                query.AddAttribute("Nationality");
                query.AddAttribute("Sex");
                
               var nations = new Dictionary<Guid, int>();
               var maleCount = 0;               //мужчины
                var femaleCount = 0;            //женщины
              
                using (var reader = new SqlQueryReader(query))
                {
                    reader.Open();
                    while (reader.Read())
                    {
                        var nationality = !reader.IsDbNull(0) ? reader.GetGuid(0) : Guid.Empty;
                        var sexWm = !reader.IsDbNull(1) ? reader.GetGuid(1) : Guid.Empty;
    
                        if (nations.ContainsKey(nationality)) nations[nationality] = nations[nationality] + 1;
                        else nations.Add(nationality, 1);
                     
                        if (sexWm == SexM) maleCount++;
                        else if (sexWm == SexW) femaleCount++;
    
                            Console.WriteLine("Наци-ность {0}", nations);
                            Console.WriteLine("Мужчин {0}", maleCount);
                            Console.WriteLine("Женщин {0}", femaleCount);
                            Console.WriteLine();
                        }
                    
                    reader.Close();
                    }
                }
    

    28 ноября 2012 г. 12:51
  • Уважаемый пользователь!

    В вашей теме отсутствует активность в течение последних 5 дней. При отсутствии каких-либо действий в течение 2 последующих дней, тема будет переведена в разряд обсуждений. Вы можете возобновить дискуссию, просто оставив сообщение в данной теме


    Для связи [mail]

    5 декабря 2012 г. 9:12
  • Здравствуйте!!! Решение выше поставленной задачи.

      public static void CalcItems( WorkflowContext context, dynamic report, Guid userId, Guid orgId, int year, int month,
      Doc item1, Doc item2, Doc item3, Doc item4, Doc item5, Doc item6, Doc item7, Doc item8, Doc item9, Doc item10,
      Doc item11, Doc item12, Doc item13, Doc item14, Doc item15, Doc item16)
        {                                                                                                                                                                                                         
                                                                                                                                                                              
            int maleCount = 0;      //мужчины                                                                         
            int femaleCount = 0;    //женщины                                                             
            int notSpecifiedSex = 0;                                                                    
            int mFemaleCount = 0;   //сумма мужчины+женщины+не указавшие пол                                         
                                                                                                                                                                                                                                                                                         
            var qb = new QueryBuilder(LichDelo, userId);                                                                                                                                                                                
                qb.Where("&OrgId").Eq(orgId);          //условие надо поставить дата поступление типа                                                                                                                                                                  
                                                                                                                      
            var query = SqlQueryBuilder.Build(qb.Def);                                    
            var s = query.JoinSource(query.Source, petitionDefId, SqlSourceJoinType.Inner, "Petition");                                     
            var s1 =query.JoinSource(s, inquestReportDefId, SqlSourceJoinType.Inner, "InquestReport");                                                                                                                                                       
                    query.JoinSource(s1, personDefId, SqlSourceJoinType.Inner, "Applicant");                                                                                     
                    query.AddAttributes(new[] {"Sex", "Nationality", "YearCat"});                                             
                                                                                                                                                                                                                                                                                                         
            using (var reader = new SqlQueryReader(query))                                                           
            {                                                                                            
                while (reader.Read())                                                                         
                {                                                                                                 
                                                                                                           
                  var sexWm = reader.IsDbNull(0) ? Guid.Empty : reader.GetGuid(0);                               
                  var nation = reader.IsDbNull(1) ? Guid.Empty : reader.GetGuid(1);          
                  var category = reader.IsDbNull(2) ? Guid.Empty : reader.GetGuid(2);
                  Doc item;                                                                                                                                                                                                                                          
                   if (nation == NkgId) item = item1;                                                                     
                   else if (nation == NkzId) item = item2;                                                    
                   else if (nation == NruId) item = item3;                                     
                   else if (nation == NuzId) item = item4;                                           
                   else if (nation == NukId) item = item5;                                      
                   else if (nation == NuiId) item = item6;                                         
                   else if (nation == NttId) item = item7;                                                          
                   else if (nation == NtjId) item = item8;
                   else item = item9;                                 
                   if (category == From4To8Age) item = item10;                               
                   else if (category == From8To15Age) item = item11;                         
                   else if (category == From15To19Age) item = item12;                                           
                   else if (category == From19To35Age) item = item13;
                   else if (category == From35To59Age) item = item14;                
                   else if (category == From59To64Age) item = item15;
                   else if (category == From64ToOld) item = item16;                
                                                                              
                   if (sexWm == sexM)                                                                  
                    {                                                                                     
                         maleCount = item["Men"] != null ? (int) item["Men"] : 0;                           
                         maleCount++;                                                           
                         item["Men"] = maleCount;                                                        
                    }                                                                 
                    else if (sexWm == sexW)                                                        
                    {                                                  
                         femaleCount = item["Women"] != null ? (int) item["Women"] : 0;                                                                 
                         femaleCount++;                                                                
                         item["Women"] = femaleCount;                                                             
                    }                                         
                    else                       
                    {                                                            
                         notSpecifiedSex = item["NotSpecifiedSex"] != null ? (int) item["NotSpecifiedSex"] : 0;   
                         notSpecifiedSex++;                                 
                         item["NotSpecifiedSex"] = notSpecifiedSex;          
                    }                 
                         mFemaleCount =  item["All"]  != null ? (int) item["All"] : 0;
                         mFemaleCount = maleCount + femaleCount + notSpecifiedSex;    
                         item["All"] = mFemaleCount;  
                          
                  }           
    

     
    • Помечено в качестве ответа Abolmasov Dmitry 25 декабря 2012 г. 8:30
    24 декабря 2012 г. 13:08