Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

1C 8 3 УПП Как прочитать формат ячейки при загрузке файла эксель?

1C 8 3 УПП Как прочитать формат ячейки при загрузке файла эксель?
Я
   Nysha1210
 
03.04.19 - 22:53
Добрый день. Читаю файл *.xls при помощи процедуры:

       //OpenOffice Calc//////////////////////////////////////////////////////////////////////////////////////////////
       Попытка
                ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager");
       Исключение
                Предупреждение(ОписаниеОшибки() + Символы.ПС + "программа OpenOffice\LibreOffice не установлена на данном компьютере!");
       Возврат Неопределено;
       КонецПопытки;
       Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop");
       Свойства = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
       Свойства.Name = "AsTemplate";
       Свойства.Value = Истина;
       Args = Новый COMSafeArray("VT_VARIANT", 2);
       Args.SetValue(0, Свойства);
       Свойства1 = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
       Свойства1.Name = "Hidden";
       Свойства1.Value = Истина;
       Args.SetValue(1,Свойства1);
       Document = Desktop.LoadComponentFromURL(ПривестиФайлКУРЛ(ПутьКФайлу), "_blank", 0, Args);
       Sheets = Document.getSheets();
       Sheet = Sheets.getByIndex(текЛист-1);
       локТабЗнач = Новый ТаблицаЗначений;
       begCol = 0;
       begRow = 0;
       endCol = Sheet.Data.GetLength(6) - 1;
       endRow = Sheet.Data.GetLength() - 1;
       нКол = 0;
       локТабЗнач.Колонки.Очистить();

       КС = Новый КвалификаторыСтроки(50);
       Массив = Новый Массив;
       Массив.Добавить(Тип("Строка"));

       ОписаниеТиповСтрока = Новый ОписаниеТипов(Массив, , КС);

       Пока нКол <= endCol Цикл
            ИмяКол = "К"+Строка(нкол+1);
            локТабЗнач.Колонки.Добавить(ИмяКол,ОписаниеТиповСтрока);
            нКол = нКол + 1;
       КонецЦикла;
       Range = Sheet.getCellRangeByPosition(begCol, begRow, endCol, endRow);
       МассивКом = Новый COMSafeArray("VT_VARIANT", Range.Columns.Count, Range.Rows.Count);
       МассивКом = Range.getDataArray();
       тмпПростойМассив = МассивКом.Выгрузить();
       Для каждого массив из тмпПростойМассив Цикл
             ит = 0;
             НовСтрока = локТабЗНач.Добавить();
             Для каждого ЭлементМассива из массив цикл
                   НовСтрока[ит] = ЭлементМассива;
                   ит = ит + 1;
             КонецЦикла;
       КонецЦикла;
       Возврат локТабЗнач;
Всё считывает. Но есть некоторые ячейки, которые в 1 столбике имеют "100 грн." или "100 евро." Например. как изменить обработку так, что бы можно было считывать формат каждой ячейки и получать цену с "грн"/"евро" в итоге, так как чейчас считывается только 100.
Сразу скажу. Вынужденно считываю файл именно так, так как сисадмин не хочет категорически устанавливать Эксель.
Спасибо.
 
 
   palsergeich
 
1 - 03.04.19 - 22:55
Еще можно попробовать упороться и прочитать Excel как xml.
В УХ есть обработка которая так делает
   palsergeich
 
2 - 03.04.19 - 22:56
   Nysha1210
 
3 - 03.04.19 - 22:56
Можете дать ссылку? Такая обработка считает формат ячейки?
   Nysha1210
 
4 - 03.04.19 - 22:58
У меня в файле даты в формате Денежный. Эта обработка такой тип данных считает как число.
   Nysha1210
 
5 - 03.04.19 - 22:58
Упс, цены в денежном формате.
   palsergeich
 
6 - 03.04.19 - 22:59
Допилку ннапильником никто не отменял.
точки входа есть, идея есть, дальше - самостоятельно.
   Nysha1210
 
7 - 03.04.19 - 23:04
Спасибо. На том сайте я уже была. Обработку на почту так и не прислали ((((
   palsergeich
 
8 - 03.04.19 - 23:07
http://catalog.mista.ru/public/300092/ Вот еще идея.
А зачем обработка? там весь код в статье, просто копируешь в свою, добавляешь реквизит при необходимости и все
   palsergeich
 
9 - 03.04.19 - 23:08
Весь код из статьи в модуль формы обработки, 1 реквизит и 1 кнопку уж сообразить как добавить - не думаю что сверх задача
   palsergeich
 
10 - 03.04.19 - 23:09
А даже реквизитов не надо, надо только процедуру ПриОткрытии связать с событием формы
 
 Рекламное место пустует
   Nysha1210
 
11 - 03.04.19 - 23:11
Спасибо. Туплю. Просто сижу разбиаю код, но как определить денежный формат ячейки ну хоть убей не пойму((( Как строку?
   palsergeich
 
12 - 03.04.19 - 23:13
Начни с малого.
Сделай 3 ячейки с разными форматами.
Там есть определение формата ячейки и номер ее.
И посмотри что в каком случае.
   Nysha1210
 
13 - 03.04.19 - 23:16
Ок. Как вариант. Просто сейчас вся разработка ведётся локально на компе, а потом уже будем переносить на сервер для всех. Вот сижу - разбираю код.
Спасибо
   palsergeich
 
14 - 03.04.19 - 23:17
(13) Тем и хорош метод чтения через платформенные механизмы XML или DOM - Ты не зависишь от окружения.
   palsergeich
 
15 - 03.04.19 - 23:17
А вот с отлаженной дома обработкой через COM - на работе может быть сюрприз)
   Nysha1210
 
16 - 03.04.19 - 23:23
НЕ заметила. Этот метод работает для файлов *.xlsx, а у меня *.xls. Поэтому перешла по ссылке на http://catalog.mista.ru/public/120961/. Тут программного кода нет, только скачать обработку можно.
   palsergeich
 
17 - 03.04.19 - 23:26
(16) с xls - будут проблемы.
   palsergeich
 
18 - 03.04.19 - 23:27
подключение по ADO ипортирует данные, но ничего не знает о формате...
   Nysha1210
 
19 - 03.04.19 - 23:31
http://catalog.mista.ru/public/163642/ тут можно вроде словить денежный формат. Через либереофис.
   palsergeich
 
20 - 03.04.19 - 23:33
Глупый вопрос, а есть гарантии, что админ захочет поставить Libre?
   Nysha1210
 
21 - 03.04.19 - 23:34
У нас у всех он уже стоит))))
   Nysha1210
 
22 - 03.04.19 - 23:35
Админ принципиально его всем ставит. Ну не любит от Эксель. Сказал - выкручивайся сама как хочешь ((((
   palsergeich
 
23 - 03.04.19 - 23:36
Ну и конвертани libre xls в xlsx 
(22) Скорее лицензий нет и денег на них тоже, а подставлятся он не хочет
   Nysha1210
 
24 - 03.04.19 - 23:40
Конвертировать всё время нет возможности. Прайс делают в другом месте и тянут автоматом. Так что с файлом исх ничего сделать не получается. Он вообще линукс обожает. Всё остальное для него - кошмар(((( Майкрософт тихо ненавидит. Ладно, спасибо. Часть кода у меня уже есть. Идеи как поймать формат тоже - буду пробовать разобраться с тем что с вашей помощью нашла. Спасибо, что хоть направление указали.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует