Luca
Модератор
Зарегистрирован: 05.10.2012
Сообщений: 1113
Еще раз убеждаюсь в кривости Excel. К сожалению мне приходится с ним время от времени сталкиваться и каждый раз натыкаюсь на адовые глюки.

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

Есть столбец с датой. день-месяц-год. Пример: 28.02.2013
Потом все данные с листа должны сохраняться в формате csv. Логично предположить, что то как я данные вижу, так они и должны сохраняться. Однако хуй. Несколько дней назад самопроизвольно данные из этого столбца стали сохраняться задом наперед.
месяц.день.год. 02.28.2013

Мне такой формат захер не вперся. Как это отключить я не нашел. Вообще. Т.е. упоротый Excel навязчиво мне запарывает данные.

/forumlinexp/Files/2013/16eda9d1-77b0-4858-8bf4-770f6728f2fb.png


Вот сама книга с макросами.
http://rghost.ru/44835955

Вот порядок запуска макросов:
emsc_load
gsras_load
usgs_load
merge_l4
DeleteRowsWithBlanks
rem_old_data
drop_zapayatie
header
save_to_csv

Кстати, у кого ЛибраОфис оно макросы эти зажует интересно
Последнее изменение: Luca, 28.03.2013 11:50

Комментарии34

0 0

Белая рысь
Золотой пользователь
Зарегистрирован: 06.10.2012
Сообщений: 1317
Измените save_to_csv вот так:

Sub save_to_csv()

'
' save_to_csv Макрос
'

'
Sheets("Лист4").Select
ActiveWorkbook.SaveAs Filename:="C:\work\earthquake\data\loaded_data.csv", FileFormat _
:=xlCSV, CreateBackup:=False, Local:=True




End Sub

и будет Вам счастье. Правда, это только в том случае, если Вам нужно исправить. Если Вам нужно порассуждать о черезжопности экселя, естественно, это не поможет.
-- God is real, unless explicitly declared as integer.
edited: Белая рысь, 28.03.2013 11:24

0 0

Luca
Модератор
Зарегистрирован: 05.10.2012
Сообщений: 1113
Белая рысь, о шикарно! То что нужно! В чем была причина
Кстати, убивает то, что если макрос использовать макрос, одинаковое действие выполненное руками и с помощью макроса дает разный результат. Если выбрать "Сохранить как", то данные сохраняются в правильном формате.
-- тишина - самый громкий звук

0 0

Белая рысь
Золотой пользователь
Зарегистрирован: 06.10.2012
Сообщений: 1317
о шикарно! То что нужно! В чем была причина
Исправил макрос. Тот вариант, который я исходно написал, был немножко некошерен. Причина, судя по всему, в том, что у Вас английский ёксель. И, т. к. он считает, что в макросе csv сохраняет для себя, сохраняет его в родном формате. А Local как раз нужен, чтобы сказать ему, чтобы не выёбывался и сохранял для нас. Видимо, в Save As ему объяснили, что пользователь ручками данные выгружает не для того, чтобы в ёкселе с ними работать.
-- God is real, unless explicitly declared as integer.

0 0

Белая рысь
Золотой пользователь
Зарегистрирован: 06.10.2012
Сообщений: 1317
Кстати, ЧСХ, в документации (я её по F1 вызвал) это есть:

Local
Optional
Variant
True saves files against the language of Microsoft Excel (including control panel settings). False (default) saves files against the language of Visual Basic for Applications (VBA) (which is typically US English unless the VBA project where Workbooks.Open is run from is an old internationalized XL5/95 VBA project).
-- God is real, unless explicitly declared as integer.

0 0

MOP3E
Золотой пользователь
Зарегистрирован: 11.01.2013
Сообщений: 1335
Спасибо, полезная инфа. Даты вообще достаточно скользкая штука, так как для них имеется куча форматов, плавно изменяющихся не только от страны к стране, но и от операционной системы к операционной системе.

0 0

Luca
Модератор
Зарегистрирован: 05.10.2012
Сообщений: 1113
Для меня вообще загадка зачем было делать систему угадывания форматов данных в Excel. Кроме как угадывания ее никак не назовешь. Самый логичный вариант - воспринимать данные as is т.е. как текст, а кому нужно тот сам выставит формат.

Просто уже десятки раз об это спотыкался. В исходнике 05.6 Excel думает, что это месяц и день и потом начинаются чудеса.И это лишь единичный пример.
-- тишина - самый громкий звук

0 0

MOP3E
Золотой пользователь
Зарегистрирован: 11.01.2013
Сообщений: 1335
Для меня вообще загадка зачем было делать систему угадывания форматов данных в Excel.
А нахрена ты вообще используешь эксель для хранения данных Используй для этого MS SQL Server Express Edition любой версии - он гораздо лучше приспособлен для таких вещей.

0 0

Белая рысь
Золотой пользователь
Зарегистрирован: 06.10.2012
Сообщений: 1317
Для меня вообще загадка зачем было делать систему угадывания форматов данных в Excel.
Открою тайну: обычно, если в поле дата, пользователи работают с ней, как с датой. А в MS разработчики почему-то считают, что пользователям удобнее работать с датой как с датой, а с числами - как с числами сразу после ввода, а не копаясь в глубинах настроек.. А если программист пишет  макросы - с форматом данных он как-нибудь разберётся. Не бухгалтер, чай.
-- God is real, unless explicitly declared as integer.

0 0

msAVA
Пользователь
Зарегистрирован: 27.10.2012
Сообщений: 318
пользователям удобнее работать с датой как с датой, а с числами - как с числами сразу после ввода, а не копаясь в глубинах настроек
Вот у буха и могут возникать приколки, когда деньги 25.10 преобразуются в дату 13/10/25.
-- \\\Виндовс, шминдовс... Штирлиц со злости пнул системный блок и выпустил в окно почтового голубя.

0 0

MOP3E
Золотой пользователь
Зарегистрирован: 11.01.2013
Сообщений: 1335
Вот у буха и могут возникать приколки, когда деньги 25.10 преобразуются в дату 13/10/25.
А нехер в документе точку вместо законной запятой ставить. В английском формате даты/чисел компоненты даты отделяются друг от друга слэшами, целая-десятичная части числа - точкой. Всё логично. В русском - точка и запятая, тоже всё логично. На самом деле, с хранением чисел и дат проблем нет. Проблемы начинаются тогда, когда число сначала преобразовывают в текст, а потом этот текст пытаются преобразовать обратно в число. Вот тогда и приходит в гости пушистый полярный зверь.

0 0

msAVA
Пользователь
Зарегистрирован: 27.10.2012
Сообщений: 318
А нехер в документе точку вместо законной запятой ставить.
Если документ в англоязычную страну отправляется
-- \\\Виндовс, шминдовс... Штирлиц со злости пнул системный блок и выпустил в окно почтового голубя.

0 0

MOP3E
Золотой пользователь
Зарегистрирован: 11.01.2013
Сообщений: 1335
Если документ в англоязычную страну отправляется
Ты дебил или только прикидываешься Число двойной точности с плавающей точкой хранится в документе в виде четырёх байт, в стандартном формате числа с плавающей точкой. При выводе на экран число преобразуется в текст в формате, совпадающем с системными настройками. То есть, если в региональных настройках компьютера (не экселя!) указана Россия - десятичным разделителем будет запятая, если указана Англия - десятичным разделителем будет точка. Если не веришь - создай документ в экселе, поменяй региональные настройки компьютера и убедись, что десятичный разделитель меняется вместе с настройками. Всё это справедливо также и для дат, и не работает только в том случае, если в настройках ячейки прямо указано, какие именно разделители использовать и в каком порядке выводить компоненты даты. Более того, в экселе при нажатии точки на цифровой клавиатуре в ячейку ВСЕГДА вводится десятичный разделитель числа, заданный в региональных настройках операционной системы.

0 0

msAVA
Пользователь
Зарегистрирован: 27.10.2012
Сообщений: 318
Ты дебил или только прикидываешься
Дебил это ты. Если бух в России на русской версии Винды и офиса готовит документ для англоязычной страны, то может попытаться вводить деньги как это принято за бугром. Вы уверены, что все бухи знают, как происходить преобразование экселевских доков с умолчательными настройками Т.е. вводятся деньги по-русски: 25,10 без явного задания формата данных, сохраняется документ, открывается в "английской" версии Винды и офиса, деньги преобразятся в 25.10
поменяй региональные настройки компьютера
В нормальных офисах это можно задать прямо при задании формата ячейки, т.е. в одном документе вводить деньги в форматах разных стран и языков. MSO нормальный офис
-- \\\Виндовс, шминдовс... Штирлиц со злости пнул системный блок и выпустил в окно почтового голубя.

0 0

Белая рысь
Золотой пользователь
Зарегистрирован: 06.10.2012
Сообщений: 1317
Если бух в России на русской версии Винды и офиса готовит документ для англоязычной страны, то может попытаться вводить деньги как это принято за бугром.
А можно ещё и налоги посчитать так, как там принято, да. =)) Альтернативный подход - он такой.

Вы уверены, что все бухи знают, как происходить преобразование экселевских доков с умолчательными настройками Т.е. вводятся деньги по-русски: 25,10 без явного задания формата данных, сохраняется документ, открывается в "английской" версии Винды и офиса, деньги преобразятся в 25.10
Я правильно понимаю, что Вы пытаетесь задвинуть следующую идею: бух в международной фирме не умеет работать с ёкселем, зато знает про разные разделители Ну, блин. Купите ему комп уже.

В нормальных офисах это можно задать прямо при задании формата ячейки, т.е. в одном документе вводить деньги в форматах разных стран и языков. MSO нормальный офис
Всё это справедливо также и для дат, и не работает только в том случае, если в настройках ячейки прямо указано, какие именно разделители использовать и в каком порядке выводить компоненты даты.
*FACEPALM*
-- God is real, unless explicitly declared as integer.

0 0

msAVA
Пользователь
Зарегистрирован: 27.10.2012
Сообщений: 318
бух в международной фирме не умеет работать с ёкселем, зато знает про разные разделители
Международные фирмы разные бывают, как и бухи. Оне мог запомнить про разделители, но не сообразить, что э/таблица может интерпретировать введённые данные по-своему. Я лично сталкивался с таким, когда вводишь число (вернее, текст только из цифр), а оно переводится в дату. Но понятно, что сразу будет видно, если интерпретация введённого неверна.
Тем не менее, документ, созданный в русской версии офиса с соблюдением русских правил ввода денег, при открытии в английской версии правильно трансформирует представление в английское У меня просто нет под рукой никакого MSO.
в настройках ячейки прямо указано, какие именно разделители использовать и в каком порядке выводить компоненты даты
Ну не знаю я, как это делается в современных MSO. В LO есть 2 пути: задание формата отображения кодом или просто указать прямо в формате ячейки "Язык", т.е., например, для диапазона ячеек "Язык" (и представление денег) -- Английский, но для данной конкретной ячейки в диапазоне формат денег -- "Русский". Или/и кодом вроде
#,##0.00 [$руб.-419];-#,##0.00 [$руб.-419]
.
-- \\\Виндовс, шминдовс... Штирлиц со злости пнул системный блок и выпустил в окно почтового голубя.

0 0

Белая рысь
Золотой пользователь
Зарегистрирован: 06.10.2012
Сообщений: 1317
Тем не менее, документ, созданный в русской версии офиса с соблюдением русских правил ввода денег, при открытии в английской версии правильно трансформирует представление в английское У меня просто нет под рукой никакого MSO.
Держите:
С русскими региональными настройками вбил дату:
cпойлер
/forumlinexp/Files/2013/e4831576-33df-4ebe-b5d7-8441be0d0cb5.jpg

Закрыл документ, в панели управления поменял региональные настройки на английские (США) и открыл заново:
cпойлер
/forumlinexp/Files/2013/fadded8e-bc3b-4fef-bd01-b79d3e1d4f6e.jpg

Это можно считать ответом на Ваш вопрос
-- God is real, unless explicitly declared as integer.

0 0

msAVA
Пользователь
Зарегистрирован: 27.10.2012
Сообщений: 318
Это можно считать ответом на Ваш вопрос
Наверное, можно.
-- \\\Виндовс, шминдовс... Штирлиц со злости пнул системный блок и выпустил в окно почтового голубя.

0 0

MOP3E
Золотой пользователь
Зарегистрирован: 11.01.2013
Сообщений: 1335
Дебил это ты. Если бух в России на русской версии Винды и офиса готовит документ для англоязычной страны, то может попытаться вводить деньги как это принято за бугром. Вы уверены, что все бухи знают, как происходить преобразование экселевских доков с умолчательными настройками
Неет, проецировать тупость бухгалтеров на разработчиков ПО это и есть признак дебила. Если бухгалтеру что-то непонятно, ему должен помочь разобраться в проблеме сисадмин или специально обученный общению с бухгалтером специалист.

В нормальных офисах это можно задать прямо при задании формата ячейки, т.е. в одном документе вводить деньги в форматах разных стран и языков. MSO нормальный офис
Я, кажется, уже написал, что в MSO любой формат ячейки можно задать в явном виде - указать разделитель, количество незначащих нулей в числе, цвет для положительного, отрицательного значения и нуля, и т.п. В Excel настраивается всё!

Международные фирмы разные бывают, как и бухи.
Что-то мне подсказывает, что в серьёзных международных фирмах тупые бухи надолго не задерживаются.

0 0

msAVA
Пользователь
Зарегистрирован: 27.10.2012
Сообщений: 318
в MSO любой формат ячейки можно задать в явном виде - указать разделитель, количество незначащих нулей в числе, цвет для
положительного, отрицательного значения и нуля, и т.п. В Excel
настраивается всё!
Я имел в виду немного другое. Если речь идёт о деньгах, то в LO Calc можно просто выбрать "Язык" (страны) для ячейки и региональные настройки этой страны зададутся автоматически, к ним можно выбрать и определённый формат отображения. Задание формата отображения в явном виде так же возможно, т.е. 2,5 способа одновременно.
-- \\\Виндовс, шминдовс... Штирлиц со злости пнул системный блок и выпустил в окно почтового голубя.

0 0

MOP3E
Золотой пользователь
Зарегистрирован: 11.01.2013
Сообщений: 1335
Я имел в виду немного другое. Если речь идёт о деньгах, то в LO Calc можно просто выбрать "Язык" (страны) для ячейки и региональные настройки этой страны зададутся автоматически, к ним можно выбрать и определённый формат отображения. Задание формата отображения в явном виде так же возможно, т.е. 2,5 способа одновременно.
Денежных форматов в MSO зашито просто дохуя. Поставить нестандартный разделитель тоже можно. Только вот жёстко задавать формат числа конкретной страны для ячейки это очень неудобно. С одной стороны неадекват, настроивший так ячейку, получит самоуспокоение в виде того, что будет видеть в качестве разделителя точку, а с другой стороны все адекватные люди будут подозревать в такой ячейке ошибку: число в ней похоже то ли на дату, то ли на текст. Кому оно надо

З.Ы. В данный момент я работаю на LO. Жизнь заставила. Но что-то мне подсказывает, что скоро LO на моём компе будет исключительно для галочки, а работать я буду в портабельном MSO с флэши. Для прикола коллекционирую косяки и глюки LO. Пока набралось 18 штук. Думаю, к концу месяца забабахаю правдивый обзорчик по LO, чтобы местным пенгванутым жилось веселее.

0 0

OpenMind
Пользователь
Зарегистрирован: 21.10.2012
Сообщений: 877
Пока набралось 18 штук. Думаю, к концу месяца забабахаю правдивый обзорчик по LO, чтобы местным пенгванутым жилось веселее.
Я так понимаю, это ошибки с вашей точки зрения о прекрасном, а не о том какой офис реально должен быть
-- 2 ненужно 0% — нет линукса 1% — есть линукса 1,1% — перебор линукса
edited: OpenMind, 14.04.2013 13:55

0 0

msAVA
Пользователь
Зарегистрирован: 27.10.2012
Сообщений: 318
Только вот жёстко задавать формат числа конкретной страны для ячейки это очень неудобно
Я имел ввиду не число, а деньги, т.е. будет автоматом проставляться и название валюты.
-- \\\Виндовс, шминдовс... Штирлиц со злости пнул системный блок и выпустил в окно почтового голубя.

0 0

MOP3E
Золотой пользователь
Зарегистрирован: 11.01.2013
Сообщений: 1335
Я имел ввиду не число, а деньги, т.е. будет автоматом проставляться и название валюты.
"Деньги" это и есть один из числовых форматов. С префиксом ($100) или суффиксом (100 р.) для обозначения валюты. Ещё раз повторюсь: в экселе есть, наверное, все существующие на сегодняшний день денежные форматы. По крайней мере, их там реально дохуя - как минимум, больше ста видов. Так что с этим всё в порядке.

0 0

msAVA
Пользователь
Зарегистрирован: 27.10.2012
Сообщений: 318
в экселе есть, наверное, все существующие на сегодняшний день денежные форматы. По крайней мере, их там реально дохуя - как минимум, больше ста
видов. Так что с этим всё в порядке.
Увы, я проверил Excel 2007 и увидел очень бедные возможности по настройке отображения чисел по сравнению с LO4, можно использовать только встроенные форматы, нельзя произвольно устанавливать символ разделителя разряда. Более того, даже если я выберу один из "английских", всё равно останется запятая в "русском" офисе. Как мне в Excel 2007 задать отображение положительных денег зелёным, а отрицательных -- синим Вы же понимаете, что если у меня строка залита красным, то выделить отрицательное число цветом не получится
P.S. Автозаполнение и специальная вставка в Excel 2007, не спорю, весьма похвальны.
-- \\\Виндовс, шминдовс... Штирлиц со злости пнул системный блок и выпустил в окно почтового голубя.

0 0

MOP3E
Золотой пользователь
Зарегистрирован: 11.01.2013
Сообщений: 1335
Ахтунг! Ниасиляторы в треде!

нельзя произвольно устанавливать символ разделителя разряда.
Да ты что!
###'###'### - 123'456'789

###-###-### - 123-456-789

Как мне в Excel 2007 задать отображение положительных денег зелёным, а отрицательных -- синим Вы же понимаете, что если у меня строка залита красным, то выделить отрицательное число цветом не получится
Строка для задания формата выглядит примерно так:
[Зеленый]# ##0,00_)р.;[Синий](# ##0,00)р.;0,00_)р.
А про формат десятичной точки я тебе уже писал. Это единственное, что всегда берётся из системных настроек.
edited: MOP3E, 15.04.2013 15:04