Excelから配列にいくつかの数値を入れたいです。次のような番号のExcelファイルがあるとします。
23 34 1 3100 56 45 43 56 4 87 6 89 9
これはExcel(または任意のファイル)の1つの列です。これらの数値を整数としてarraylistに入れたいのですが、結果を1つの数値にする必要はありませんが、すべての数値をint値にする必要があります。
何か助けてください?
上記が文字列であると仮定すると(そしてソースは重要ではありません)、次のことができます。
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にデータソースとしての
使用方法を示す新しい行を追加しました...ArrayList
ListBox
編集
4OleDBを使用してExcelシートを読み取るためのコードを追加しました。
これは、文字列を分割して各項目をリストに解析するのは非常に簡単です。
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.
}
}
また、ファイル形式、つまりxmlまたはcsvにエクスポートして、c#プログラムからこれを解析することもできます。