Страницы: 1 2 След.
RSS
Банковские счета в ячейках Эксцеля
 
Вопрос здесь озвучен, ответа не нашёл.
Часто приходится открывать текстовые файлы с банковскими счетами. Да и юзершей обучаю этому нелёгкому делу.
Вместо хвостика счёта наблюдаем 5 нулей, если колонку в диалоге открытия не объявить текстовой.
Надоела мне эта бодяга. Слепил макрос, который открывает файл и заведомо объявляет все колонки текстовыми.
А заодно и кодовую страницу задаёт нашу, родную, а не китайскую, которую Эксцель пытается впарить.
Даже порадовался немного, пока не обнаружил, что всамделишние числовые колонки наотрез отказываются суммироваться.
Тоска. Блеск и нищета. Проблема существует столько, сколько сам Эксцель. И ни с места.
 
Покажите свою проблему. Она решаема.
 
Вот она, ужасная.
Разделитель-табуляция.
 
Цитата
Проблема существует столько, сколько сам Эксцель.
...а показываете в текстовом.
Вы же о суммировании писали, не так ли? Научите, как в .txt суммировать?
 
В чем проблема колонку, с которой предполагаются вычисления не объявлять текстовой при открытии?
 
Цитата
...не объявлять текстовой при открытии?
...и пропадут левые нули в числовых кодах.
 
Вероятно я не правильно поняла фразу о "всамделишных числовых колонках", где ведущим нулям (а также "хвостику") делать абсолютно нечего. Вряд ли кому-то понадобиться выполнять операции над счетами, которые можно оставить текстовыми (а вот над суммами по этим счетам, да).
Изменено: Margarita - 23.04.2015 18:57:07
 
Вернется автор из налоговой полиции, все разъяснит :)
 
Долго ждать будем...
 
Цитата
vikttur написал: Вы же о суммировании писали, не так ли?
Так это потом. Откройте ужасный файл в Эксцеле, объявив при открытии колонку с суммой текстовой.
А после того посуммируйте. А этот противный Эксцель скажет Вам: фигужки.
Изменено: Timov - 24.04.2015 10:21:07
 
Цитата
...и пропадут левые нули в числовых кодах.
Вы не правы. Нули, как раз, правые.  
Изменено: Timov - 24.04.2015 10:21:22
 
Цитата
Margarita написал: Вероятно я не правильно поняла фразу о "всамделишных числовых колонках", где ведущим нулям (а также "хвостику" делать абсолютно нечего
Именно так. Не правильно поняли.
 
Чо то не пойму, куда я попал? На КВН чтоль?
Ребята. Ну откройте ужасный файл в Эксцеле. Потом сравните с txt.
Наберусь смелости дать тот же совет представленным здесь девчатам.
Первый топик на эту тему на Вашей планете возник аж в 2007-м лохматом году. Воз и ныне там.

 
 
Цитата
Timov написал: Ну откройте ужасный файл в Эксцеле. Потом сравните с txt.
Так, а где файл? Тот, который txt есть, а экселевского я не наблюдаю
 
Цитата
Timov написал: Ребята. Ну откройте ужасный файл в Эксцеле. Потом сравните с txt
А оно кому надо? Ну открыли. Дальше-то что? Сравнить-то с чем предлагаете? Мы откроем по-своему, а Вы
Цитата
Слепил макрос, который открывает файл и заведомо объявляет все колонки текстовыми
Так надо полагать, что проблема в нем, нет?

Цитата
Timov написал: Первый топик на эту тему на Вашей планете возник аж в 2007-м лохматом году. Воз и ныне там
воз давно уехал. Чтобы это понять, достаточно набрать в поисковике: текст как число в число макросом.
Плюс при импорте из текстового файла можно определенным столбцам задать нужный формат. И если в столбцах должны быть цифры - так и указывайте для этих столбцов. А если Вам и нули ведущие нужны, и суммировать - то делайте второй столбец, в который после импорта помещайте преобразованные данные и суммируйте на здоровье без потери других данных.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Пробуйте:
Код
Sub LoadTxt()
' ZVI:2015-04-24 http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&TID=65669
  Const CODEPAGE = 866      ' <--change to suit, for example for Cyrillic Windows use 1251
  Const DECSEPARATOR = ","  ' <--change to suit symbol of decimal separator
  Dim WbPath As String, TxtFileName
  ' При ошибке - перейти на метку exit_:
  On Error GoTo exit_
  ' Сделать текущей папку этой книги
  WbPath = ThisWorkbook.Path
  ChDrive WbPath
  ChDir WbPath
  ' Отобразить диалог открытия файла в текущей папке
  TxtFileName = Application.GetOpenFilename("Text Files (*.txt), *.txt")
  ' Выйти, если файл не выбран
  If TxtFileName = False Then Exit Sub
  ' Загрузить TXT, форматы столбцов: 1-й и 2-й - текстовые, остальные (3-й) - общий формат.
  ' DECSEPARATOR = разделитель целой и дробной части
  Workbooks.OpenText filename:=TxtFileName, Origin:=CODEPAGE, StartRow:=1, _
                     DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
                     ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
                     Comma:=False, Space:=False, Other:=False, _
                     FieldInfo:=Array(Array(1, 2), Array(2, 2)), _
                     DecimalSeparator:=DECSEPARATOR, TrailingMinusNumbers:=True, Local:=False
  ' Выровнять ширины столбцов
  ActiveSheet.UsedRange.EntireColumn.AutoFit
exit_:
  ' Отобразить ошибку, если случилась
  If Err Then MsgBox Err.Description, vbCritical, "Error #" & Err.Number
End Sub
Изменено: ZVI - 24.04.2015 10:22:32
 
тему почитал файл открыл в эксель что надо суммирует, если юзершей правильно учить у них тоже получится
Лень двигатель прогресса, доказано!!!
 
Цитата
The_Prist написал: Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы
Что то я намутил тут.  Ваша правда, вопрос простой. Как открыть текстовый файл, в идеале любой, в реале с разделителями, при этом не прибегая к лишним телодвижениям.
Подобная полезность есть - WinPrn, но она обрабатывает тексты с псевдографикой.
 
Цитата
Timov написал: Как открыть текстовый файл, в идеале любой, в реале с разделителями, при этом не прибегая к лишним телодвижениям.
Думаю в идеале - нанять для этой работы специалиста. Вообще всего одно телодвижение в месяц - выдать зарплату :)
 
Решение я здесь опубликовал, но Модератор скрыл его. Насколько я понял, Вам нужно поудалять в предыдущих сообщениях излишнее цитироание, чтобы Vikttur разблокировал моё сообщение. Такая вот интрига :)
 
Цитата
Timov написал: Чо то не пойму, куда я попал? На КВН чтоль?
Вам смешно?
 
Цитата
ZVI написал: Решение я здесь опубликова...
Это не решение, это сказка. Ведро пива, думаю, мои очаровашки выкатят.
За вычетом моих комиссионных, восемь литров Ваши.
Хорошо бы ещё воткнуть всё это в метод Workbook_Open, а после открытия нужного текста что бы файл с макросом самозакрывался.
Ну, на это моих познаний в VBA хватит, допилю
 
Timov, перестаньте цитировать, не думая.
 
Цитата
viktturдумая...
Извините, коль что не так. Сами мы не местные, к здешним порядкам не приученные.
А такой лаконизм вызван экономией дискового пространства?
 
Здравым смыслом.
 
Цитата
Timov написал:
А такой лаконизм вызван экономией дискового пространства?
Нет. Просто ну очень неудобно читать тему, если в каждом сообщении цитируется предыдущее. Особенно, когда необходимости в этом нет вообще. Цитировать можно и часть текста(именно та часть, на которую ответ дается). В большинстве случаев одной строки хватает за глаза.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Timov написал: ...после открытия нужного текста чтобы файл с макросом самозакрывался
Для запуска кода при загрузке достаточно переименовать Sub LoadTxt() в Sub Auto_Open()  и код должен быть в стандартном модуле, типа Module1. Для автозакрытия книги с кодом перед End_Sub достаточно добавить строку:
ThisWorkbook.Close False
Мою долю пива - барышням, пожалуйста :)
Изменено: ZVI - 24.04.2015 18:01:40
 
Цитата
ZVI написал:
Мою долю пива - барышням, пожалуйста
Вчера недосуг было, суета. Сегодня решил посмотреть, как это Вам удалось так ловко победить. Нашёл:
FieldInfo:=Array(Array(1, 2), Array(2, 2))
Только если колонка со счётом будет третьей, фокус не получится.
Таким путём я ходил.
FieldInfo:=Array( _
 Array(1, 2), Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 2), Array(6, 2), Array(7, 2), Array(8, 2), Array(9, 2), Array(10, 2), _
 Array(11, 2), Array(12, 2), Array(13, 2), Array(14, 2), Array(15, 2), Array(16, 2), Array(17, 2), Array(18, 2), Array(19, 2), Array(20, 2), _
 Array(21, 2), Array(22, 2), Array(23, 2), Array(24, 2), Array(25, 2), Array(26, 2), Array(27, 2), Array(28, 2), Array(29, 2), Array(30, 2), _
 Array(31, 2), Array(32, 2), Array(33, 2), Array(34, 2), Array(35, 2), Array(36, 2), Array(37, 2), Array(38, 2), Array(39, 2), Array(40, 2), _
 Array(41, 2), Array(42, 2), Array(43, 2), Array(44, 2), Array(45, 2), Array(46, 2), Array(47, 2), Array(48, 2), Array(49, 2), Array(50, 2) _
 )
То есть заведомо объявить все колонки текстовыми. Но возникли проблемы с числовыми колонками. После открытия файла они наотрез отказывались переопределяться в числовые.
Остаётся, только, перед открытием текста проанализировать, где какие колонки, сформировать массив и передать его в FieldInfo.
С пивом барышням придётся подождать.
Изменено: Timov - 25.04.2015 22:02:00
 
Программа - как ребёнок, ей нужно толково объяснить, что с чем и как нужно делать, тогда будет выполнять это играючись, но может и пошалить.
Приложите более реальный пример текстового файла, или они все время будут разными по структуре данных?
 
Цитата
ZVI написал:
или они все время будут разными по структуре данных?
Процитируя себя.
"Как открыть текстовый файл, в идеале любой, в реале с разделителями."
Мы рассматриваем самый примитивный случай - текстовые файлы с разделителями.
Бывает ещё SDF - с колонками фиксированной ширины.
При открытии таких файлов, Эксцель что то из себя пытается изобразить, но получается у него хреновато.
Состязаться с Эксцелем в области открытия SDF текстовых файлов мне не по уму.
Думаю только, что можно написать алгоритм, более совершенный чем у Эксцеля.
Вернёмся к файлам с разделителями. Тут намного проще, хоть и не тривиально на моём уровне, но решаемо.
Страницы: 1 2 След.
Наверх