Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.74/27: Рейтинг темы: голосов - 27, средняя оценка - 4.74
0 / 0 / 0
Регистрация: 18.09.2012
Сообщений: 32
1

Сложное сравнение 2-х таблиц Excel

15.10.2012, 07:00. Показов 5473. Ответов 2

Добрового времени суток! Столкнулся казалось бы с довольно банальной но опять же непростой задачей...
Казалось бы чего проще сравнить 2 таблицы Excel по какому нибудь полю. Но дело обстоит гораздо интереснее.
Дело в том что мне необходимо сравнивать 2 таблицы не только по одному критерию. К тому же эти таблицы могут быть разными вообще... Т е структура их неоднозначна. Приведу пример
1 таблица допустим может содержать поля: Имя, Дата, Номер, сумма и др (неважно какие)
2 таблица может вообще таких полей не содержать
3 таблица может содержать другие поля и какое нибудь одно или несколько полей первой таблицы
Сравнивать необходимо только 2 таблицы, т е программа должна куда то выводить название полей таблиц и на выбор поля пользователем сравнивать их. При отсутствии схожих полей выдавать сообщение что сходства в полях нет. Если сравнение произошло удачно то выводить данные сходства в другой excel файл.
Ну соответсвенно вывод тоже нужно сделать не 2 мя полями с которыми сравнивалось а допустим тоже сделать выбор полей которые будут отображаться.
Лично моя задумка пока примерно кончилась на том что я могу считать 2 таблицы через OpenDialog в StringGrid. Пока что идей новых нет. Ну и вывод допустим оставить на другую форму чтобы на первой было сравнение а на второй выгрузка...
Если нетрудно то подскажите еще походу как именно работать с отдельными ячейками excel через delphi. Например задавать им заливку, ширину, высоту, расположение, шрифт.
Ну что ж буду рад всем рекомендациям, а еще лучше живым примерам с листингом кода...
Всем заранее спасибо
ЗЫ: Желательно чтобы программа делала обработку не очень долго т к в таблицах могут быть тысячи строк но столбцов как правило не более 20-ти

Добавлено через 12 часов 5 минут
Ну что совсем ни у кого идей нет???
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.10.2012, 07:00
Ответы с готовыми решениями:

Сравнение таблиц в Excel
Добрый день. Подскажите пожалуйста можно ли в Excel сравнить два файла с таблицами и на выходе...

Сравнение двух таблиц Excel
Ребята, нужна как не как Ваша помощь! Можно ли обработать большие данные в delphi? 100 тыс....

Сравнение двух таблиц Excel
Подскажите, пожалуйста, можно ли реализовать в екселе следующее сравнение есть данные, которые...

Сравнение двух таблиц Excel
Всем привет. Возник такой вопрос. Возможно ли сделать сравнение двух двух таблиц из разных файлов...

2
13074 / 5859 / 1706
Регистрация: 19.09.2009
Сообщений: 8,807
15.10.2012, 11:52 2
Лучший ответ Сообщение было отмечено dart_veider13 как решение

Решение

Начать можно с кода чтения данных из таблицы MS Excel:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
implementation
 
{$R *.dfm}
 
uses
  ComObj;
 
procedure TForm1.Button1Click(Sender: TObject);
const
  //Координаты верхней левой ячейки таблицы на листе MS Excel.
  cRow1 = 3;
  cCol1 = 2;
var
  exApp, exBook, exSh, exRng, exCell, VArr : Variant;
  Od : TOpenDialog;
  Sg : TStringGrid;
  Row, Col : Integer;
begin
  //Ссылка на таблицу.
  Sg := StringGrid1;
  //Ссылка на объект диалога.
  Od := OpenDialog1;
  if Od.InitialDir = '' then
    Od.InitialDir := ExtractFileName(ParamStr(0));
  if not Od.Execute then Exit;
  if not FileExists(Od.FileName) then begin
    MessageBox(
      0
      ,'Заданный файл не найден. Действие отменено.'
      ,'Внимание!'
      ,MB_OK + MB_ICONWARNING + MB_APPLMODAL
    );
    Exit;
  end;
 
  try
    exApp := CreateOleObject('Excel.Application');
  except
    MessageBox(
      0
      ,'Не удалось запустить MS Excel. Действие отменено.'
      ,'Ошибка!'
      ,MB_OK + MB_ICONERROR + MB_APPLMODAL
    );
    Exit;
  end;
 
  //Делаем видимым окно MS Excel.
  exApp.Visible := True;
  //Открываем рабочую книгу.
  exBook := exApp.WorkBooks.Open(FileName:=Od.FileName);
  //Получаем ссылку на первый лист рабочей книги.
  exSh := exBook.Worksheets[1];
  //Верхняя левая ячейка в таблице на листе MS Excel.
  exCell := exSh.Cells[cRow1, cCol1];
  //Номер самой нижней задействованной строки на листе MS Excel
  Row := exSh.UsedRange.Row + exSh.UsedRange.Rows.Count - 1;
  //Номер крайнего правого задействованного столбца на листе MS Excel
  Col := exSh.UsedRange.Column + exSh.UsedRange.Columns.Count - 1;
  //Проверка размера таблицы.
  if exCell.Row > Row then begin
    MessageBox(
      0
      ,'Таблица на листе MS Excel пуста. Действие отменено.'
      ,'Внимание!'
      ,MB_OK + MB_ICONWARNING + MB_APPLMODAL
    );
    Exit;
  end;
  //Определение диапазона, который охватывает таблицу на листе MS Excel.
  exRng := exSh.Range[exCell, exCell.Offset[Row - exCell.Row, Col - exCell.Column]];
  //Получаем данные из таблицы Excel в виде вариантного массива.
  VArr := exRng.Value;
  //Устанавливаем размер таблицы Sg равным размеру вариантного массива.
  Sg.RowCount := VarArrayHighBound(VArr, 1);
  Sg.ColCount := VarArrayHighBound(VArr, 2);
  //Переписываем данные из вариантного массива в таблицу.
  for Row := 1 to VarArrayHighBound(VArr, 1) do
    for Col := 1 to VarArrayHighBound(VArr, 2) do
      Sg.Cells[Col - 1, Row - 1] := VArr[Row, Col];
end;
 
end.
Данные из таблицы на листе MS Excel читаются в вариантный массив VArr. А потом из VArr данные переписываются в таблицу StringGrid1. Таблица StringGrid1 нужна только для наглядного показа - что всё содержимое из таблицы MS Excel передано в программу.
---
Таким образом можно прочитать содержимое двух Excel таблиц, соответственно - в два вариантных массива. А затем уже анализировать содержимое этих массивов.
---
Ещё предлагаю прочитать о том, как вести разработку подобного кода.
1
0 / 0 / 0
Регистрация: 18.09.2012
Сообщений: 32
15.10.2012, 13:28  [ТС] 3
Это все конечно хорошо!!! Заполнение я уже сам сделал. У меня заполняются 2 таблицы string grid. Как мне сделать так чтобы выбирая колонку в первой таблице, программа искала колонку с таким же именем во 2 таблице. Сравнивала их и записывала схожее значение в ту же 2 ю таблицу но только в дополнительную колонку созданную через код
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.10.2012, 13:28

Сравнение двух разных таблиц Excel в MS Access
Есть прайс-листы в Excel от поставщиков, как лучше их сравнивать,чтобы узнать какие новые товары...

Excel: сравнение двух таблиц по первому столбцу
Помогите пожалуйста буду благодарен. Необхордимо сравнить две таблицы, по первому столбцу(part no)...

Сравнение данных таблиц с перебором значений в ячейке Excel
Всем привет! В первой таблице значения ячейки в виде "10175094,20000195;" , во второй таблице...

Сложное сравнение ячейки с диапазоном
Привет. Хочу разобраться в сравнении ячеек в таблицах. Есть две таблицы, на разных листах. 1...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.