Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сравнение листов Excel 
:(
    Опции темы
Georgich
Дата 7.2.2012, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 20.1.2008

Репутация: нет
Всего: нет



Приветствую.
Необходимо реализовать сравнение ячеек из листов из 2-х книг Excel (одна книга генерируется программой, другая - эталонная, лежит на диске). В каждой книге по 18 листов. Сейчас у меня такой код:
Код

        void ExportWorksheets()
        {
            Excel.Application XL = null;
            Excel.Workbook WB = null;
            Excel.Worksheet WS = null;

            try
            {
                XL = System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application") as Excel.Application;
                WB = XL.ActiveWorkbook;
                //WS = WB.Worksheets;
                WS = (Excel.Worksheet)WB.Worksheets[1];
            }
            catch { }
        }

Здесь я подключаюсь к запущенному Excel и получаю из него активную книгу и пока только один лист (последняя строка). Вопрос: как получить массив всех 18-ти листов, чтобы потом передать его на обработку для сравнения? И второй вопрос: как сравнивать ячейки листов между собой?
Спасибо.
PM MAIL   Вверх
LOPUH
Дата 8.2.2012, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Растение
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 15.2.2008
Где: Красноярск

Репутация: нет
Всего: 4



Что именно вы хотите сравнить в ячейках?  Можно сравнивать параметры форматирования, значения. Чтобы обратиться к значению ячейки надо написать примерно так:
Код

// предположим, что в ячейках  у вас хранятся числовые значения и дополнительных преобразований не требуется
If Range("A1").Value >Range("b1").Value
// чего то там


Так как  Worksheets  есть ничто иное, как коллекция? входящая в состав объекта Workbook, то здесь для перебора всех листов отлично должен работать оператор foreach
Если вам удобнее обращаться по именам , то это выглядит примерно так:
Код

 WS = (Excel.Worksheet)WB.Worksheets("Лист1");


Это сообщение отредактировал(а) LOPUH - 8.2.2012, 13:09
PM MAIL   Вверх
Georgich
Дата 8.2.2012, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 20.1.2008

Репутация: нет
Всего: нет



В общем сделал так:
Код

            public Excel.Worksheet[] ExportWorksheets()
            {
                Excel.Application XL = null;
                Excel.Workbook WB = null;
                Excel.Worksheet[] WS = new Excel.Worksheet[19];
                Excel.Sheets WSS = null;
     
                try
                {
                    XL = System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application") as Excel.Application;
                    WB = XL.ActiveWorkbook;
                    WSS = WB.Worksheets;
                    for (int i = 1; i <= WB.Worksheets.Count; i++)
                        WS[i] = WSS.get_Item(i) as Excel.Worksheet;
                }
                catch { }
     
                return WS;
            }
     
            public Excel.Worksheet[] SampleWorksheets()
            {
                Excel.Application XLsample = null;
                Excel.Workbook WBsample = null;
                Excel.Worksheet[] WSsample = new Excel.Worksheet[19];
                Excel.Sheets WSSsample = null;
     
                try
                {
                    XLsample = new Excel.ApplicationClass();
                    WBsample = XLsample.Workbooks.Open(TestConst.Sample, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing);
                    WSSsample = WBsample.Worksheets;
                    for (int i = 1; i <= WBsample.Worksheets.Count; i++)
                        WSsample[i] = WSSsample.get_Item(i) as Excel.Worksheet;
                }
                catch { }
     
                return WSsample;
            }
     
            void CompareExcelCells()
            {
                bool a;
                Excel.Worksheet[] wk = new Excel.Worksheet[19];
                Excel.Worksheet[] wk2 = new Excel.Worksheet[19];
                for (int i = 2; i < 19; i++)
                {
                    wk[i] = ExportWorksheets()[i];
                    wk2[i] = SampleWorksheets()[i];
     
                    for (int j = 1; j <= wk[i].UsedRange.Rows.Count; j++)
                        for (int k = 1; k <= wk[i].UsedRange.Columns.Count; k++)
                            if (System.Convert.ToString((wk[i].Cells[j, k] as Excel.Range).Value2) == System.Convert.ToString((wk2[i].Cells[j, k] as Excel.Range).Value2))
                                a = true;
                            else
                                a = false;
                }
            }


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0666 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.