2012-03-12 6 views
0

Возможный дубликат:
Read data from Excel filesЧтение данных из таблицы Excel

У меня возникли некоторые проблемы с чтением из таблицы Excel в C#. У меня есть этот код, который я прочитал каждую клетку от А до X.

int i = 1; 
int number; 
System.Array myvalues; string[] strArray; 
Microsoft.Office.Interop.Excel.Range range = 
    worksheet.get_Range("A" + i.ToString(), "X" + i.ToString()); 

while(range.Count!=0) 
{ 
    i++; 
    range = worksheet.get_Range("A" + i.ToString(), "X" + i.ToString()); 
    myvalues = (System.Array)range.Cells.Value; 
    strArray = ConvertToStringArray(myvalues); 
    number = Convert.ToInt32(strArray[0]); 
} 

Мой вопрос: Как я мог читать дальше 4 * «количество» строк в Excel на основе значения «номер»?

Например:

A B C D E F G H I J 
a a a a a 1 a a a a 

значение ячейки F является 1, так что я хотел бы читать (GHIJ) Если значение ячейки F является 2, я хотел бы читать (GHIJKLMN)

A B C D E F G H I J K L M N 
a a a a a 2 a a a a a a a a 

Значение ячейки F 3:

A B C D E F G H I J K L M N O P Q R 
a a a a a 3 a a a a a a a a a a a a 

.

if (!number_add_file.Equals("") ) 
{ 
    addcmpy(); 
    Microsoft.Office.Interop.Excel.Range range_add = worksheet.get_Range("X"+i.ToString() , "AA" + i.ToString()); 
    while(range_add.Count != 0){ 
    if (Int32.Parse(number_add_file) == 2) 
    { 
     range_add = worksheet.get_Range("X"+i.ToString() , "AE"i.ToString()); 
    } 
    else if (Int32.Parse(number_add_file) == 3) 
    { 
     range_add = worksheet.get_Range("X"i.ToString() , "AI"i.ToString()); 
    } 
    else if (Int32.Parse(number_add_file) == 4) 
    { 
     range_add = worksheet.get_Range("X"i.ToString() , "AM"i.ToString()); 
    } 
    else if (Int32.Parse(number_add_file) == 5) 
    { 
     range_add = worksheet.get_Range("X" i.ToString(), "AQ"i.ToString()); 
    } 

    System.Array values = (System.Array)range_add.Cells.Value; 
    string[] str = ConvertToStringArray(values); 
    for (int l = 0; l < str.Length; l++) 
     Console.WriteLine(l +" "+str[l]); 

    name = str[0]; 
    lang_add = str[1]; 
    price = str[2]; 
    description = str[3]; 

    Console.WriteLine(name + " " + lang_add + " " + price + " " + description); 
    addfile(); 
    name = ""; 
    lang_add = ""; 
    price = ""; 
    description = ""; 
    } 
} 
+0

Хмм ... звучит как очень простой алгоритм. почему бы не взять удар, дайте нам знать, что не работает? «Ленивые вопросы вознаграждаются ленивыми ответами», lol ... – code4life

+0

проверить позже ... – Vlasin

ответ

0

Вы можете рассмотреть возможность использования Int32.TryParse вместо того, чтобы слепо вызова Convert.ToInt32() - если ячейка в строке F не содержит число, ваша программа собирается бросить исключение, которое вы могли бы иметь дело.

Вопрос кажется немного ... простым? Вы знаете свою отправную точку, вы знаете, как далеко вы хотите пойти (number * 4), и я полагаю, вы знаете, как написать цикл for. Здесь есть что-то еще?

+0

не могли бы вы привести пример get_Range()? С циклом for я знаю, как далеко я должен идти, но как я могу получить значения ячеек? – Vlasin

+0

Ваш ответ не имеет отношения вообще .. – Vlasin

Смежные вопросы