Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

29 Июнь 2017, 01:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Помогите с периодическим обновлением таблицы  (Прочитано 469 раз)
0 Пользователей и 1 Гость смотрят эту тему.
erih2017
Новичок
*
Offline Offline

Сообщений: 2


« Стартовое сообщение: 12 Апрель 2017, 13:48 »

Добрый день уважаемые гуру опенофиса .
Суть проблемы:    есть некий файл, обычная таблица (20 столбцов) в ods на три-пять тысяч строк, каждый месяц поступает новый файл ods, нужно этот файл сравнить с текущим по уникальности двух-трех столбцов , и перенести новые записи в наш текущий файл . Писал макрос да он не работает , от слова совсем , подскажите правильный путь, пожалуйста.
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 280


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #1: 12 Апрель 2017, 14:06 »

Добро пожаловать на форум!
С чем помочь-то? "Оживить" макрос или рассказать возможные пути слияния таблиц?
В первом случае хотелось бы увидеть книгу с образцами данных (самое муторное в таких задачах - это высосать из пальца набор тестовых данных, написать для них работающий код и потом долго и нудно вносить в него изменения, потому что поступают всё новые и новые уточнения)
Во втором случае - как насчет того, чтобы просто дописать новые данные ниже старых, добавить колонку с функцией COUNTIFS(<от этой строки и до самого верха>) и применить стандартный фильтр по условию "запись встретилась только один раз"?
Формула будет похожа на что-то в таком роде:
Код:
=COUNTIFS($A$1:A3;A3;$B$1:B3;B3;$C$1:C3;C3)
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
economist
Ветеран
*****
Offline Offline

Сообщений: 564


« Ответ #2: 12 Апрель 2017, 14:36 »

Путей много, но навскидку - или простой (можно сказать "учебный") построчный макрос с 2-мя циклами, или умный макрос (через обмен Array-Range) или через базу данных Base+SQLite, на языке SQL (и его потрясающей возможностью игнорить дубликаты при INSERT и очень быстро работать с индексами, примерно в 5 раз быстрее самого Calc).

Простой макрос работает с объектами вида "ячейка", и желательно "для скорости" вставить всё из месячного файла в основной, на лист 2. Чтобы всегда знать номер первой пустой строки в Основном файле - можно написать, скажем в ячейку С1 формулу типа =COUNT(A2:A65535)+1. Меньше кода - больше формул, это лозунг для "учебных" примеров.  

Значит "три столбца", например дата+время+ФИО, - дают уникальный идентификатор, при ненахождении которого в базе - строка должна добавляться.

Тогда делаем в обоих файлах скрытый столбец-индекс с формулой вида =B2&C2&D2 и дальше простой вложенный цикл (код не проверял, набрано на коленке, специально на VBA, чтобы было проще понять):

Код:
   
Option VBASupport 1
Option Compatible

Sub MergeMonthTableToMainTableUnicalRows

for each m in sheets(2).[A2:A65535]
  if m.value="" then exit for
  emptyStr=[C1]
  for each b in Sheets(1).[A2:A65535]
    if b.value="" then exit for
    if m.value=b.value then
      Cells(emptyStr,1)=m: Cells(emptyStr,2)=m.offset(0,1): Cells(emptyStr,3)==m.offset(0,2)
      'конечно, это нужно делать через Range(Cell1, Cell2)
      exit for
    end if
  next b
next m
end sub
« Последнее редактирование: 12 Апрель 2017, 14:43 от economist » Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
erih2017
Новичок
*
Offline Offline

Сообщений: 2


« Ответ #3: 13 Апрель 2017, 17:09 »

спасибо, уважаемые. оба совета оказались очень полезны, попробую применит их на практике . Еще раз очень благодарю!
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!