Аватар для San22Rus
14 / 14 / 8
Регистрация: 07.03.2016
Сообщений: 152

Сравнение двух таблиц, с разных вордовских файлов

01.09.2016, 08:41. Показов 3175. Ответов 52
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток, уважаемые знатоки, подскажите пожалуйста каким образом или возможно ли это вообще. Хочу брать 2 вордовских файла с одинаковыми таблицами и сравнивать их на наличие одинаковых строк, причём чтобы те строки, которые существуют только в одном файле - выводились на экран.
Заранее спасибо!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.09.2016, 08:41
Ответы с готовыми решениями:

Сравнение таблиц с разных файлов
Ребята, приветствую! Мне очень нужна ваша помощь. Имеется 2 файла, в одной таблицы выгружаются из crm, в другой из 1с. Нужно сравнивать их...

Сравнение двух таблиц на разных листах
Доброе время суток! Друзья, помогите решить задачу, есть макрос поиска одинаковых строк и покраской повторяющихся строк на листе. Как...

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

52
 Аватар для San22Rus
14 / 14 / 8
Регистрация: 07.03.2016
Сообщений: 152
06.09.2016, 09:46  [ТС]
Студворк — интернет-сервис помощи студентам
qwertehok, Нет нет, вот к примеру начался перебор строк в StringGrid2 и допустим его 5 запись не существует в StringGrid1, и эта запись должна записаться в StringGrid3 как первая запись и т.д.
0
 Аватар для San22Rus
14 / 14 / 8
Регистрация: 07.03.2016
Сообщений: 152
06.09.2016, 09:51  [ТС]
вот как на скриншоте должно быть, здесь всё правильно выводит вот этот код:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var
    i,j,k:integer;
begin
    form3.show;
    k:=-1;
    for i:=0 to StringGrid2.RowCount-1 do begin
        j:=0;
        while (j<StringGrid1.RowCount-1) 
            and (StringGrid1.Cells[1,j]<>StringGrid2.Cells[1,i]) 
                do  inc(j);
        if (j>=StringGrid1.RowCount-1) then begin
            inc(k);
            form3.StringGrid1.Rows[k].Text:=StringGrid2.Rows[i].Text;
         end;
    end;
Только он выводит всего лишь 5 строк, а остальные почему то нет
Миниатюры
Сравнение двух таблиц, с разных вордовских файлов  
0
6003 / 4578 / 1096
Регистрация: 29.08.2013
Сообщений: 28,269
Записей в блоге: 3
06.09.2016, 09:55
Цитата Сообщение от San22Rus Посмотреть сообщение
и эта запись должна записаться в StringGrid3 как первая запись и т.д.
а может ты сам хоть что-то сделаешь? голова то есть?
0
 Аватар для San22Rus
14 / 14 / 8
Регистрация: 07.03.2016
Сообщений: 152
06.09.2016, 10:02  [ТС]
qwertehok,
Цитата Сообщение от qwertehok Посмотреть сообщение
а может ты сам хоть что-то сделаешь? голова то есть?
Я сделал вот это сам, только у меня выводит всего 5 первых найденных записей, а их гораздо больше, я и прошу помощи, хочу узнать почему так, иначе зачем тогда этот форум вообще? Я же не прошу вас готовый код мне скинуть, чтобы я скопировал и у меня всё заработало сразу, хотя бы подсказать наводку
0
Модератор
 Аватар для D1973
9954 / 6489 / 2461
Регистрация: 21.01.2014
Сообщений: 27,488
Записей в блоге: 3
06.09.2016, 10:26
San22Rus, вот читаю тему и что-то уже запутался:
1. Есть 3 таблицы одинаковой структуры. Первые 2 из них заполнены данными.
2. Сравниваем таблицы по первым столбцам.
3. Если в 1-м столбце таблицы 2 есть данные, которых нет в 1-м столбце таблицы 1 - копируем всю строку целиком из таблицы 2 в таблицу 3.
Все верно?
0
6003 / 4578 / 1096
Регистрация: 29.08.2013
Сообщений: 28,269
Записей в блоге: 3
06.09.2016, 10:34
Цитата Сообщение от San22Rus Посмотреть сообщение
хочу узнать почему так
потому что это не код, а какой то бред

Delphi
1
 if  stringgrid1.Cols[1].IndexOf(stringgrid2.cells[0,i])=-1
вот проверка которая точно проверяет есть ли подстрока в колонке
0
 Аватар для San22Rus
14 / 14 / 8
Регистрация: 07.03.2016
Сообщений: 152
06.09.2016, 10:48  [ТС]
D1973,
Цитата Сообщение от D1973 Посмотреть сообщение
Все верно?
да, Вы всё правильно поняли
0
Модератор
 Аватар для D1973
9954 / 6489 / 2461
Регистрация: 21.01.2014
Сообщений: 27,488
Записей в блоге: 3
06.09.2016, 11:20
Лучший ответ Сообщение было отмечено San22Rus как решение

Решение

Ну тогда вот так как-то можно:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.Button2Click(Sender: TObject);
var i, k : integer;
    L : TStringList;
begin
 k := 0;
 L := TStringList.Create;
 L.CommaText := Grid1.Cols[0].Text;
 for i := 0 to Grid2.RowCount - 1 do
  if L.IndexOf(Grid2.Cells[0, i]) = -1
   then begin
         Grid3.Rows[k] := Grid2.Rows[i];
         Grid3.RowCount := Grid3.RowCount + 1;
         inc(k);
        end;
end;
Миниатюры
Сравнение двух таблиц, с разных вордовских файлов  
1
6003 / 4578 / 1096
Регистрация: 29.08.2013
Сообщений: 28,269
Записей в блоге: 3
06.09.2016, 11:28
Цитата Сообщение от D1973 Посмотреть сообщение
Ну тогда вот так как-то можно:
а зачем нужен StringList?
у нас же есть Cols[] который типа TStrings и у него и так есть IndexOf
0
 Аватар для San22Rus
14 / 14 / 8
Регистрация: 07.03.2016
Сообщений: 152
06.09.2016, 11:34  [ТС]
D1973, огромное спасибо, теперь всё работает как надо, тему можно закрыть
0
Модератор
 Аватар для D1973
9954 / 6489 / 2461
Регистрация: 21.01.2014
Сообщений: 27,488
Записей в блоге: 3
06.09.2016, 12:13
Цитата Сообщение от qwertehok Посмотреть сообщение
а зачем нужен StringList?
qwertehok, а руки поперед головы шлепнули по клавиатуре. Конечно, без него спокойно можно обойтись... Вот так правильнее будет
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.Button2Click(Sender: TObject);
var i, k : integer;
begin
 k := Grid3.FixedRows;
 for i := Grid2.FixedRows to Grid2.RowCount - 1 do
  if Grid1.Cols[0].IndexOf(Grid2.Cells[0, i]) = -1
   then begin
         Grid3.Rows[k] := Grid2.Rows[i];
         Grid3.RowCount := Grid3.RowCount + 1;
         inc(k);
        end;
end;
0
06.09.2016, 12:45

Не по теме:

и от k можно спокойно избавится, считая что Grid3.RowCount в самом начале равно 2

0
Модератор
 Аватар для D1973
9954 / 6489 / 2461
Регистрация: 21.01.2014
Сообщений: 27,488
Записей в блоге: 3
06.09.2016, 13:03
Цитата Сообщение от qwertehok Посмотреть сообщение
и от k можно спокойно избавится, считая что Grid3.RowCount в самом начале равно 2
А если Грид без фиксированной строки, т.е. кол-во строк = 1? Или, наоборот, фиксированных строк 2, 3 и т.д.? Надо всякие извращения предусмотреть...

Добавлено через 5 минут
Не, ну можно, конечно, только как-то, ИМХО, громоздко выглядит...
Вот так, чтобы уж сразу и фиксированные столбцы учитывать
Delphi
1
2
3
4
5
6
7
8
9
10
procedure TForm1.Button2Click(Sender: TObject);
var i : integer;
begin
 for i := Grid2.FixedRows to Grid2.RowCount - 1 do
  if Grid1.Cols[Grid1.FixedCols].IndexOf(Grid2.Cells[Grid2.FixedCols, i]) = -1
   then begin
         Grid3.Rows[Grid3.RowCount - Grid3.FixedRows - 1] := Grid2.Rows[i];
         Grid3.RowCount := Grid3.RowCount + 1;
        end;
end;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.09.2016, 13:03

Сравнение двух ячеек из разных файлов
Здравствуйте! Есть 2 разных файла, в которых необходимо сравнить столбцы с номерами основных средств (ОС) и их субномерами (СНр). Файл...

Сравнение двух столбцов из разных файлов
Доброго времени суток! Не геракл в VBA, но возникла такая потребность: Есть 2 абсолютно одинаковые по структуре файла файл1.xls и...

Сравнение данных из двух разных файлов Excel
Добрый день, форумчане! До этого не имел дело с VBA. Начинаю только изучать. Начальство подкинуло такую задачку: Из определенной...

Сопоставление двух таблиц из разных файлов excel
Давно не работал с экселем, поэтому мозг немного отказывается решать следующую задачу Есть два файла xls. В первом - столбец с...

Сравнение двух столбцов из разных файлов и запись результатов в третий файл ( Apache POI )
Не могу разобраться в цикле записи результатов сравнения двух столбцов(в обоих по 1 листу) в третью таблицу. Как правильно построить...


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

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

Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru