Нужна помощь при вставке определенных данных из datatable в Excel динамически C # - PullRequest
0 голосов
/ 25 января 2019

Я создал таблицу данных из таблицы Excel. Я запустил несколько запросов linq и заполнил необходимые столбцы на новом листе. Мне нужна помощь в заполнении строк на основе столбца даты. Он должен быть динамичным, потому что даты могут меняться, а ID могут меняться

У меня есть лист Excel, в котором есть такие данные

 L ID   | Date    |  Other | Columns |
  D123  1/24/2018
  D456  1/25/2018
  D678  1/26/2018
  D910  1/25/2018

Я пытаюсь создать вывод, который выглядит следующим образом.

    L ID   1/24/2018  1/25/2018 1/26/2018
    D123     1
    D456                1
    D678                          1
    D910                1

Я сделал некоторый код, который выбрал необходимые данные, а затем заполнил столбцы даты и столбца идентификатора в листе Excel.

public List<DateTime?> GetTurnOverDates(System.Data.DataTable dt3)
        {

            List<DateTime?> TurnOverDateList = dt3.AsEnumerable().Select(r => r.Field<DateTime?>("Turnover")).Distinct().OrderBy(x => x).Where(x => x >= DateTime.Today.AddDays(-1)).ToList();

          return TurnOverDateList;

public List<String> GetLIDList(System.Data.DataTable dt3, List<DateTime?> list)
        {
            List<String> LIDList = dt3.AsEnumerable().Where(r => list.Contains(r.Field<DateTime?>("Turnover"))).Select(r => r.Field<String>("LID")).ToList();
            return LidList;
        }

public void CreateTurnoverWS(String Path, List<DateTime?> DateList, List<String> LidList)
        {
            int rw = 0;
            int c1 = 0;

            Excel.Application xlsApp;
            Excel.Workbook xlsWorkbook;
            Excel.Range range;

            xlsApp = new Excel.Application();
            xlsWorkbook = xlsApp.Workbooks.Open(Path);
            Excel.Sheets xlsworksheets = xlsWorkbook.Worksheets;
            var xlsNewSheet = (Excel.Worksheet)xlsworksheets.Add(xlsworksheets[1], Type.Missing, Type.Missing, Type.Missing);
            xlsNewSheet.Name = "Turnover";
            xlsNewSheet.Cells[1, 3] = "L ID";



            xlsNewSheet = (Excel.Worksheet)xlsWorkbook.Worksheets.get_Item(1);
            xlsNewSheet.Select();

            range = xlsNewSheet.UsedRange;
            rw = range.Rows.Count;
            c1 = range.Columns.Count;

            for (int cCnt = 1; cCnt < DateList.Count(); cCnt++)
            {
                xlsNewSheet.Cells[1, c1++] = DateList[cCnt];
            }

            for (int ccnt2 = 0; ccnt2 < LidList.Count(); ccnt2++)
            {
                xlsNewSheet.Cells[rw++, 3] = LidList[ccnt2];
            }



            xlsWorkbook.Save();
            xlsWorkbook.Close();


        }

    }

Так что, в общем-то, у меня это есть в таблице Excel.

        L ID        1/24/2018  1/25/2018 1/26/2018
        D123    
        D456                
        D678 
        D910                         

Я исследовал сводные таблицы, но не уверен, что это сработает. У меня есть данные, идущие из Excel в таблицу данных, выбирая определенные данные и помещая их в новую рабочую таблицу. Пожалуйста, порекомендуйте. Благодарю.

1 Ответ

0 голосов
/ 25 января 2019

Для «pivot» -ing взгляните на Можно ли сводить данные с помощью LINQ?

PS: для доступа к файлам Excel из кода я обычно использую epplus

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...