![]() |
![]() |
![]() |
|
Проблема с сохранением даты в Excel | ☑ | ||
---|---|---|---|---|
0
Ezhov
07.07.08
✎
11:16
|
Обнаружилась фича - при сохранении в Excel сформированного отчета поля типа "дата" получают формат "Общий".В макете отчета для ячейки явно указан тип "дата", формат (без времени) и даже правое выравнивание, характерное для даты Excel.
В самом Excele преобразовать полученные значения к "дате" не удалось. Региональные настройки дергал - не помогло. |
|||
1
ТелепатБот
гуру
07.07.08
✎
11:16
|
||||
2
Ezhov
07.07.08
✎
11:26
|
Где вы, гуру!
Неужто никто не встречал этих граблей :( |
|||
3
Ezhov
07.07.08
✎
12:08
|
ап
|
|||
4
Sadovnikov
07.07.08
✎
12:16
|
В семерке помогало такое:
1. Расположение - по левому краю. 2. В ячейку пишется Значение = "" + ТЗ.ПолучитьЗначение(ТЗ.НомерСтроки, Показатель) + РазделительСтрок; |
|||
5
wPa
07.07.08
✎
12:23
|
Тебе в экселе нужен именно тип дата? можешь обосновать почему не подходит текстовое представление?
|
|||
6
Ezhov
07.07.08
✎
12:32
|
Конфы "Конвертация" у меня нет. Поэтому в конфигурации-доноре формирую отчет по некоему справочнику, имеющему реквизит - дату. Сохраняю его в Экселе. С помощью обработки Александра Окунева (респект ему) заливаю из Экселя в справочник в конфигурации-приемнике. Все пашет на ура, проблема только в том, что в реквизит "дата" я пихаю нечто "общее", а это не прокатывает.
|
|||
7
wPa
07.07.08
✎
12:42
|
а если формат ячейки в выгрузке Selection.NumberFormat = "m/d/yyyy" то прокатывает? имхо не сможет без времени. я загружаю так из экселя:
ДатаРождения = Дата(СокрЛП(СЗ[10].Значение)+" 00:00:00"); |
|||
8
Ezhov
07.07.08
✎
12:55
|
Обработка универсальная, поэтому используется конструкция вида
Лист.Cells(Строка,Поле.Значение).value. Если только отслеживать имя поля и добавлять время только для него ? |
|||
9
wPa
07.07.08
✎
13:01
|
Проблема не в экселе, а в загрузке - Дата(Лист.Cells(Строка,Поле.Значение).value) даст ошибку в любом случае без времени.
Я не видел обработку, но по идее где-то должна быть разборка по типам полей. По имени поля - испортишь хорошую вещь ) Если нет разборки - добавь Проверь на тип ячейки экселя. если Лист.Cells(Строка,Поле.Значение).NumberFormat = "m/d/yyyy" (ну или какой там у тебя формат) тогда Дата(СокрЛП(Лист.Cells(Строка,Поле.Значение).value)+" 00:00:00") если Лист.Cells(Строка,Поле.Значение).NumberFormat = "@" тогда СокрЛП(Лист.Cells(Строка,Поле.Значение).value) и т.д. |
|||
10
Вадяс
07.07.08
✎
13:10
|
Не парься с Exelem. Сохраняй в mxl!
|
|||
11
Ezhov
07.07.08
✎
13:12
|
В обработке так - в первой строке идут имена полей, начиная со 2-й строки - значения. Сначала анализируются имена, затем идет собственно добавка :
Для Колонка = 1 По 256 Цикл ИмяПоля = Лист.Cells(1,Колонка).Value; Если ИмяПоля <> "" Тогда ..... Если ЕстьРеквизит(ИмяСправочника,СтрВыбор(1,ИмяПоля))Тогда ПоляExcel.Вставить(ИмяПоля,Колонка); КонецЕсли; Иначе Прервать; КонецЕсли; КонецЦикла; ДобавитьНовыеЭлементыВТаблицу(ИмяСправочника); ...а внутри этой процедуры : Для Строка = 2 По ПоследняяСтрока Цикл ОкноИсполнения.Индикатор = цел(Строка/ПоследняяСтрока*100); ОбработкаПрерыванияПользователя(); НовыйЭлемент = Таблица.Добавить(); Для Каждого Поле Из ПоляExcel Цикл Попытка НовыйЭлемент[Поле.Ключ] = Лист.Cells(Строка,Поле.Значение).value; .... |
|||
12
Ezhov
07.07.08
✎
13:22
|
(10) А подробнее ?
Сама обработка хороша, позволяет заливать многоуровневые справочники, иметь помимо реквизитов простых типов реквизиты типа "справочник" и "перечисление". Только вот эту фичу осталось победить. |
|||
13
Ezhov
07.07.08
✎
13:38
|
Заработало!
Если Лист.Cells(Строка,Поле.Значение).NumberFormat="ДД.ММ.ГГГГ" Тогда НовыйЭлемент[Поле.Ключ] = Дата(СокрЛП(Лист.Cells(Строка,Поле.Значение).value)+" 00:00:00") Иначе НовыйЭлемент[Поле.Ключ] = Лист.Cells(Строка,Поле.Значение).value; КонецЕсли; wPa, чем объяснить фичу с добавкой времени? |
|||
14
wPa
07.07.08
✎
13:54
|
Может сделал бы разборку на формат ячейки экселя?
типо в попытку ФорматЯчейки = Лист.Cells(Строка,Поле.Значение).NumberFormat; Если ФорматЯчейки = "@" Тогда //текст ЗначениеЯчейки = Лист.Cells(Строка,Поле.Значение).value; ИначеЕсли ФорматЯчейки = "m/d/yyyy" Тогда //дата ЗначениеЯчейки = Дата(Строка(Лист.Cells(Строка,Поле.Значение).value)+" 00:00:00") ну и т.д. |
|||
15
wPa
07.07.08
✎
13:57
|
(13) ф-ция Дата("01.01.2001") выдаст ошибку преобразования типов строка-дата, потому как строковое представление даты имеет формат дата +" "+время.
Но в таком виже преобразование сработает - Дата("01.01.2001"+" "+"00:00:00") |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |