C#Winform Excel通过查询阅读

时间:2017-02-06 03:22:55

标签: c# excel winforms

这是我第一次提问。所以请温柔地对待我:)。

我的问题是,我想格式化由我们的时间和考勤终端生成的excel文件。这是生成的excel文件和我的问题的一些描述:

enter image description here

我想要做的是使用C#Winform读取excel文件并将其格式化为我需要的方式。

我的问题是:

  • 如何选择表格?我知道它只有一张,但我不知道如何使用OleDbConnection指向工作表。 OleDBConnection中的样本是" [Sheet1 $]"阅读工作表,但我不确定将从终端生成什么工作表名称。我们可以使用索引吗?例如:"来自[Sheet1&]"将来自[0 $]"?
  • 与第一个问题相同,但在excel列中。我该如何对待它,例如" [0],1"。
  • 最后一个问题,可能会解释一下。我真正想要做的是使用OleDbConnection,我的命令将如下所示:

    " SELECT DISTINCT [0 $],转换([1 $],日期),MIN(转换([1 $],时间)),MAX(转换([1 $],时间) ))FROM [0 $] GROUP BY [0 $],转换([1 $],日期)"

注意:[0 $]和[1 $]是列或表的索引

我需要的是生成一个文件,该文件将显示将按日期格式化的员工出勤率,并且当天有第一个时间输入和最后一次超时。请查看下面的图片以了解输出结果。

enter image description here

我尝试搜索,但我无法找到适合我需要的解决方案。

希望有人能帮助我。谢谢!

1 个答案:

答案 0 :(得分:0)

提问:

  • Q1:请参阅代码说明,我无法解决这个问题,如果有人请与我分享。
  • Q2:与第一个相同,我无法在SQL中使用DateTableName(or Sheet Name)Columns的索引。
  • 问题3:使用Linq。有关Linq样本的更多信息https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b

以下步骤是如何获取预期数据:

  1. 从Excel文件中读取所有数据需要知道Sheet Name;
  2. 过滤无效数据,因为有许多列值为emptynullspace-string但已添加到行中;
  3. 使用Linq查询数据。
  4. 希望我的回答可以帮到你。

    参考代码:

    
        public void Test()
        {
            string filePath = $"{Environment.CurrentDirectory}//test20170206.xls";
            string conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1;'";
            //connection excel
            OleDbConnection conn = new OleDbConnection(conStr);
            conn.Open();
            //get all sheel from excel file
            DataTable tb = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
            foreach (DataRow row in tb.Rows)
            {
                Console.WriteLine(row["TABLE_NAME"]);
                //using index in row
                for (int i=0;i p.Datetime).ToLongTimeString(), TimeMax = g.Max(p => p.Datetime).ToLongTimeString() };
    
    
        }
    
        public class Model20170206
        {
            public int Id { get; set; }
            public DateTime Datetime { get; set; }
            public string Value1 { get; set; }
            public string Value2 { get; set; }
            public string Value3 { get; set; }
            public string Value4 { get; set; }
        }
    
    

    练习步骤:

    • 我使用了这样的测试数据:
    1,2017-01-28 03:47:54,1,1,1,0
    2,2017-01-29 04:58:18,1,0,2,0
    3,2017-01-28 08:44:43,1,1,3,0
    4,2017-01-28 05:47:56,1,0,4,0
    0,2017-02-05 12:12:53,1,1,5,0
    1,2017-01-31 12:02:24,1,0,6,0
    2,2017-02-05 12:30:34,1,1,7,0
    3,2017-02-04 02:30:08,1,0,8,0
    4,2017-02-01 11:39:53,1,1,9,0
    0,2017-02-05 07:45:58,1,0,10,0
    1,2017-02-05 03:01:46,1,1,11,0
    2,2017-02-02 09:22:17,1,0,12,0
    3,2017-01-30 03:05:46,1,1,13,0
    4,2017-02-04 09:02:21,1,0,14,0
    0,2017-02-03 07:58:20,1,1,0,0
    1,2017-01-29 07:53:48,1,0,1,0
    2,2017-01-29 12:41:25,1,1,2,0
    3,2017-02-06 02:58:50,1,0,3,0
    4,2017-01-28 11:06:47,1,1,4,0
    0,2017-02-04 10:40:18,1,0,5,0
    1,2017-01-31 12:57:24,1,1,6,0
    2,2017-02-03 12:28:38,1,0,7,0
    3,2017-02-01 06:48:23,1,1,8,0
    4,2017-01-28 12:42:59,1,0,9,0
    0,2017-02-04 10:34:44,1,1,10,0
    1,2017-02-06 06:38:31,1,0,11,0
    2,2017-02-05 08:40:26,1,1,12,0
    3,2017-01-31 01:56:32,1,0,13,0
    4,2017-02-05 11:13:11,1,1,14,0
    0,2017-01-29 10:34:58,1,0,0,0
    1,2017-02-02 04:01:18,1,1,1,0
    2,2017-02-06 01:08:09,1,0,2,0
    3,2017-01-28 07:24:11,1,1,3,0
    4,2017-02-02 08:25:50,1,0,4,0
    0,2017-01-28 08:01:13,1,1,5,0
    1,2017-02-03 08:33:10,1,0,6,0
    2,2017-01-29 03:47:03,1,1,7,0
    3,2017-02-05 12:36:56,1,0,8,0
    4,2017-02-04 06:10:55,1,1,9,0
    0,2017-01-29 05:13:43,1,0,10,0
    1,2017-02-06 06:35:18,1,1,11,0
    2,2017-01-31 08:23:25,1,0,12,0
    3,2017-02-03 04:25:10,1,1,13,0
    4,2017-01-31 04:31:34,1,0,14,0
    0,2017-01-30 10:03:42,1,1,0,0
    1,2017-01-30 11:07:57,1,0,1,0
    2,2017-02-05 11:17:45,1,1,2,0
    3,2017-02-02 12:59:56,1,0,3,0
    4,2017-01-31 04:49:48,1,1,4,0
    0,2017-02-02 01:02:05,1,0,5,0
    1,2017-01-31 11:16:52,1,1,6,0
    2,2017-02-03 09:53:51,1,0,7,0
    3,2017-01-31 04:02:09,1,1,8,0
    4,2017-01-28 05:06:38,1,0,9,0
    0,2017-01-28 09:18:28,1,1,10,0
    1,2017-02-01 04:26:56,1,0,11,0
    2,2017-02-03 11:17:34,1,1,12,0
    3,2017-02-06 09:09:23,1,0,13,0
    4,2017-01-30 08:20:51,1,1,14,0
    0,2017-02-05 06:42:01,1,0,0,0
    1,2017-02-01 04:29:38,1,1,1,0
    2,2017-02-02 05:28:21,1,0,2,0
    3,2017-02-05 04:24:37,1,1,3,0
    4,2017-01-31 07:59:14,1,0,4,0
    0,2017-01-31 10:38:59,1,1,5,0
    1,2017-02-06 03:01:17,1,0,6,0
    2,2017-02-02 08:52:25,1,1,7,0
    3,2017-02-02 07:47:35,1,0,8,0
    4,2017-02-04 07:55:27,1,1,9,0
    0,2017-02-06 12:32:50,1,0,10,0
    1,2017-01-28 11:01:04,1,1,11,0
    2,2017-01-30 01:12:09,1,0,12,0
    3,2017-01-29 03:42:15,1,1,13,0
    4,2017-02-05 07:00:44,1,0,14,0
    0,2017-02-05 05:12:40,1,1,0,0
    1,2017-01-28 11:28:18,1,0,1,0
    2,2017-02-05 09:11:08,1,1,2,0
    3,2017-01-29 09:11:08,1,0,3,0
    4,2017-02-04 03:46:57,1,1,4,0
    0,2017-02-02 06:21:06,1,0,5,0
    1,2017-01-28 02:15:06,1,1,6,0
    2,2017-01-31 02:34:50,1,0,7,0
    3,2017-02-05 10:14:23,1,1,8,0
    4,2017-01-31 05:05:26,1,0,9,0
    0,2017-02-05 12:25:46,1,1,10,0
    1,2017-02-05 07:15:07,1,0,11,0
    2,2017-02-03 04:00:19,1,1,12,0
    3,2017-02-06 03:25:13,1,0,13,0
    4,2017-02-02 06:01:42,1,1,14,0
    0,2017-02-03 04:41:57,1,0,0,0
    1,2017-02-06 10:23:15,1,1,1,0
    2,2017-01-29 07:45:19,1,0,2,0
    3,2017-02-03 11:10:25,1,1,3,0
    4,2017-02-05 12:36:33,1,0,4,0
    0,2017-02-03 01:51:44,1,1,5,0
    1,2017-02-01 08:01:16,1,0,6,0
    2,2017-02-01 05:06:28,1,1,7,0
    3,2017-01-31 03:20:15,1,0,8,0
    4,2017-02-05 07:00:14,1,1,9,0
    0,2017-01-31 08:10:04,1,0,10,0
    1,2017-02-03 03:23:12,1,1,11,0
    2,2017-01-31 10:24:29,1,0,12,0
    3,2017-02-04 06:12:08,1,1,13,0
    4,2017-01-31 05:24:38,1,0,14,0
    0,2017-02-01 08:55:20,1,1,0,0
    1,2017-01-29 04:59:03,1,0,1,0
    2,2017-02-02 01:05:55,1,1,2,0
    3,2017-02-01 10:09:05,1,0,3,0
    4,2017-01-30 01:01:37,1,1,4,0
    0,2017-02-06 10:57:49,1,0,5,0
    1,2017-02-01 08:23:28,1,1,6,0
    2,2017-02-01 09:00:45,1,0,7,0
    3,2017-01-30 12:16:46,1,1,8,0
    0,2017-02-04 06:06:36,1,0,10,0
    1,2017-02-01 09:31:02,1,1,11,0
    ...
    more
    ...
    
    • 将它们导入Excel文件,如下所示:

    enter image description here

    • 我的代码结果数据如下: enter image description here