繁体   English   中英

C#Winform Excel通过查询读取

[英]C# Winform Excel Reading through a query

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

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

在此处输入图片说明

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

我的问题是:

  • 如何选择工作表? 我知道这只是一张纸,但我不知道如何使用OleDbConnection指向一张纸。 OleDBConnection中的示例为“ [Sheet1 $]”以读取工作表,但我不确定将从终端生成什么工作表名称。 我们可以使用索引吗? 例如:“ from [Sheet1&]”将是“ from [0 $]”?
  • 与第一个问题相同,但在excel列中。 我如何将其视为“ [0], 1 ”。
  • 最后一个问题,可能会全部解释。 我真正想做的是使用OleDbConnection,我的命令将如下所示:

    “选择DISTINCT [0 $],Convert([1 $],Date),MIN(Convert([1 $],Time)),MAX(Convert([1 $],Time))FROM [0 $] GROUP BY [0 $],Convert([1 $],Date)“

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

我需要生成一个文件来显示员工的出勤情况,该文件将按日期格式设置,并有一天的第一时间输入和最后的时间输出。 请查看下图以了解输出的想法。

在此处输入图片说明

我已经尝试搜索,但是找不到适合我需要的解决方案。

希望任何人都能帮助我。 谢谢!

问题:

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

这些步骤是如何获取期望的数据:

  1. 从Excel文件读取所有数据需要知道工作Sheet Name ;
  2. 过滤无效数据,因为有很多列,值是emptynullspace-string但已添加到行中;
  3. 使用Linq查询数据。

希望我的回答能对您有所帮助。

参考代码:

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文件,如下所示:

在此处输入图片说明

  • 我的代码结果数据如下: 在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM