cro-logo      
Добро пожаловать, Гость. Пожалуйста, выберите Вход или Регистрация

 
 
  ГлавнаяСправкаПоискВходРегистрация  
 
Страниц: 1 2 
Послать Тему Печать
Загрузка данных из Exel (Прочитано 1 575 раз)
Zuluss
Бета-тестер
Вне Форума


Старинный пользователь
Кронос

Сообщений: 2 368
Санкт-Петербург
Re: Загрузка данных из Exel
Ответ #15 - 13.07.2018 :: 01:30:52
 
Цитата:
Тогда не понимаю в чем дело, может быть подскажите?
Что не так?

Как бы Вам помягче ответить?!
Почти всё не так.
Найдите в файле помощи раздел "Описание структурированного текстового файла" и посмотрите что и как должно быть.
Цитата:
"ООО ""ННриса"""/14/00000949/""Престиж Клюква""/0,500/120/05.07.2018

На приложенных скринах ничего не разобрать, но по содержанию должно быть примерно так:
++ НН/02 ООО "ННриса"/03 00000949/04 "Престиж Клюква"/05 0.500/06 120/07 05.07.2018/++ КК/
Наверх
 
 
IP записан
 
Nat_m
Пользователь
**
Вне Форума


Я люблю этот Форум!

Сообщений: 25
Re: Загрузка данных из Exel
Ответ #16 - 13.07.2018 :: 12:16:41
 
Zuluss писал(а) 09.07.2018 :: 22:47:44:
1. Структурированный текстовый файл может потребоваться для банка со сложной структурой, т.е. при загрузке данных во множество баз связанных с корневой. В других случаях он не нужен.
2. Создать структурированный файл можно и без макросов, путем вставки дополнительных столбцов и указанием в них множественных групп для различных баз, с соответствующей настройкой таблицы импорта. Файл сохраняется с разделителями табуляции, которая потом удаляется в текстовом редакторе.
3. Многие пользуются другой возможностью. Создают промежуточную базу или банк, импортируют туда весь файл excel и затем разносят данные с использованием формул или таблиц обмена в разные базы.

Спасибо, работаю по 3ему варианту. Получается красиво)
Наверх
 
 
IP записан
 
iLuhins
Опытный пользователь
***
Вне Форума



Сообщений: 63
Re: Загрузка данных из Exel
Ответ #17 - 13.07.2018 :: 12:17:38
 
Zuluss писал(а) 09.07.2018 :: 22:47:44:
3. Многие пользуются другой возможностью. Создают промежуточную базу или банк, импортируют туда весь файл excel и затем разносят данные с использованием формул или таблиц обмена в разные базы.

А чуть подробнее можно? Не хотелось бы прибегать к поэтапному импорту (вначале макрос в Excel для подготовки УФОД, затем импорт). Формат Excel на другой тоже нет возможности поменять.
Наверх
 
 
IP записан
 
Zuluss
Бета-тестер
Вне Форума


Старинный пользователь
Кронос

Сообщений: 2 368
Санкт-Петербург
Re: Загрузка данных из Exel
Ответ #18 - 13.07.2018 :: 13:46:47
 
Цитата:
А чуть подробнее можно?

Подробнее насколько?
К примеру, поступают регулярно файлы xls с однотипной структурой, данные из которых необходимо импортировать в банк.
Создаем в режиме импорта из файлов внешнего формата базу со структурой взятой из файла xls. В структуре банка прописываете формулы, которые разносят данные из этой промежуточной базы в нужные Вам базы, со статусом обязательная. Это однократная первоначальная настройка.
Идете снова в импорт. Устанавливаете ассоциацию полей в промежуточной базе и файле xls и импортируете данные. Сохраняете этот режим (настройки импорта).
Затем можно удалять данные из промежуточной базы. Можно также предусмотреть еще одно поле и в формулах устанавливать отметку о произведенном импорте, потом анализировать ее и принимать решение об обработке.
Можно формулы по разносу прописать в выходных формах и запускать их после импорта.
Если есть проблемы с изменением структуры банка для добавления новой базы, можно создать отдельный банк, в нем промежуточную базу и после импорта в нее данных производить межбанковский обмен по таблицам обмена или с использованием структурированного текстового файла.
Наверх
 
 
IP записан
 
iLuhins
Опытный пользователь
***
Вне Форума



Сообщений: 63
Re: Загрузка данных из Exel
Ответ #19 - 13.07.2018 :: 20:41:52
 
Понятно, вручную мы так и делаем. Как это сделать из Луа?
Наверх
 
 
IP записан
 
Zuluss
Бета-тестер
Вне Форума


Старинный пользователь
Кронос

Сообщений: 2 368
Санкт-Петербург
Re: Загрузка данных из Exel
Ответ #20 - 13.07.2018 :: 21:09:14
 
Цитата:
вручную мы так и делаем
...
Не хотелось бы прибегать к поэтапному импорту (вначале макрос в Excel для подготовки УФОД, затем импорт)

Интересно.
А зачем тогда спрашивать, да ещё и подробнее, если все уже используется?! И это уже не макрос в xls для подготовки УФОД.
Что Вы хотите от Lua?
Можно делать то же самое.
Можно в элемент "Текст" вставлять данные из xls и парсить их.
Наверх
 
 
IP записан
 
iLuhins
Опытный пользователь
***
Вне Форума



Сообщений: 63
Re: Загрузка данных из Exel
Ответ #21 - 20.07.2018 :: 19:11:32
 
Я хочу от Луа, чтобы он (или она?  Подмигивание ) делали за меня всю рутинную работу.

Нашел решение использовать библиотеку tluaCOM.cpp.
Все работает, но если лист в Excel имеет русское название происходит ошибка "исключение tluaCOM.cpp,398".
Код:
...for _, _sheet in ipairs(settings.workbook.sheets) do
	MsgBox("Получение базы" )
	local base = bank:GetBase(_sheet.target_base)
	...

	--"Выполнение запроса, имя листа ".._sheet.name)
	local res, errmsg = DBExec("select * from [".._sheet.name.."$]")
	 


Может кто знает как победить?
encode decode не подходят.
Наверх
 
 
IP записан
 
Zuluss
Бета-тестер
Вне Форума


Старинный пользователь
Кронос

Сообщений: 2 368
Санкт-Петербург
Re: Загрузка данных из Exel
Ответ #22 - 20.07.2018 :: 22:45:38
 
Из приведенного куска кода не видно способа  получения объекта DBExec.
Вы подключаетесь через dbConnect?
Если так, то в SQL запросах всегда были проблемы с кодировками.
Если Вы получаете все таблицы перебором (workbook.sheets), то зачем делать запросом?
Находите крайние столбцы и колонки и перебираете их, с получением всех данных.
Наверх
 
 
IP записан
 
iLuhins
Опытный пользователь
***
Вне Форума



Сообщений: 63
Re: Загрузка данных из Exel
Ответ #23 - 20.07.2018 :: 23:27:32
 
Прилагаю файл с кодом. Изначально это был скрипт для планировщика. Он еще не полностью отлажен, споткнулся на указанной проблеме. Параметры передаются через файл с настройками, в нем как раз и указывается имя листа.

Сами данные на русском языке загружаются нормально, проблема только с названием листа. Хотелось бы сделать универсальный код, а не перебирать листы, потому что загружать необходимо не все, а выборочно.
Наверх
 

luacom.txt (7 KB | 34 )
 
IP записан
 
Zuluss
Бета-тестер
Вне Форума


Старинный пользователь
Кронос

Сообщений: 2 368
Санкт-Петербург
Re: Загрузка данных из Exel
Ответ #24 - 21.07.2018 :: 00:49:16
 
Цитата:
... проблема только с названием листа...

Через ADOdb эта проблема не только в xls.
Даже на чтение имен таблиц в в аксессе и dbf эта проблема существует.
Надо было в драйвере ADOdb устанавливать кодировку. Сейчас уже не помню, но вроде UTF-8.
Наверх
 
 
IP записан
 
Zuluss
Бета-тестер
Вне Форума


Старинный пользователь
Кронос

Сообщений: 2 368
Санкт-Петербург
Re: Загрузка данных из Exel
Ответ #25 - 21.07.2018 :: 19:47:06
 
К сожалению я не являюсь обладателем версии с работающим COM модулем и "серийником", позволяющим его использовать, и не могу полноценно все проверить.
Была проведена проверка с автономной версией Lua и подключенной библиотекой luacom.
У подключения через ADODB есть проблемы с кодировками в SQL запросах и в выдаче наименований листов.
У непосредственного подключения через luacom.CreateObject("Excel.Application") тоже проблемы с получением кириллицы.
Поэтому можно предложить следующие варианты:
1. переименованием листов в латиницу, используя COM или vbs/vba;
2. Использованием только vbs/vba для извлечения данных. Работает хорошо;
3. Конвертировать листы в XML или HTML и парсить их;
4. Сохранять листы в tab или csv и парсить их;
5. В специально созданном банке типа "Excel" подменять файлы и обращаться к банку.
Варианты этим не исчерпываются.
Наверх
 
 
IP записан
 
iLuhins
Опытный пользователь
***
Вне Форума



Сообщений: 63
Re: Загрузка данных из Exel
Ответ #26 - 26.07.2018 :: 09:02:34
 
Проблема с названиями на русском решена. Решение оказалось из области комического Улыбка
Спутало меня то, что все сказали о проблемах с русской кодировкой в запросах и я искал в этом направлении. Хотя подключение этого же листа в виде банка типа Excel и типа ADO проходит нормально.
Изучил попутно подключение в Кроносе экземпляра Excel. Из него взял название листа и ввел себе в переменную, все заработало. В итоге выяснилось, что лист у меня назывался не "Список", а "Список ", т.е. с пробелом. Оказывается Excel вполне себе может позволить создать таких два листа и считать их разными (Зато букву "Ж" не дает написать Улыбка ). Что за злодей так сделал, выясняю Злой . После исправления названия листа, все заработало, проблем с русской кодировкой на самом деле у меня не было.

Прикладываю файл с кодом формы и файлом настройки, может кому пригодится. Файл настройки по умолчанию должен лежать в папке банка. В нем описывается таблица импорта. Для пользователя так удобнее, не надо в код лезть.

p.s. Не рассчитываю на оптимальность кода, сейчас придет Зулусс и напишет все в 2 строчки  Очень довольный , но я к этому стремлюсь.
Наверх
 

Code.rar (3 KB | 29 )
 
IP записан
 
Zuluss
Бета-тестер
Вне Форума


Старинный пользователь
Кронос

Сообщений: 2 368
Санкт-Петербург
Re: Загрузка данных из Exel
Ответ #27 - 01.08.2018 :: 17:51:56
 
Zuluss пришел, значит сейчас наступило  Улыбка.
1. С буквой "Ж" забавно. Копированием/вставкой воспринимается нормально.
2. Посмотрел на код. Какой то симбиоз стилей и языков. Ну это кому как нравится. В коде встретился оператор continue Ужас. В версии 5.1 для CronosPro такого вроде не было. Специально посмотрел версии Lua 5.2 и 5.3. Не нашел. Обнаружил в версии 5.2 появление оператора goto  Улыбка Злой.
3. Провел испытания на автономном интерпретаторе Lua с luacom трех различных вариантов загрузки из XLS файлов.
3.1 Вариант с ADODB.
3.2 Вариант с Excel.Application и перебором  ячеек.
3.3 Вариант с Excel.Application, сохранением листа в файл и его парсингом Lua.
Докладываю результаты.
Вариант 1, которым Вы пользуетесь, оказался в пять раз быстрее варианта 2.
Вариант 3 оказался почти в 10 раз быстрее, чем вариант 1.
Вполне возможно, что проблемы с перекодировкой  юникодных данных в ASCII в CronosPro решены, но  в luacom они присутствуют.
Засим кланяюсь.
Наверх
 
 
IP записан
 
Leo
Бета-тестер
Вне Форума


Мое поколение...

Сообщений: 1 539
Калуга
Re: Загрузка данных из Exel
Ответ #28 - 02.08.2018 :: 04:21:01
 
Практика (жизненная) показала, что извлекать данные из Экскоя лучше через сохранение в текстовый файл. Не все так просто с этим Экселем…..  Подмигивание Класс
Наверх
 

Леонтьев Ю. Ю.
 
IP записан
 
iLuhins
Опытный пользователь
***
Вне Форума



Сообщений: 63
Re: Загрузка данных из Exel
Ответ #29 - 04.08.2018 :: 05:44:20
 
Re: Какой то симбиоз стилей и языков
Собственно изначальный код был не мой, я исправлял и добавлял, поэтому так. Надо было как всегда "вчера" сделать. Теперь обязательно посмотрю на предмет стиля.
Спасибо за исследование, будем изучать.
Наверх
 
 
IP записан
 
Страниц: 1 2 
Послать Тему Печать