我有表格:
和包含这些值的csv文件:
110977,3871933,317731,0,
如何在一次复制和粘贴操作中复制CSV数据并将其粘贴到所有正确的字段中? (所有数据将按照正确的顺序)
提前致谢!
答案 0 :(得分:2)
我建议通过打开它来读取CSV文件,然后用逗号分割,将值放入字符串数组中,然后更新textBoxes。 请参阅this问题的答案。 您还可以使用OpenFileDialog提供用于打开文件的UI。
修改强>:
我准备了一些基本的例子来处理完全您要求的案例。它假设您在复制的CSV行中有4个值,用逗号分隔(无论如何,如果复制行中只有4个,则前4个将放入textBoxes)。它只需复制CSV行并使用Ctrl + V将其粘贴到第一个文本框(txtValue1
)中,然后由,
分割,并将复制的CSV行中的所有值放入相应的文本框中(txtValue1
,txtValue2
,txtValue3
,txtValue4
连续)。
我的表单看起来就像那样:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
txtValue1.KeyDown += TxtValue1_KeyDown;
}
private void TxtValue1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.KeyCode == Keys.V)
{
string csvLine = Clipboard.GetText();
if (String.IsNullOrEmpty(csvLine))
return;
string[] values = csvLine.Split(',');
if (values.Count() < 4)
return;
txtValue1.Text = values[0];
txtValue2.Text = values[1];
txtValue3.Text = values[2];
txtValue4.Text = values[3];
e.SuppressKeyPress = true;
}
}
}
当然可以使它更通用并处理可能的异常。这只是为了说明如何轻松解决您的需求。
答案 1 :(得分:0)
复制/粘贴?更像是从流中读取CSV?
使用任何类型的流阅读器开始阅读CSV后,创建一个模型,即一个类来存储值。当您从CSV中读取字段的位置时,您可以开始将它们存储到模型中,然后从那里轻松实现。您可能想要将所有内容都读入List中,因此您只需阅读一次。
这是你的班级
public class Model
{
public string InvoiceNumber { get; set; }
...
}
这是CSV阅读片
using (StreamReader sr = new StreamReader(sourceFileName))
{
List<Model> modelList = new List<Model>();
string headerLine = sr.ReadLine();
string currentLine;
for (int i = 0; i < strArray.Length; i++)
{
while ((currentLine = sr.ReadLine()) != null)
{
string[] strArray = currentLine.Split(',');
Model myModel = new Model();
switch (i)
{
case 0: myModel.InvoiceNumber = = strArray[i]; break;
case 1: myModel.InvoiceHeaderId = strArray[i]; break;
}
}
}
modelList.Add(myModel);
}
}
从这里你可以将它分配给UI。它取决于你想要读取哪一行,可能过滤结果以获取id,或者过滤我的其他数据。由您决定,您可以在每个循环中添加这些过滤器。或者甚至更好,看看LINQ。 :d
foreach (var item in modelList)
{
txtInvoiceNumber.Text = mymodel.InvoiceNumber;
txtinvoiceHeaderId.Text = mymodel.InvoiceHeaderId;
}