Как получить данные из .ini файла в ячейку calc файла

Автор And589, 1 апреля 2015, 06:04

0 Пользователи и 1 гость просматривают эту тему.

And589

Можно ли в Libreoffice по формуле или еще как-нибудь железно, не через макросы или еще что-то
1) Чтобы в ячейке всегда появлялось значение из .ini файла определенной секции и имени
2) Чтобы в libreoffice когда открыт в этой ячейки из .ini файла данные изменялись при изменении в .ini файле

VlhOwn

С точки зрения Calc ini-файл - это обычный плоский текстовый (не odt) файл, не имеющий никакой внутренней разметки.
Соответсвенно - "не через макросы или еще что-то" - нельзя.

JohnSUN

... хотя, если очень извратиться, то, конечно, можно...
Вот только вопрос - а на пуркуа?

Суть изврата заключается именно в этой мысли -
Цитата: VlhOwn от  1 апреля 2015, 08:46
С точки зрения Calc ini-файл - это обычный плоский текстовый (не odt) файл
Мы не раз уже обсуждали, как поступать с "обычными плоскими текстовыми файлами". Только речь обычно шла о csv-файлах. Не раз говорилось, что самый простой способ выдрать данные из такого файла - это присобачить его к текущей книге с помощью Вставка-Лист из файла и не забыть установить галочку Связь.
Не соглашусь с тезисом
Цитата: VlhOwn от  1 апреля 2015, 08:46файл, не имеющий никакой внутренней разметки.
Какая-никакая разметка все-таки есть - знаки равенства, разделяющие имя параметра и его значение, и квадратные скобки, выделяющие имя секции. Знаки равенства при импорте файла вполне могут разделить строки на две колонки.
То есть, нужно всосать данные из ini-файла в дополнительный (вспомогательный) лист, который можно и скрыть.
Затем идет муторная работа по конструированию формулы - "дай значение по имени параметра". Простой VLOOKUP мог бы помочь, если бы была гарантия, что параметры с одинаковыми именами не попадаются по несколько раз в разных секциях. Поэтому нужно помучиться с поиском нужной секции (через MATCH, например)  и подсовыванием в VLOOKUP диапазона ячеек уже с найденного заголовка секции (хоть INDIRECT, хоть OFFSET - по-барабану, и то, и то достаточно трудоёмко).
И в конце концов останется всего одна проблема - как обновить связь с исходным ini-файлом, если его содержимое внезапно изменилось.
И вся эта возня - ради чего?..
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

And589

#3
ЦитироватьИ вся эта возня - ради чего?
Просто все данные хранятся в .ini файле, а в calc формулы, в calc хранить данные не очень неудобно.
ЦитироватьИ в конце концов останется всего одна проблема - как обновить связь с исходным ini-файлом, если его содержимое внезапно изменилось.
Это тоже непонятно как сделать, как и то, как сделать, чтобы при запуска calc файла не предлагал обновить, а автоматически делал.

kompilainenn

Цитата: And589 от  1 апреля 2015, 19:03все данные хранятся в .ini файле, а в calc формулы, в calc хранить данные не очень неудобно.
это эпик-вин просто. давно стало данные хранить в кальке неудобно, а в спец-файлах для настройки - крайне удобно?
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

And589

Цитироватьэто эпик-вин просто. давно стало данные хранить в кальке неудобно, а в спец-файлах для настройки - крайне удобно?
Как-то так получилось. Я раньше не программировал и скрипты не писал, но вроде calc тяжелей и медленней, чем стандартные небольшие файлы.

Можно еще вопрос, чтобы тему не создавать. Например есть список параметров в буфере обмена
111
222
333
444
555
Если добавлять в calc, он предлагает вопрос с разделением и еще что-то, есть ли готовые внутренние команды для calc, например
111 calc перенос строки
222 calc перенос строки
333 calc перенос строки
444 calc перенос строки
555
Чтобы сразу вставилось тоже самое, но в столбик

JohnSUN

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

And589

#7
По другому. Например есть лист, вставка лист из файла, формат .ini. В calc документе лист имеет параметры с .ini файла. Но вопрос, почему вручную он обновляется, но автоматически предложено только серым цветом, и не выбирается, обновлять в определенно время, почему только вручную через Правка - Связи?

And589

Скажите пожалуйста, чисто оценочно, в calc есть кнопка Правка - Связи - Обновить - Закрыть. Можно ли макросом как-то прописать нажатие этого периодически, или для списка и кнопки нет ID и макросом нельзя прописывать нажатие кнопок внутренних окон?

JohnSUN

Стоп! Макросом?
Цитата: And589 от  1 апреля 2015, 06:04
...или еще как-нибудь железно, не через макросы или еще что-то
Цитата: VlhOwn от  1 апреля 2015, 08:46
Соответственно - "не через макросы или еще что-то" - нельзя.
Что-то изменилось в постановке задачи?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

rami

Цитата: JohnSUN от  8 апреля 2015, 20:17Что-то изменилось в постановке задачи?
Да так, мелочи, было железное условие, а стало резиновое ;D

JohnSUN

Шикарно!
От значений из этого самого ini-файла зависят какие-то формулы на листе. Эти значения должны измениться сразу же после перезаписи ini-файла? Или могут потерпеть до "любого действия" на листе?

Почему спрашиваю... Сам макрос чтения файла и возврата указанного значения из секция/параметр элементарен. А вот механизм запуска может быть разным - от элементарного до супер-пупер навороченного (и при этом не всегда работающего  ;D)
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

And589

#12
Уже понял, что такой вариант неправильный. Если на связи (файл как источник на внешние данные с обновлением с 1 секунду) много ячеек, много памяти использует. Что за дикость. Если есть лист, где автоматически загружается таблица из файла, не больше пары десятков ячеек. Но LO постоянно в таком случае увеличивает расход памяти. Т.е. вообще постоянно, не выгружая прежние данные. Допустим, обновление каждую секунду по 30-50КБ увеличивается объем LO в памяти. Это же неправильно, и то что из файла принимаются и перезаписываются данные, даже если они те же без изменения и то, что постоянно увеличивается память.
Вопросы в теме не те начал задавать. Вот 2 конкретных вопроса.

1) Зачем так сделано? Можно ли как-то сбрасывать или настроить, чтобы прошлые данные не находились в памяти при постоянной связи с обновлением в 1 секунду?
2) Как называется функция, которая считывает в определенной ячейке первое значение и после изменения ячейки уже не переписывает свое значение. Например A1 = A2 по формуле. A2 без значения, потом A2 = 10, A1 тоже = 10, если A2 стало = 20, то A1 останется = 10. Не нахожу, вроде такая функция была в LO.

kompilainenn

у вас в ЛО постоянно обновляются данные на основе связанного документа, в котором в свою очередь данные тоже обновляются? да еще с интервалом в 1 секунду? Чего же вы хотите от простого офисного пакета, который имхо на такое просто не рассчитан?
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

And589

Цитироватьу вас в ЛО постоянно обновляются данные на основе связанного документа, в котором в свою очередь данные тоже обновляются? да еще с интервалом в 1 секунду? Чего же вы хотите от простого офисного пакета, который имхо на такое просто не рассчитан?
Все так, кроме одного. Конкретно данные в принимаемом файле не изменялись. А память все равно идет, уже больше гигабайта дошла. Даже после сохранения не сбрасывается.

А вышеописанная функция есть ли в Calc, кажется была, но не уверен, и найти не могу, по описаниям всех функций иду, что понял из описаний, не нашел нужной функции.