自动填充WinForm,其中数据从Excel行粘贴 - 最后一行不断被跳过

时间:2016-03-03 02:32:17

标签: c# winforms copy-paste autofill

我尽力找到一种更好的方法从excel复制数据行,并让用户通过点击按钮将其直接粘贴到Form。可以从任何合适的事件中调用以下函数。这段代码是我能够使用我在网站上找到的各种方法进行汇编的最佳代码,但此代码会跳过该行的最后一个条目。

有人可以帮助我让代码正常工作吗?任何以不同方式做到这一点的建议都是受欢迎的,因为我只是一个初学者。

另外,我无法正确解析日期,这就是我在DateTimePicker的if条件中评论该部分的原因。

更新:我能够弄清楚为什么行的最后一个条目被跳过了。由于复制粘贴格式,字符串末尾没有“\ t”。我已经纠正了下面的代码。仍在努力解决日期格式问题。

private void autofill()
    {
        DataObject o = (DataObject)Clipboard.GetDataObject();
        if (o.GetDataPresent(DataFormats.Text))
        {
            string[] pastedRows = Regex.Split(o.GetData(DataFormats.Text).ToString().TrimEnd("\r\n".ToCharArray()), "\r\n");

            var cell = "";
            int i = 1;

            if (pastedRows[pastedRows.Length - 1] != "\t")
            {
                pastedRows[pastedRows.Length - 1] += "\t";
            }

            foreach (string pastedRow in pastedRows)
            {
                foreach (char str in pastedRow)
                {
                    if (str.ToString() != "\t")
                    {
                        cell = cell + str.ToString();
                    }
                    else
                    {
                        foreach (Control c in tableLayoutPanel1.Controls)
                        {
                            if (c.TabStop == true && c.TabIndex == i)
                            {
                                if (c is TextBox)
                                {
                                    ((TextBox)c).Text = cell.ToString();
                                    continue;
                                }
                                else if (c is ComboBox)
                                {
                                    ((ComboBox)c).Text = cell.ToString();
                                    continue;
                                }
                                else if (c is DateTimePicker)
                                {
                                    //((DateTimePicker)c).Value = DateTime.Parse(cell.ToString());
                                    continue;
                                }
                                else if (c is RichTextBox)
                                {
                                    ((RichTextBox)c).Text = cell.ToString();
                                    continue;
                                }
                            }
                            else
                            {
                                continue;
                            }
                        }
                        cell = "";
                        i = i + 1;
                    }
                }
            }
        }
    }

0 个答案:

没有答案