从Excel(或任何文件)到数组列表C#

时间:2009-08-25 12:18:26

标签: c# file arraylist

我想把Excel中的一些数字放到数组中。 假设我有一个包含这样的数字的Excel文件:

23 34 1 3 100 56 45 43 56 4 87 6 89 9

这只是excel(或任何文件)中的一列 我想把那些numers作为整数放在arraylist中,我不需要将结果作为一个数字,但所有这些数字都是int值。

请帮忙吗?

3 个答案:

答案 0 :(得分:1)

假设上面是一个字符串(并且源无关紧要),您可以执行以下操作:

string s = "23 34 1 3 100 56 45 43 56 4 87 6 89 9";
string[] numbers = s.Split(' ');

ArrayList numberList = new ArrayList();
int i;

foreach (String num in numbers)
{
    if (Int32.TryParse(num, out i))
        numberList.Add(i);
    else
        Console.WriteLine("'{0}' is not a number!", num);
}

listBox1.DataSource = numberList;

我建议使用List<int>代替ArrayList来确保类型安全。

以下代码使用数据库连接将Excel工作表中的所有值读取到数据集中。然后,您可以选择所需的值。:

String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + filename + ";" + "Extended Properties=\"Excel 8.0;HDR=NO;IMEX=1ReadOnly=False\"";

OleDbConnection objConn = new OleDbConnection(sConnectionString);

objConn.Open();
OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [" + sheetname + "$]", objConn);

OleDbDataAdapter objAdapter1 = new OleDbDataAdapter();
objAdapter1.SelectCommand = objCmdSelect;

DataSet dsExcelContent = new DataSet();
objAdapter1.Fill(dsExcelContent);

objConn.Close();

修改
您没有指定字符串的确切来源,因此,如果此问题是关于如何读取文件或如何从Excel电子表格导入数据,您可能应该稍微改写一下您的问题。

编辑2
在OP的愿望上取代List<int> ArrayList(反对更好的设计)。

编辑3
添加了一个新行,以向OP展示如何将ArrayList用作ListBox的数据源......

编辑4
添加了使用OleDB读取Excel工作表的代码。

答案 1 :(得分:1)

分割字符串并将每个项目解析为列表非常容易。

String input = "23 34 1 3 100 56 45 43 56 4 87 6 89 9";

List<Int32> result = input
    .Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
    .Select(i => Int32.Parse(i))
    .ToList();

请注意,此代码没有错误处理。如果项不是有效整数,则抛出异常。您可以使用Int32.TryParse()处理此案例。你最好不使用LINQ,但你也可以使用以下无效的LINQ代码。

Int32 dummy;
List<Int32> result = input
    .Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
    .Where(i => Int32.TryParse(i, out dummy))
    .Select(i => Int32.Parse(i))
    .ToList();

没有LINQ。

String input = "23 34 1 3 100 56 h45 43 56 4 87 6 89 9";

Int32 dummy;
List<Int32> result = new List<Int32>();

foreach (String item in input.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries))
{
    Int32 number;
    if (Int32.TryParse(item, out number))
    {
        result.Add(number);
    }
    else
    {
        // Handle invalid items.
    }
}

答案 2 :(得分:0)

您也可以导出为文件格式,即xml或csv,然后从您的c#程序中解析它。