如何将日期与行匹配,然后使用EPPlus获得最终的列值?

Mattlinux1

到目前为止,我可以轻松地从电子表格中获取数据,只是获取参考编号行,但是我目前不知道如何在获取正确的数据之前将该行与数据部分进行匹配。

我目前必须从下面的excel电子表格示例中提取一些数据:

Start date  Ref number
29/07/2015  2342326
01/07/2016  5697455
02/08/2016  3453787
02/08/2016  5345355
02/08/2015  8364456
03/08/2016  1479789
04/07/2015  9334578

主要的问题是,是否有可能从设置日期开始从行中读取数据,并从设置日期获得引用编号,例如开始日期。

例如,如果我只是想要从日期设置为上个月1日及以后的数据。

如何最好地实现这一点。

使用基本OleDb的用于获取列的当前代码示例:

using System;
using System.Data.OleDb;
using System.Text.RegularExpressions;

namespace Number_Cleaner
{
    public class NumberCleanerReport
    {
        public void runExcel_Report()
        {
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("[*][START OF: NumberExt.xls, Number Extraction]");
            Console.ResetColor();
            string con =
            @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=NumberExt.xls;" +
            @"Extended Properties='Excel 8.0;HDR=Yes;'";

        string connectionString = ExcelWriter.GetConnectionString();

        using (OleDbConnection conn = new OleDbConnection(connectionString))
        {
            conn.Open();
            OleDbCommand cmd = new OleDbCommand();
            cmd.Connection = conn;

            using (OleDbConnection connection = new OleDbConnection(con))
            {
                connection.Open();
                OleDbCommand command = new OleDbCommand("select * from [Sheet1$]", connection);
                System.IO.StreamWriter files = new System.IO.StreamWriter(Controller.fpath + "NumberExtOutput.txt");
                using (OleDbDataReader dr = command.ExecuteReader())
                {
                    while (dr.Read())
                    {
                        var row1Col0 = dr[0];
                        string ExcelData = row1Col0.ToString();
                        string subStr = "null";

                        try
                        {
                            subStr = ExcelData.Substring(0, 6);
                        }
                        catch
                        {
                            //Console.WriteLine("Found Nulls.");
                        }

                        if (subStr == "00")
                        {
                            string result = Regex.Replace(ExcelData, "^00", "0");
                            Console.WriteLine(result);
                            files.WriteLine(result);
                            cmd.CommandText = "INSERT INTO [table1]('MainNmbers') VALUES(" + result + ");";
                            cmd.ExecuteNonQuery();
                        }
                    }
                    files.Close();
                    conn.Close();
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.WriteLine("[*][END OF: NumberExt.xls, RefNumber Extraction]");
                    Console.ResetColor();
                }
            }
        }
    }
}
}
蒂姆·施密特(Tim Schmelter)

您可以将其加载到中DataTable,然后使用进行过滤Linq-To-DataTable这是一种将所有内容读取为字符串的方法。您可以对其进行修改,以使它DateTime可以int使用DateTime.ParseDateTime.ParseExact将第一列解析为第二列,并将其解析为int.Parse

public static DataTable GetDataTableFromExcel(string path, bool hasHeader = true)
{
    using (var pck = new OfficeOpenXml.ExcelPackage())
    {
        using (var stream = File.OpenRead(path))
        {
            pck.Load(stream);
        }
        var ws = pck.Workbook.Worksheets.First();  
        DataTable tbl = new DataTable();
        foreach (var firstRowCell in ws.Cells[1, 1, 1, ws.Dimension.End.Column])
        {
            tbl.Columns.Add(hasHeader ? firstRowCell.Text : string.Format("Column {0}", firstRowCell.Start.Column));
        }
        var startRow = hasHeader ? 2 : 1;
        for (int rowNum = startRow; rowNum <= ws.Dimension.End.Row; rowNum++)
        {
            var wsRow = ws.Cells[rowNum, 1, rowNum, ws.Dimension.End.Column];
            DataRow row = tbl.Rows.Add();
            foreach (var cell in wsRow)
            {
                row[cell.Start.Column - 1] = cell.Text;
            }
        }
        return tbl;
    }
}

一旦表中具有正确的类型,查询就很简单:

var rowsOfInterest = table.AsEnumerable()
    .Where(row => row.Field<DateTime>("Start date") >= new DateTime(2016, 7, 1))
    .ToList();

如果您需要它作为DataTable

DataTable resultTable = table.Clone();  // empty table with correct columns
if(rowsOfInterest.Count > 0)
    resultTable = rowsOfInterest.CopyToDataTable();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将列值与列名匹配?

来自分类Dev

如何将日期值与Hibernate Criteria中具有时间戳值的列匹配?

来自分类Dev

如何将数据框的列的值与其他数据框中的正确行匹配?

来自分类Dev

如何将列表值与单个csv文件的行匹配?

来自分类Dev

如何将列值设为智能匹配的数字范围

来自分类Dev

如何将日期行的值转置为列标题,并为输入中未包含的日期引入列?

来自分类Dev

如何将日期值索引到Excel中的列

来自分类Dev

如何将日期列表与模式匹配?

来自分类Dev

如何将值列设置为值行?

来自分类Dev

如何将匹配的字符串相加,然后将相应的列总数相加?

来自分类Dev

如何将另一个DataFrame中的值添加到与列匹配的行上?

来自分类Dev

使用EPPlus将公式应用于每一行的两列中的值相乘

来自分类Dev

如何匹配值然后使用if函数

来自分类Dev

如何将<input>“名称”存储为对象的属性,然后将匹配的<input>“ value”存储为该对象的属性的值?

来自分类Dev

如何将<input>“名称”存储为对象的属性,然后将匹配的<input>“ value”存储为该对象的属性的值?

来自分类Dev

如何将行限制为某一列的SUM等于某个值的位置,然后转到下一行Oracle

来自分类Dev

SQL Server如何将列值转换为行

来自分类Dev

如何将选定列的值存储在单独的行中?

来自分类Dev

如何将行展平为列(字段)值

来自分类Dev

如何将行值分组为列?

来自分类Dev

如何将列值转换为行?

来自分类Dev

如何将存储为文本的日期列转换为日期值

来自分类Dev

如何将日期值转换为oracle日期值?

来自分类Dev

复制A:F中表示“这不是日期格式”的行值,然后将值粘贴到特定列中

来自分类Dev

如何将IP地址与子网匹配并获得SUM

来自分类常见问题

在R中,如何将一个数据框中选定行中的值与另一数据框中选定列的值进行匹配?

来自分类Dev

在R中,如何将一个数据框中选定行中的值与另一数据框中选定列的值进行匹配?

来自分类Dev

在pandas DataFrame中,如何将列中的特定值存储到变量中,然后从列中删除该值?

来自分类Dev

如何将多个值收集到数组中,然后在IN子句中使用数组

Related 相关文章

  1. 1

    如何将列值与列名匹配?

  2. 2

    如何将日期值与Hibernate Criteria中具有时间戳值的列匹配?

  3. 3

    如何将数据框的列的值与其他数据框中的正确行匹配?

  4. 4

    如何将列表值与单个csv文件的行匹配?

  5. 5

    如何将列值设为智能匹配的数字范围

  6. 6

    如何将日期行的值转置为列标题,并为输入中未包含的日期引入列?

  7. 7

    如何将日期值索引到Excel中的列

  8. 8

    如何将日期列表与模式匹配?

  9. 9

    如何将值列设置为值行?

  10. 10

    如何将匹配的字符串相加,然后将相应的列总数相加?

  11. 11

    如何将另一个DataFrame中的值添加到与列匹配的行上?

  12. 12

    使用EPPlus将公式应用于每一行的两列中的值相乘

  13. 13

    如何匹配值然后使用if函数

  14. 14

    如何将<input>“名称”存储为对象的属性,然后将匹配的<input>“ value”存储为该对象的属性的值?

  15. 15

    如何将<input>“名称”存储为对象的属性,然后将匹配的<input>“ value”存储为该对象的属性的值?

  16. 16

    如何将行限制为某一列的SUM等于某个值的位置,然后转到下一行Oracle

  17. 17

    SQL Server如何将列值转换为行

  18. 18

    如何将选定列的值存储在单独的行中?

  19. 19

    如何将行展平为列(字段)值

  20. 20

    如何将行值分组为列?

  21. 21

    如何将列值转换为行?

  22. 22

    如何将存储为文本的日期列转换为日期值

  23. 23

    如何将日期值转换为oracle日期值?

  24. 24

    复制A:F中表示“这不是日期格式”的行值,然后将值粘贴到特定列中

  25. 25

    如何将IP地址与子网匹配并获得SUM

  26. 26

    在R中,如何将一个数据框中选定行中的值与另一数据框中选定列的值进行匹配?

  27. 27

    在R中,如何将一个数据框中选定行中的值与另一数据框中选定列的值进行匹配?

  28. 28

    在pandas DataFrame中,如何将列中的特定值存储到变量中,然后从列中删除该值?

  29. 29

    如何将多个值收集到数组中,然后在IN子句中使用数组

热门标签

归档