Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Программа для сравнения xls Файлов, Сравнивает два экселевских файла. 
:(
    Опции темы
Stolzen
Дата 30.11.2006, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

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



Хочу сделать программу для сравнения двух экселевских файлов, т.е. программа должна открыть первый и второй файлы, просканировать их и выдать в результате в третий файл (напр, "result.xls"), то, что есть во втором, но нет в первом.

Сейчас в голове набросал примерный алгоритм работы:

1. Пользователь вводит пути к двум файлам, а так же номера столбцов (напр "А" и "В" - в первом, "С" и "D" - во втором, т.е. это - переменные)

2. программа открывает их.

3. создать копию второго файла и назвать её "result.xls"

4. Запускается цикл:
Код

for i := 1 to (кол-во ячеек первого файла) do
for j := 1 to (кол-во ячеек второго файла) do

if ( (ЯЧЕЙКА A i (т.е текст ячеки №1 1-го файла)) = (ЯЧЕЙКА С j (текст ячеки №2 2-го файла)) ) И (ЯЧЕЙКА B i) = (ЯЧЕЙКА D j)
then  удалить всю строку № j файла "result.xls"


5. Открыть "result.xls"

Может, что-то в этом алгоритме можно реализовать по-другому? (например, цикл)
Какой компанент лучше всего здесь ипользовать (учитывая то, что я с экселем через делфи вообще никогда еще не работал)?



Это сообщение отредактировал(а) Stolzen - 30.11.2006, 11:42


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
PROeXT
Дата 30.11.2006, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Можно сделать через ADO и использовать компоненты TDataSet. В таком случае твои Excel файлы будут типа БД...

Это сообщение отредактировал(а) PROeXT - 30.11.2006, 12:04
PM MAIL ICQ   Вверх
Stolzen
Дата 30.11.2006, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

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



Цитата(PROeXT @  30.11.2006,  20:03 Найти цитируемый пост)
Можно сделать через ADO и использовать компоненты TDataSet. В таком случае твои Excel файлы будут типа БД...


На самом деле я из всего этого ничего не понял  smile 


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
PROeXT
Дата 30.11.2006, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Счас поищу примерчик...

Для удобства объявим константы:

Код

Const
 ConnectStr='Provider=MSDASQL.1;Persist Security Info=True;Extended Properties="DSN=Файлы Excel;'+
            'DBQ=%s;DefaultDir=%s;DriverId=790;MaxBufferSize=2048;PageTimeout=5;"';
 ErrorConnectToExcel='Ошибка при попытке открыть файл Excel.';
 ErrorFileNotFound='Указанный Вами файл Excel не найден.'; 


Итак, подключение к файлу Excel:

Код

 IF Length(Trim(edSourceFile.Text))=0 Then Exit;
 IF Not FileExists(edSourceFile.Text) Then
 Begin
  ShowMessage(ErrorFileNotFound);
  BitBtnBack.Click;
 End; {IF}
 With DtMdlMain,acExcel Do
 Begin
  IF Connected Then Connected:=False;
  Try       
ConnectionString:=Format(ConnectStr,[edSourceFile.Text,ExtractFilePath(edSourceFile.Text)]);
   Connected:=True;
   aqExcel.SQL.Text:='SELECT * FROM [tfoms_pasp$]';
   aqExcel.Open;
  Except
   ShowMessage(ErrorConnectToExcel);
  End; {Try}
 End; {With}


Самое главное - указать имя страницы (в моем случае это tfoms_pasp). И не забудь добавить к нему (названию) символ $. Он этого очень хочет  smile 

Если все прошло нормально, то в aqExcel(TADOQuery) загружаются все данные твоего Excel файла, представленные в виде таблицы...

Естественно, что операцию, описанную выше, тебе придется повторить дважды... Но, уверен, что ты уже и сам понял, что к чему  smile 

Это сообщение отредактировал(а) PROeXT - 1.12.2006, 00:38
PM MAIL ICQ   Вверх
Stolzen
Дата 30.11.2006, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

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



PROeXT: Еще не совсем вкурил, проснусь, с утра на свежую голову гляну... 
Может быть по этому компаненту хелп какой-нить есть? (Как он, кстати, называется, а тоя че-то наити название нигде не могу...)


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
PROeXT
  Дата 30.11.2006, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



В Delphi 7, например, в палитре компонентов есть вкладка... Она так и называется ADO. На ней расположены следующие компоненты:
ADOConnection - для осуществления связи с "физическим" источником данных. В твоем случае в роли такого источника данных выступают файлы Excel
ADOCommand - для выполнения запросов, не возвращающих параметров. Т.е. запросов типа Insert,Delete
ADOTable - Аналогия с TTable (недаром у них общий предок TDataSet)
ADOQuery - Аналогия с TQuery. Если у меня вдруг появляется задача, аналогичная твоей - я использую тока его, так как люблю контролировать весь процесс... А как это еще можно сделать без запросов?

Тебе нужно твой ADOTable/ADOQuery просто привязать к настроенному ADOConnection (см. пример выше), и все получится...

PS. В моем примере (выше), acExcel - Это компонент TADOConnection, а aqExcel - TADOQuery  smile 

Это сообщение отредактировал(а) PROeXT - 30.11.2006, 21:47
PM MAIL ICQ   Вверх
Stolzen
Дата 1.12.2006, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

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



PROeXT

Приду днем с института, обмозгую, попробую написать прогу.


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

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


 




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


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

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