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

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

30 Октябрь 2020, 13:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Вы можете задать вопрос по LibreOffice или Apache OpenOffice без регистрации, используя форму
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1 2 »   Вниз
  Печать  
Автор Тема: Копировать данные из разных книг  (Прочитано 8088 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Tin
Участник
**
Offline Offline

Сообщений: 28


« Стартовое сообщение: 27 Январь 2016, 00:12 »

Добрый день. Я совсем недавно столкнулась с Libre и пока плохо разбираюсь в UNO. Столкнулась я с такой проблемой: нужно выделить диапазон ячеек (до последней заполненной) в одной книге и скопировать его в другую. Цикл, который определяет последнюю заполненную ячейку я написала, а вот связать две книги у меня никак не получается. Застопорилась вся работа. Помогите, пожалуйста!
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #1: 27 Январь 2016, 07:26 »

Добро пожаловать на форум!
Скорее всего, цикл писала зря - последнюю заполненную ячейку в Calc'е ищут немножко иначе...
Расскажи, пожалуйста, чуть больше о самой задаче: сколько приблизительно файлов нужно собрать в общую книгу, какого они типа, в одной ли папке лежат или каждый нужно искать по всему диску (и такое бывает), как часто это нужно делать (раз понадобился макрос, значит регулярно - но насколько часто?)... В один лист нужно вставлять данные одной сплошной таблицей или каждый файл нужно сделать отдельным листом? Книгу-результат нужно сохранять в одно и то же место с одни и тем же именем (обновлять одну и ту же книгу)? Или нужно будет их накапливать в каком-то каталоге одну за другой (каждый раз создавать новую по шаблону)?
А еще лучше было бы получить образцы данных.
Не могла бы ты свернуть в zip-архив папку с несколькими из исходных файлов и заготовку своей книги-результата и прикрепить к следующему письму (ниже окна редактирования сообщения есть кнопка "Выберите файл")?
Записан

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

Сообщений: 28


« Ответ #2: 27 Январь 2016, 11:33 »

Здравствуйте. Задача в следующем: отдельной книгой есть прайс, из него нужно копировать значения в базу данных, создав новый лист (название задается пользователем). Лист прайса один. Файлы, с которыми работаю, я прикрепляю. OSTATKI - это прайс, из которого копирую данные. Название файла каждый раз меняется. Voratex - база данных, в которую копируются данные с прайса. Макрос пишу именно в ней. В начале там уже написан кусочек на открытие прайса, а вот дальше я подвисла(

* Voratex_Etalon (1).ods (1611.33 Кб - загружено 10 раз.)
* OSTATKI_18-01-16.xls (259.5 Кб - загружено 10 раз.)
Записан
Tin
Участник
**
Offline Offline

Сообщений: 28


« Ответ #3: 27 Январь 2016, 11:40 »

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

Файл каждый раз один, типа .xls. На счет одной папки нужно уточнить, но в макросе на открытие книги я дала возможность пользователю самому указывать адрес расположения и имя книги на всякий случай. На счет частоты тоже не в курсе, вроде как каждый месяц, но возможно и чаще.

Пример скопированного диапазона есть на листе 2016-01-11, правда там он уже немного изменен. Конечный результат будет как на листе 2016-01-11_prom-ua. Наверное, проще было бы сразу все копировать на итоговый лист, но пользователь попросил, чтобы промежуточный лист сохранялся (зачем-то ему это нужно).
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #4: 27 Январь 2016, 12:27 »

Мне очень жаль, но Voratex дошёл без макросов... Так что посмотреть, как это всё было задумано, не получилось.
Забавно... Очень похожую задачу решал очень давно (на этой неделе полторы тысячи дней исполняется - какой никакой, а юбилей). Задача похожа, хоть и не очень точно совпадает... Всё равно, стоит этот CollectData скачать - некоторые процедуры из него можно будет использовать "живьём". Например функцию CopySpreadsheetTransferableContent или getOrCreateSheet. Или просто подсмотреть, как ищется номер последней заполненной строки:
Код:
GlobalScope.BasicLibraries.LoadLibrary("Tools") ' Загрузить библиотеку "Tools"
...
lastTargetRow = GetLastUsedRow(oSheet)

Сразу хочу предупредить про "грабли", которые обычно подворачиваются при копировании данных из книг .ods/.xls: к сожалению, исходный прайс не всегда бывает "просто данными", иногда отправитель оставляет в нём какие-нибудь формулы... При копировании в новую книгу эти формулы могут просто перестать работать, начать выдавать невнятные ошибки из-за потери связи с исходными данными.
« Последнее редактирование: 27 Январь 2016, 12:34 от JohnSUN » Записан

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

Сообщений: 28


« Ответ #5: 27 Январь 2016, 12:37 »

При копировании в новую книгу эти формулы могут просто перестать работать, начать выдавать невнятные ошибки из-за потери связи с исходными данными.

В прайсе формул не будет, там только данные. Но на будущее предупреждение может быть актуальным)

Очень похожую задачу решал очень давно

Я, к сожалению, очень сильно не дружу с английским, но попробую разобраться)

Вот то, что у меня сейчас написано в макросе.
Код:
Sub Main
Dim oDesk as Object
Dim oDoc as Object
Dim oFile as String
Dim oUrl as String
Dim oUrlTemp as String
Dim I as String
Dim NPrice as String
oDesk = createUnoService ("com.sun.star.frame.Desktop")
'Измените имя файла на такое, которое Вы можете написать
I = InputBox ("Введите адресс расположения файла", "Открытие прайса")
NPrice = InputBox ("Введите имя файла", "Открытие прайса")
oFile = I + "\" + NPrice + ".xls"
oUrl = convertToUrl (oFile)
If fileExists (oFile) Then
oUrlTemp = oUrl
Else
MsgBox "Файл не существует"
Exit sub
End If
oDoc = oDesk.loadComponentFromURL (oUrlTemp, "_blank", 0, Array() )
rem _________________________________________________

End Sub
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #6: 27 Январь 2016, 12:40 »

Я как раз пытаюсь отыскать здесь, на этом форуме, ещё один макрос... Должен пригодиться. Там перенос данных с листа на лист по наименованиям (заголовкам) колонок...
Ага, код Main увидел... А сортировка промежуточной копии в _prom-ua еще не готова?
« Последнее редактирование: 27 Январь 2016, 12:41 от JohnSUN » Записан

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

Пол: Мужской
Сообщений: 3 024


iMac, LibreOffice и Apache OpenOffice


« Ответ #7: 27 Январь 2016, 13:00 »

Вот то, что у меня сейчас написано в макросе.
У вас там написано "многа букав". JohnSUN не просто так спрашивал где находятся файлы, если они всегда в одной папке, то получить их проще с помощью FilePicker, а не InputBox
Записан

Tin
Участник
**
Offline Offline

Сообщений: 28


« Ответ #8: 27 Январь 2016, 13:02 »

сортировка промежуточной копии в _prom-ua еще не готова

у-у, привыкла писать все по порядку)

Там перенос данных с листа на лист по наименованиям (заголовкам) колонок...

Было бы хорошо, но у меня проблема по большей части именно в обращении к книгам(
Записан
Tin
Участник
**
Offline Offline

Сообщений: 28


« Ответ #9: 27 Январь 2016, 13:04 »

У вас там написано "многа букав". JohnSUN не просто так спрашивал где находятся файлы, если они всегда в одной папке, то получить их проще с помощью FilePicker, а не InputBox

Не знаю, потому как макрос пишу не для себя. Вполне вероятно, что файлы будут находится в разных местах. Поэтому я даю возможность пользователю самому указать расположение файла. Кусочек, который я привела, вполне работает, можете проверить, и пока что меня устраивает.
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #10: 27 Январь 2016, 13:19 »

Ну, расположение файла или его открытие - это как раз не проблема... В элементах управления офиса есть даже специальный прибамбас "Выбор файла", а в стандартной библиотеке Tools специальная функция OpenDocument...

Ты лучше вот о чем расскажи - формулы в _prom-ua, все эти VLOOKUP'ы - так и останутся? Или подменишь на вычисленные значения? Курс для колонки T будешь спрашивать в диалоге или будешь заранее писать в отдельную ячейку? Каким образом задаются коэффициенты для розницы? Они везде разные, системы не улавливаю...

P.S. А перенос столбцов все-таки нашёл. Но у тебя в буферном листе и в итоговом названия колонок разные. Так что тоже "вживую" использовать не получится, придется править...
« Последнее редактирование: 27 Январь 2016, 13:21 от JohnSUN » Записан

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

Сообщений: 28


« Ответ #11: 27 Январь 2016, 14:01 »

Ты лучше вот о чем расскажи - формулы в _prom-ua, все эти VLOOKUP'ы - так и останутся? Или подменишь на вычисленные значения? Курс для колонки T будешь спрашивать в диалоге или будешь заранее писать в отдельную ячейку? Каким образом задаются коэффициенты для розницы? Они везде разные, системы не улавливаю...

Вычисления тоже через макрос сделаю. Вычисление цены как раз самый сложный момент, потому как зависит от скидки и наценки. Скидка разная для разных сезонов, а вот наценка позапаристей. Она зависит от диаметра шины и от бренда. Есть наценка для разных диаметров, но при этом на определенные бренды и разные виды их шин наценки тоже разные. Тут скорей всего буду пробегаться циклом и делать ветвление, а значения скидок и наценок вытащу на Эталон или даже на еще один отдельный лист. Если есть вариант, как можно это попроще оформить, то подскажите, пожалуйста.
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #12: 27 Январь 2016, 14:44 »

вытащу ... на еще один отдельный лист
Это, пожалуй, самое правильное. Эталон и так раздут слишком сильно, еще и коэффициенты туда совать не резон.

Насколько я понял после разглядывания показанных файлов, вся задача формулируется так: по присланному прайсу сформировать таблицу пригодную для выгрузки в интернет-магазин (Google AdWords, Яндекс.Директ и т.п.).
То есть:
1. Просто конвертируем данные из глупо оформленного прайса в плоскую таблицу, дополняя сведениями из справочника Эталон и - скорее всего - еще каких-то (валют, курсов, наценок/скидок...)
2. Скорее всего, "раз в месяц" - слишком оптимистичный прогноз: раз речь идёт об интернете, то это будет или "раз в день" или вообще "несколько раз в день". А это в свою очередь означает, что пользовательский интерфейс обязан быть примитивным до ужаса, а значит программисту придётся корячиться будь здоров. Мои соболезнования...
3. Сейчас заказчик свои хотелки сформулировал совершенно не задумываясь о последствиях, по ходу разработки придётся его убеждать, что многое сделать, как он хотел изначально, просто не получится. Например, нельзя сохранять всю эту ерунду в одной книге... Уже сейчас, всего с двумя прайсами Vortex тянет на полтора мегабайта. Каждый новый прайс будет утяжелять его ещё приблизительно на половину мегабайта... Очень скоро начнутся жуткие тормоза. Поэтому лучше бы всё-таки сохранять результат в отдельный файл, не наращивать книгу лист за листом.

Окончательную таблицу будут выгружать в csv (xml? xls?) или будут закидывать на сайт напрямую, через обычный копи-паст? Впрочем, при любом варианте было бы желательно избавиться от формул в окончательном листе, одни только строки и числа...
Записан

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

Сообщений: 28


« Ответ #13: 27 Январь 2016, 18:35 »

Окончательную таблицу будут выгружать в csv (xml? xls?) или будут закидывать на сайт напрямую, через обычный копи-паст? Впрочем, при любом варианте было бы желательно избавиться от формул в окончательном листе, одни только строки и числа...

Да я вот тоже думала сделать сохранение на отдельный лист, осталось донести это заказчику) На счет того, как она дальше будет использоваться я ничего не знаю, но в любом случе все вычисления вгоню в макрос)
Записан
Tin
Участник
**
Offline Offline

Сообщений: 28


« Ответ #14: 27 Январь 2016, 21:04 »

А перенос столбцов все-таки нашёл.

Я посмотрела этот код, но не совсем его поняла... Получается мне, чтобы переходить между книгами нужно создавать переменные типа Object (или Worcbook?) и оперировать ими?
Записан
Страниц: 1 2 »   Вверх
  Печать  
 
Перейти в:  

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