Из Excel (или любого файла) в список массивов C # - PullRequest
0 голосов
/ 25 августа 2009

Я хочу поместить несколько чисел из Excel в массив. Допустим, у меня есть файл Excel с такими числами, как этот:

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

это только один столбец в Excel (или любой файл) И я хочу поместить эти числа в arraylist как целые числа, мне не нужен результат как одно число, но все эти числа должны быть в значении int.

Любая помощь, пожалуйста?

Ответы [ 3 ]

1 голос
/ 25 августа 2009

Предполагая, что приведенное выше является строкой (и источник не имеет значения), вы можете сделать следующее:

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();

EDIT
Вы не указали точный источник строки, поэтому если этот вопрос касается того, как прочитать файл или как импортировать данные из электронной таблицы Excel, вам, вероятно, следует немного перефразировать ваш вопрос.

РЕДАКТИРОВАТЬ 2
Заменено List<int> на ArrayList по желанию OP (против лучшего дизайна).

РЕДАКТИРОВАТЬ 3
Добавлена ​​новая строка, чтобы показать оператору, как использовать ArrayList в качестве источника данных для ListBox ...

РЕДАКТИРОВАТЬ 4
Добавлен код для чтения листа Excel с использованием OleDB.

1 голос
/ 25 августа 2009

Это довольно легко - разбить строку и разобрать каждый элемент в списке.

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.
    }
}
0 голосов
/ 25 августа 2009

Вы также можете экспортировать в формат файла, например, xml или csv, а затем проанализировать это из вашей программы на c #.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...