0

我想将一些数字从 Excel 放到数组中。假设我有一个 Excel 文件,其中包含如下数字:

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

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

请问有什么帮助吗?

4

3 回答 3

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类型安全。

以下代码使用 DB 连接将 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
替换List<int>ArrayListOP 的愿望(反对更好的设计)。

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

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

于 2009-08-25T12:27:54.117 回答
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.
    }
}
于 2009-08-25T12:35:37.757 回答
0

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

于 2009-08-25T12:27:11.903 回答