по импорту CSV

Автор maxim, 8 октября 2014, 07:31

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

JohnSUN

Цитата: maxim от  8 октября 2014, 14:29
...чтобы документ запрашивал путь при открытии, напомните где это настраивается? Вот я захожу Сервис -> Настройки -> Вкладка События -> Документ создан.... , а дальше я вижу что можно присвоить макрос, но какой?
Цитата: JohnSUN от  8 октября 2014, 12:36и прописывать его в .setLinkUrl() для этого листа.
Нужно использовать FilePicker (если полностью, то он называется "Сервис com.sun.star.ui.dialogs.FilePicker")
Нужно написать свой простой макрос, что-то похожее на этот пример использования CreateUnoService
Только вместо print "выбран файл: "+fName будет
ThisComponent.getSheets().getByIndex(0).setLinkUrl(fName)
Ну, это в случае, если прилинкованный лист в шаблоне поставим самым первым ("нулевым по порядку"). Иначе в getByIndex нужно будет указать другой параметр.
Цитата: maxim от  8 октября 2014, 14:41
Но если нет, то как я понимаю можно восстановить всё формулами? Или нет?
Ну да... Что-нибудь вроде
=VALUE(SUBSTITUTE(SUBSTITUTE(Данные.K71&","&Данные.L71;"mm";"");"~";""))
Цитата: rami от  8 октября 2014, 15:09
Было бы интересно знать откуда берутся такие кривые файлы CSV? Наверно кто-то создаёт "красивые" таблицы с "шикарным" форматированием, а потом сохраняет в формат CSV и числа вида "50,0mm" воспринимаются как текст с последующей разбивкой по запятой, а в колонке "AREA" наверно была формула, значение которой передаётся в соответствии с настройками языка(с разделителем точкой).
Это, скорее всего, выходной файл какого-то 3D-редактора, приспособленного под конструирование корпусной мебели. Выгрузку в CSV делает какой-то плагин, который действительно пытается использовать для числовых значений системные настройки, а значения с размерных линий берёт как текст ("как пишится - так и слышется"  ;D )
Цитата: rami от  8 октября 2014, 15:09Нужно правильно создавать файл CSV , тогда не будет проблем с импортом
От maxim'а, похоже, тут уже мало что зависит. Дизайнер не пишет значения размеров - он просто растягивает ящик вправо-влево-вверх-вниз-вглубь, а размеры подставляет редактор. Плагин все данные по проекту тупо выгружает в файл. maxim, видимо, должен автоматизировать создание договора на изготовление мебели, требований на материалы и фурнитуру, счёт на оплату, заготвку акта выполненных работ и т.п.
Тут уж или плагин переписывать, или попытаться настроить 3D-редактор...
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

maxim

Цитата: rami от  8 октября 2014, 14:09Было бы интересно знать откуда берутся такие кривые файлы CSV? Наверно кто-то создаёт "красивые" таблицы с "шикарным" форматированием, а потом сохраняет в формат CSV и числа вида "50,0mm" воспринимаются как текст с последующей разбивкой по запятой, а в колонке "AREA" наверно была формула, значение которой передаётся в соответствии с настройками языка(с разделителем точкой). Нужно правильно создавать файл CSV , тогда не будет проблем с импортом, инче придётся много "работать ручками". maxim, а какие данные нужно импортировать? Может быть можно "выдернуть" только нужный "кусок" данных.

Эти файлы создаёт плагин из одной программы. Плагин просто выводит всю информацию из модели. Этот плагин англичанин написал, и мне трудно на английском с ними переписываться. Он сам тоже на форуме что то писал про замену запятых на точки в числах, но пока не понял ещё.
По поводу данных, мне действительно нужно только некоторые значения: Название, цвет, длина, ширина, глубина.

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





Цитата: JohnSUN от  8 октября 2014, 14:31Это, скорее всего, выходной файл какого-то 3D-редактора, приспособленного под конструирование корпусной мебели. Выгрузку в CSV делает какой-то плагин, который действительно пытается использовать для числовых значений системные настройки, а значения с размерных линий берёт как текст ("как пишится - так и слышется"  Смеющийся )
Цитата: rami от Сегодня в 15:09
Нужно правильно создавать файл CSV , тогда не будет проблем с импортом
От maxim'а, похоже, тут уже мало что зависит. Дизайнер не пишет значения размеров - он просто растягивает ящик вправо-влево-вверх-вниз-вглубь, а размеры подставляет редактор. Плагин все данные по проекту тупо выгружает в файл. maxim, видимо, должен автоматизировать создание договора на изготовление мебели, требований на материалы и фурнитуру, счёт на оплату, заготвку акта выполненных работ и т.п.
Тут уж или плагин переписывать, или попытаться настроить 3D-редактор...
Да вы правы, и кстати я вас хочу поблагодарить, вы мне ещё когда то давно очень помогли. В то время я использовал другой плагин (да и сегодня тоже) и я просто копировал в буфер обмена, а дальше в Calc вашим макросом. Вы его называли Мебель из Буфера обмена. Но тот плагин не учитывал направление текстуры. Со временем узнал побольше о формулах и смог сделать тоже самое без макроса, Но тперь хочу дальше сделать чтобы мне текстуру учитывать.

maxim

Установил сейчас Libre Office
Дааааа уж действительно лучше импортирует CSV  и  Вставляет в любой диапазон

Также хотел попробовать ваш макрос, но что то не реагирует никак. ни в ОО ни в LO

Пока LO делает всё как надо! Буду дальше пробовать.

maxim

Можно вопрос немного не по теме
В ОО была кнопка "Записать макрос", а в LO я её не вижу. Она есть или спрятана где-то?

rami

Цитата: maxim от  8 октября 2014, 16:45Также хотел попробовать ваш макрос, но что то не реагирует никак. ни в ОО ни в LO
Это чей? Если по ссылке что дал JohnSUN, то надо кое-что изменить.
Цитата: maxim от  8 октября 2014, 17:04В ОО была кнопка "Записать макрос", а в LO я её не вижу. Она есть или спрятана где-то?
В меню "Сервис" "Макросы" "Записать макрос". Ещё можно поставить кнопку в панели инструментов через меню "Сервис" "Настройка..."

tagezi

Цитата: maxim от  8 октября 2014, 18:04
Можно вопрос немного не по теме
В ОО была кнопка "Записать макрос", а в LO я её не вижу. Она есть или спрятана где-то?
Сервис -> Параметры -> Расширенные возможности
Нужно поставить галочку "Включить запись макросов (ограничено)"
После этого появится "кнопочка" Сервис -> Макросы -> Записать макрос
(x86_64) Kubuntu 16.04.3 - LibreOffice 6.0.2 / 6.1 alpha

maxim

Цитата: tagezi от  8 октября 2014, 17:20Сервис -> Параметры -> Расширенные возможности
Нужно поставить галочку "Включить запись макросов (ограничено)"
После этого появится "кнопочка" Сервис -> Макросы -> Записать макрос
Спасибо большое


Цитата: rami от  8 октября 2014, 17:17Это чей? Если по ссылке что дал JohnSUN, то надо кое-что изменить.
Я хотел ваш попробовать, посмотреть

rami

Цитата: maxim от  8 октября 2014, 17:49Я хотел ваш попробовать, посмотреть
Напишите подробней в чём проблема?

Сейчас посмотрел сколько раз загружены файлы: Копия Решение.ods — 9 раз, а ПриходРасход.csv — 5 раз, а должно быть одинаково потому, что данные из файла ПриходРасход.csv копируются в Копия Решение.ods , если нет файла, то и копироваться нечему. Да и путь файла нужно записать в макросе.

maxim

а-а тогда извините, это моя невнимательность, я путь не указал в файле

maxim

Путь указал, данные загружаются, но не корректно
Но в целом я идею понял. Интересно очень и удобно, не нужно каждый раз путь указывать
Я как то так и представлял импорт из CSV в идеале. Я подобное видел на видео для Excel. Для большинства мне кажется - это отличный вариант. Для меня лично пока не знаю, потому что мне путь всё равно указывать надо. Мой плагин который экспортирует в CSV, делает это всегда по умолчанию в ту папку где мой очередной проект и под тем же именем  :-\
Я на форуме разработчика плагина попросил чтобы он помимо экспорта в файл csv, сделал ещё так что бы в буфер обмена всё копировалось. Вот если ответит и сделает так, то в Libre Office можно даже без макросов.  Libre Office запоминает последние настройки импорта csv, а Open Office только когда импортируешь лист из файла...
Если нет, то по всей видимости мне нужно с макросами разбираться

rami

Цитата: maxim от  8 октября 2014, 19:39Путь указал, данные загружаются, но не корректно
Это потому что у нас с вами разные языковые и системные настройки. Измените фильтр в макросе на: FilterOptions="44,34,76,1,,1037"Посмотрим, угадал ли я ваши настройки на этот раз ;D

maxim

Цитата: rami от  8 октября 2014, 20:12Посмотрим, угадал ли я ваши настройки на этот раз Смеющийся
Да точно, работает отлично! Класс!

maxim

Я проанализировал тему и хочу подвести небольшие итоги:

Импортировать CSV можно разными путями, в зависимости задачи:
1. Если к импортированным данным не будут привязаны формулы, то лучшим способом будет импорт через Вставка → Лист из файла...
Конечно можно легко создать новый документ

2. Если вы хотите импортировать CSV в готовый лист и в определённое место, то здесь помогут макросы.

- Один из макросов от rami, отличный вариант если вам не нужно постоянно задавать путь к исходному файлу (он просто обновляется)

- Ещё один вариант от JohnSUN где можно выбирать путь к новым исходным данным
Цитата: JohnSUN от  8 октября 2014, 12:36Я бы все-таки посмотрел в сторону Вставка-Лист из файла... с флажком Связь с файлом. Тогда один раз настроив фильтр и сохранив книгу в шаблоне, можно было бы по событию Документ создан спрашивать путь к новым исходным данным (стандартный диалог открытия файла) и прописывать его в .setLinkUrl() для этого листа.

3. Можно вставить данные из буфера обмена в любом месте документа, сохраняя связь с формулами, но это далеко не всем будет удобно. Если вставлять из буфера обмена, то Libre Office запоминает ваши настройки и вам не придётся каждый раз настраивать параметры импорта (в OO нет).

Для меня лично будет наиболее удобен вариант от JohnSUN или через буфер обмена если конечно у меня вообще появиться возможность копировать в буфер обмена исходные данные

Но я хочу ещё вопрос задать. А формулы действительно никак нельзя связать с новым созданным листом? При этом пусть лист у нас будет создаваться всегда в насале и иметь одно и то же название каждый раз.

rami

На данный момент у вас есть хороший пример импорта, но применить его нельзя из-за кривого файла CSV. Главная проблема — это кривой файл CSV. Автор плагина(англичанин) вряд ли думал о российских настройках, поэтому у вас возник конфликт разделителей — часть данных с точкой, другая часть с запятой. Есть три пути:
1) просить разработчика учесть другие настройки (если сделает, то не скоро)
2) изменить свои настройки разделителей (самое простое, но может возникнуть конфликт со старыми документами)
3) исправлять "кривой" файл макросами и формулами
Цитата: maxim от  9 октября 2014, 10:00Но я хочу ещё вопрос задать. А формулы действительно никак нельзя связать с новым созданным листом? При этом пусть лист у нас будет создаваться всегда в насале и иметь одно и то же название каждый раз.
Связать формулы с новым(ещё не существующим) листом нельзя. Но JohnSUN "сделал предложение от которого нельзя отказаться" — импортируем данные и устанавливаем связь, а когда нужно  изменяем адрес связи со старого на новый и просим обновить связь.

JohnSUN

Цитата: maxim от  9 октября 2014, 11:00
А формулы действительно никак нельзя связать с новым созданным листом?
Кто-то из нас не понимает. Наверное, я.
В каком смысле "с новым созданным листом"? Речь ведь шла о шаблоне для пачки похожих документов с разными источниками данных?
Я и предложил вставить лист из файла один раз, а потом только менять путь к источнику данных. Хоть макросом, хоть через Правка - Связи. При этом будут меняться только данные этого листа, все формулы на других листах обязаны остаться рабочими. Ну, при условии, конечно, что они изначально были записаны правильно.
То есть лист с данными не "новый", а всегда "старый"

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