1C8 и OpenOffice | |
---|---|
minotavr Автор Сообщений: 3 Дата регистрации: 27.09.2010 |
Добрый день. Кто может помочь:
1). команда на "просто открыть" .xls-файл при помощи OpenOffice из 1С8 2). из 1С8 читаю данные из .xls-файла при помощи OpenOffice, ячейка, формат = Дата, значение = 01.03.2008 он читает как: тип = Строка, значение = "39 508" как с такого значения можно дату получить?..... "инструментарий": прServiceManager = Новый COMОбъект("com.sun.star.ServiceManager"); 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, лпСвойства); лпСвойства2 = прServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue"); лпСвойства2.Name = "Hidden"; лпСвойства2.Value = Истина; Args.SetValue(1,лпСвойства2); Document = Desktop.LoadComponentFromURL(ConvertToURL(ФайлПрайсЛиста), "_blank", 0, Args); Sheets = Document.getSheets(); Sheet = Sheets.getByIndex(0); лпМассив = ВернутьМассивДиапазонДляOpenOffice(); begCol = лпМассив[0] - 1; //начальная колонка диапазона begRow = НачСтрока - 1; //нач ячейка endCol = лпМассив[лпМассив.Количество() - 1]; endRow = КонечнаяСтрока - 1; Range = Sheet.getCellRangeByPosition(begCol, begRow, endCol, endRow); лпМассивCOM = Новый COMSafeArray("VT_VARIANT", Range.Columns.Count, Range.Rows.Count); Состояние(НСтр("ru=""Получение диапазона данных из файла..."";uk=""Отримання діапазону даних з файлу...""")); лпМассивCOM = Range.getDataArray(); лпПростойМассив = лпМассивCOM.Выгрузить(); Состояние(НСтр("ru = ""Отключение от файла прайс-листа...""; uk = ""Відключення від файлу прайс-листа ...""")); лпМассивCOM = Неопределено; прServiceManager = Неопределено; Document.close(true); Desktop.terminate(); |
Re: 1C8 и OpenOffice | |
---|---|
Саян Сообщений: 57 Дата регистрации: 26.07.2007 |
|
Re: 1C8 и OpenOffice | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Вообще странно что дата в таком случае трактуется не как дата. Однако перевод несложен. Эксель (на Win платформе по умолчанию) использует так называемую "систему дат 1900" - гда дата определяется как порядковый номер дня с начала 1900-го года (т.е. 1 января 1900 года принят как 1 и т.д.) Что нужно обязательно учитывать, так это безмерный идиотизм разработчиков Lotus 1-2-3, которые при разработке своего продукта посчитали что 1900-й год является високосным (тогда как это вовсе не так), и несколько спорное решение MS придерживаться лотусовского формата даты, из-за чего в экселе тоже существует дата 29 февраля 1900 года (а такого дня не существует в календаре). Подробнее про проблему написано тут
Итого - для перевода эекселевского даты-числа в настоящую дату необходимо выполнить следующее преобразование (для простоты в фоксовой нотации):
------------------ WBR, Igor |
Re: 1C8 и OpenOffice | |
---|---|
Foxtrot Сообщений: 3408 Откуда: Куда: Дата регистрации: 25.04.2003 |
шота у тя брат кейс продублировался;) но думаю чел разберется
------------------ Мойте ноги, моя ноги вы моете и руки |
Re: 1C8 и OpenOffice | |
---|---|
minotavr Автор Сообщений: 3 Дата регистрации: 27.09.2010 |
==> Саян
Спасиба! буду изучать ) Исправлено 1 раз(а). Последнее : minotavr, 20.10.11 09:30 |
Re: 1C8 и OpenOffice | |
---|---|
minotavr Автор Сообщений: 3 Дата регистрации: 27.09.2010 |
==> Igor Korolyov
Функция ВернутьДатаСрокГодности(прДней) Попытка Если прДней = 0 ИЛИ прДней = "" Тогда Возврат Неопределено; КонецЕсли; Если ТипЗнч(прДней) = Тип("Строка") Тогда Если Найти(прДней, ".") > 0 Тогда //есть точка в значении, формат ячейки Excel = "общий" прДней = прДней + " 0:00:00"; прДней = Дата(прДней); Возврат прДней; КонецЕсли; КонецЕсли; //формат ячейки Excel = "дата" прДней = Число(прДней); лпКонстантаВремени = Дата("01.01.0001 0:00:00") + 59926435200; // для OpenOffice начало дат = "01.01.1900 00:00:00" он возвращает "дни" лпСекунд = прДней * 60 * 60 * 24; лпДата = лпКонстантаВремени + лпСекунд; Исключение гпОшибка = НСтр("ru=""Ошибка: Не удалось считать Срок Годности."";uk=""Помилка: Не вдалося зчитати Термін Придатності."""); Возврат Неопределено; КонецПопытки; Возврат лпДата; КонецФункции |
© 2000-2024 Fox Club  |