需要帮助将某些数据从数据表动态插入到Excel中C#

时间:2019-01-24 21:40:24

标签: c# excel datatable

我从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工作表中填充了日期列和ID列。

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 :(得分:0)

对于“枢轴”,请看Is it possible to Pivot data using LINQ?

PS:为了从代码访问excel文件,我通常使用epplus