Страницы: 1 2 След.
RSS
Автозамена чисел датой и при переводе обратно в число получается совершенно другое число.
 
Добрый день!
Есть таблица (а именно xls файл с характеристиками товаров для заливки на сайт), при открытии в Excel некоторые ячейки с числом становятся датами
(скрин 1 из приложения)
Если поменять формат ячейки на текстовый, то получаются "левые" числа
(скрин 2 из приложения)
Ну тут ни как не может быть 5-значное число.

Что я делал, и это не помогло:
1) менял ячейки на текстовый формат
2) менял расширение файла на txt, а потом загружал данные в Excel
3) менял в настройках Системный разделитель на точку
4) открывал через Notepad++ и сохранял в txt и пытался загрузить данные в Excel

Скажите пожалуйста что можно сделать в данной ситуации?

В приложении файл с несколькими позициями
Изменено: danilfg - 25.01.2018 15:36:31
 
danilfg, а может ли что при выгрузке кто то ввел данные не через запятую а через точку?
Не бойтесь совершенства. Вам его не достичь.
 
Файл создается автоматически через datacol. Так что сложно сказать. Возможно ли исправить уже имеющийся файл?
 
Каким образом эти данные попадают в Excel?
Вот горшок пустой, он предмет простой...
 
Если нет изначального файла - то вряд ли можно восстановить изначальную информацию точно в том виде, в котором она была. Можно лишь предположить, что вместо 15.09.2018 было 15.9, вместо 04.09.2018 - 4.9 или 9.4 и т.д.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
danilfg написал:
Файл создается автоматически через datacol.
Печально. Я избавлялся от этой напасти таким образом: выгрузку делал в текстовый файл, после чего импортировал текст в Excel через стандартный мастер и всем полям присваивал текстовый тип. В таком случае данные попадают в Excel в первозданном виде, и имеется возможность поправить косяки ввода. Точки на запятые поменять и все такое.
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
всем полям присваивал текстовый тип
+
Неизлечимых болезней нет, есть неизлечимые люди.
 
danilfg, полностью согласен со всеми участниками
Цитата
Дмитрий Щербаков написал:
Если нет изначального файла … Можно лишь предположить …
отсюда единственное пока решение (на мой взгляд) - "вытягивать" день и месяц из "дат" и сцеплять их в число.
В числах-НЕдатах с точкой в качестве разделителя можно менять точку на запятую через Ctrl+H
Изменено: Jack Famous - 25.01.2018 16:10:19
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, 43347=04.09.2018=4.09 или же 43347=04.09.2018=4.9 так как узнать девять копеек или девяносто копеек?

danilfg,
Можно так:
1) поменять в excel разделитель копеек на точку.
2) Создать файл в datacol
3) Открыть в excel
4) поменять в excel разделитель копеек на запятую

Ну или один раз поменять на точку и всегда работать под этим разделителем
Изменено: Бахтиёр - 25.01.2018 16:24:57
 
Бахтиёр,
Цитата
danilfg написал:
Возможно ли исправить уже имеющийся файл
я так понял, что нужно работать с примером, поэтому даже такой приём, всё лучше, чем ничего…
Разумеется, если есть доступ к файлу, не открытому в Excel (и побитого жизнью в итоге), а ещё лучше - к настройкам программы, отгружающей отчёт, то можно очень много всего попробовать
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
отсюда единственное пока решение (на мой взгляд) - "вытягивать" день и месяц из "дат" и сцеплять их в число.
В числах-НЕдатах с точкой в качестве разделителя можно менять точку на запятую через Ctrl+H
Подскажите, пожалуйста, как можно это реализовать?

Я пока лишь смог через поиск находить ячейку с форматом Дата. А дальше застрял как их вытаскивать.
И при чем месяц это целое число, а день - дробное. Например, 25.07.2018, является дробью 7,25, а дата 09.06.2018 - 6,9.


UPD. Сейчас попробовал (скрин1) найти по одной ячейке с форматом дата. А возможно ли в строке заменить прописать формулу? Если да, то как можно обозначить в формуле текущую ячейку  (то есть не определенную ячейку вида A4, B10 или R[-3]), а ячейку которую сейчас нашел поисковик?
Изменено: danilfg - 25.01.2018 23:49:04
 
Цитата
danilfg:  смог через поиск находить ячейку с форматом Дата. А дальше застрял как их вытаскивать.
Если в A1: 25.07.2018, то =МЕСЯЦ(A1)+ДЕНЬ(A1)/100 даст результат 7,25
Если в A2: 09.06.2018, то =МЕСЯЦ(A2)+ДЕНЬ(A2)/100 даст результат 6,09

Но вы пишете, что:
Цитата
danilfg:  а дата 09.06.2018 - 6,9
Как я уже говорил:
Цитата
Бахтиёр:  43347=04.09.2018=4.09 или же 43347=04.09.2018=4.9 так как узнать девять копеек или девяносто копеек?
То есть как узнать каким числом была дата 09.06.2018 6,9 или 6,09 ???

Заново создать файл в datacol нельзя?
 
Спасибо!
Цитата
Бахтиёр написал:
То есть как узнать каким числом была дата 09.06.2018 6,9 или 6,09 ???
Уже ни как не узнать. Поэтому это уже не так важно)) Но обычно идет число вида 6.9.

Цитата
Бахтиёр написал:
=МЕСЯЦ(A1)+ДЕНЬ(A1)/100
Сейчас использовал Вашу формулу таким образом: находил ячейку с датой, и присваивал ей значение в виде Вашей формулы, но с переменными RC (чтобы данные были из этой ячейки)
 
Но мне выдает,что формула имеет циклический характер (что вполне логично), а как сделать так чтобы не было этой цикличности?


В приложении файл который я не открывал еще)
 
Цитата
danilfg написал:
Уже ни как не узнать.
- узнать :)
Если открыть архиватором - то видно что там есть
Код
lt;td>4.02</td>
<td>1.05</td>

а в файле это превращается в 02.04.2018 и 05.01.2018

Как побороть - не знаю... Может залезть в Goods - 2.xlsx\xl\sharedStrings.xml и дописать там таким данным нули?
P.S. форум мой пост почикал по своему разумению, там чуть иначе было, но можно найти по ";4.02"
P.P.S. - проверил с нулями - не помогает...
Изменено: Hugo - 26.01.2018 10:40:08
 
Цитата
Hugo написал:
Если открыть архиватором - то видно что там есть
блестяще!  :idea: совсем забыл, что книги - это архивы)))
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Нули не помогают. Но может дописать апостроф?
P.S. не помогает... :(
Не помогает если взять в кавычки, и даже с пробелом перед... :(
Изменено: Hugo - 26.01.2018 11:04:21
 
Цитата
Jack Famous написал:
отсюда единственное пока решение (на мой взгляд) - "вытягивать" день и месяц из "дат" и сцеплять их в число.
не сработает, даже не надейтесь. Пример 01.02.2018 можно получить из чисел 1.2 ; 1.02, 2.1; 2.01 -  в зависимости от настроек формата даты и десятичных чисел (на компе с экселем)).

Поэтому (ну и еще есть пара причин) выгрузку данных следует делать в csv формат и "тянуть" его в эксель в виде текста (при "Получить данные / Из текста").
Изменено: TheBestOfTheBest - 26.01.2018 11:05:35
Неизлечимых болезней нет, есть неизлечимые люди.
 
Hugo, проблема в том, что при открытии Excel для отображения данных считывает их не из SharedString, а из папки Worksheets(расположена там же). И там нет никаких 4.02, там число 43192(т.е. дата...). А это значит, что данные уже подпорчены.
Единственный вариант - это тот же самый Sharedstring каким-то образом преобразовать в удобоваримую html таблицу и её уже подгружать. Пока нет времени в это влазить, но проще всего, наверное, создавать XSD-схему на основании этих данных и тогда можно будет напрямую Sharedstring закидывать в Excel.
Изменено: Дмитрий Щербаков - 26.01.2018 11:06:07
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий, спасибо. Я там поискал, но не достаточно дотошно :)
Но значит всёж можно найти какие числа должны были быть?
 
Цитата
Hugo написал:
значит всёж можно найти какие числа должны были быть?
дополнил ответ выше
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Если задача носит постоянный характер, то проще выгружать (из datacol) исходные данные в CSV-формате и настроить соответствующий импорт в Excel.
Изменено: sokol92 - 26.01.2018 13:34:41
Владимир
 
Цитата
Hugo:  Если открыть архиватором
Игорь, супер!

А где этот Sharedstring ?
 
Цитата
sokol92 написал:
Если задача носит постоянный характер, то проще выгружать (из datacol) исходные данные в CSV-формате и настроить соответствующий импорт в Excel.
Дело в том,что обработка табличных данных для сортировки по столбцам. А при выгрузке в CSV выдает не корректные данные
 
У меня тут вот так:
_rels\
theme\
worksheets\
styles.xml
workbook.xml
sharedStrings.xml

Но файл из этой темы.
Изменено: Hugo - 26.01.2018 14:43:51
 
У меня с файлом-примером также, как у Hugo
Изменено: Jack Famous - 26.01.2018 14:52:31
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Hugo:  файл из этой темы
теперь понятно )))
 
Цитата
danilfg написал:
А при выгрузке в CSV выдает не корректные данные
Что значит не корректная выгрузка?

Судя по всему там нужно женить данные из двух xml SharedStrings и xl\worksheets\sheet1.xml
Но есть у меня подозрение, что данные подпорчены уже и там, ибо:
Изменено: PooHkrd - 26.01.2018 16:23:42
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
нужно женить данные из двух xml SharedStrings и xl\worksheets\sheet1.xml
именно. В Sheets.xml данные о значениях ячеек, форматировании, формулах и т.п., а в SharedStrings - текстовое представление данных листов. При этом в SharedStrings они записаны в своем порядке, а в Sheet есть ссылка на ID каждого значения(за ссылку отвечает атрибут t)
Изменено: Дмитрий Щербаков - 26.01.2018 20:55:34
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Что хочу сказать - все печально. В данном случае схемы XML файла тоже не помогут. Файл sharedStrings содержит определения исключительно для текстовых данных ячеек. При этом расположенных по порядку от 0 до последнего элемента(определены в схеме элементами si). Можно представить как коллекцию, в качестве ключей которой применяется порядковый номер элемента, а в качестве значения - текст ячейки. Ну или представить как одномерный массив с нижней границей 0.
В файле Sheet при этом схема работает следующим образом: есть элемент v - он отвечает за значение ячейки. При этом он всегда является целым числом. Есть элемент c и у него есть атрибуты: r, s и t. Если t="s", то в качестве значения ячейки берется элемент из sharedStrings, порядковый номер которого определяется значением, записанным в качестве значения для v. Если же t не равен s или вовсе отсутствует - то в качестве значения ячейки берется само число из v.
На простом примере. Есть строка в sheet.xml, определяющая одну ячейку:
<x:c r="A1" s="1" t="s"><x:v>0</x:v></x:c>
красным я выделил интересующие нас показатели. t="s" - значит в качестве значения будет взят элемент под номер 0(<x:v>0</x:v>) из sharedStrings(si).
Для проблемных ячеек в приложенном файле данные выглядят так:
</x:c><x:c r="O2" s="2"><x:v>43192</x:v></x:c>
атрибута t нет вообще, значит в качестве значения ячейки будет записано само значение v.

Таким образом получается, что если в v изначально числовое значение - в sharedStrings его просто нет. Там исключительно текст.
Поэтому никакими ухищрениями изначальные реальные значения из этих файлов не достать.
Изменено: Дмитрий Щербаков - 26.01.2018 21:05:14
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий Щербаков, спасибо за развернутый ответ! Жаль что не получится.
Страницы: 1 2 След.
Читают тему
Наверх