0

Excelから配列にいくつかの数値を入れたいです。次のような番号のExcelファイルがあるとします。

23 34 1 3100 56 45 43 56 4 87 6 89 9

これはExcel(または任意のファイル)の1つの列です。これらの数値を整数としてarraylistに入れたいのですが、結果を1つの数値にする必要はありませんが、すべての数値を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(より良い設計に対して)OPの希望に応じて
置き換えられましList<int>た。ArrayList

編集3OPにデータソースとしての
使用方法を示す新しい行を追加しました...ArrayListListBox

編集
4OleDBを使用して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 に答える