Как перебрать столбец в приложении Excel через консоль С#?

Я создал консольное приложение, которое читает из файла Excel. Я хочу взять все номера документов и поместить их в массив для целей поиска. Я могу найти ячейку, содержащую данные «Номер документа», например. $F$5. Как я могу перебирать строки в столбце F? У меня есть следующий код:

public static void Main(string[] args)
    {
        string address;
        string next;
        try
        {
            Excel.ApplicationClass excel = new Excel.ApplicationClass();
            Excel.Workbook workbook = excel.Workbooks.Open(@"D:\sample.xls", Missing.Value, Missing.Value,
                Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
                Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
                Missing.Value, Missing.Value);
            Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Sheets["Sheet1"];
            Excel.Range docNumber = worksheet.Cells.Find("DocumentNumber", worksheet.Cells[1, 1], Excel.XlFindLookIn.xlValues,
                Excel.XlLookAt.xlPart, Missing.Value, Excel.XlSearchDirection.xlNext,
                false, Missing.Value, Missing.Value);

            if(docNumber != null){
                address = docNumber.get_Address(true, true, Excel.XlReferenceStyle.xlA1, Missing.Value, Missing.Value);
                Console.WriteLine(address);

            }
        }
        catch (Exception err)
        {
            Console.WriteLine(err.Message);
        }
    }

Заранее спасибо.


person janejanejane    schedule 20.12.2010    source источник
comment
здесь вы используетеmissing.value, это значит?   -  person Rajesh Kumar G    schedule 20.12.2010


Ответы (3)


пожалуйста, посмотрите на это. Он перебирает все строки и столбцы.

string address;  
string next; 

try {  
    Excel.ApplicationClass excel = new Excel.ApplicationClass();
    object Missing = Type.Missing;
    FileInfo fInfo = new FileInfo(@"D:\sample.xls");

    if(fInfo.Exists) {
        Excel.Workbook workbook = excel.Workbooks.Open(@"D:\sample.xls", Missing, Missing, 
                    Missing, Missing, Missing, Missing, Missing,  
                    Missing, Missing, Missing, Missing, Missing,  
                    Missing, Missing);      
        Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Sheets["Sheet1"];
        Excel.Range docNumber = worksheet.Cells.Find("DDEC", worksheet.Cells[1, 1], 
        Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, Missing, Excel.XlSearchDirection.xlNext, false, Missing, Missing);     

        if(docNumber != null) {
            address = docNumber.get_Address(true, true, Excel.XlReferenceStyle.xlA1, Missing, Missing);
            docNumber = worksheet.UsedRange;                        

            for (int rCnt = 1; rCnt <= docNumber.Rows.Count; rCnt++) {
                for (int cCnt = 1; cCnt <= docNumber.Columns.Count; cCnt++) {
                    string str = (string)(docNumber.Cells[rCnt, cCnt] as Excel.Range).Value2;
                    MessageBox.Show(str);
                }
            }
            Console.WriteLine(address); 
        }     
    }
}
person Rajesh Kumar G    schedule 20.12.2010
comment
Привет, Раджеш, я только что прочитал твой ответ. И это работает для меня. Спасибо. :) - person janejanejane; 21.12.2010

Не проще ли было бы читать данные с помощью OLEDB? Более чистый синтаксис, тогда вы можете foreach возвращать DataTable.

person MAW74656    schedule 20.12.2010
comment
Привет Maw, бизнес-требования изменились, и мое первое решение больше не работает. В файле excel нет заголовков столбцов, как я себе представлял. Вместо этого заголовки устанавливаются в середине файла. Как я могу это решить? - person janejanejane; 22.12.2010
comment
Как я могу выбрать * из [лист1 $], где столбец = L? - person janejanejane; 22.12.2010
comment
@janejanejane - заголовки столбцов находятся в середине файла!!??? Это сильно усложнит дело. Вы заранее знаете, что такое столбцы? - person MAW74656; 30.12.2010
comment
@janejanejane- Используя OLEDB, вы можете создать строку, содержащую sql, точно так же, как вы ввели в своем комментарии. Затем вы можете использовать метод заполнения OLEdbDataAdapter, чтобы получить значения в таблице данных. - person MAW74656; 30.12.2010