Текущее время: Чт, июл 24 2025, 00:09

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Детский вопрос про csv-формат в excel
СообщениеДобавлено: Пт, апр 06 2007, 12:36 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пн, фев 21 2005, 00:50
Сообщения: 10284
Откуда: г.Мышуйск
Пол: Женский
:oops: :oops: :oops: Макросом VBA разбираю файл xls на несколько csv для загрузки в систему (макрос будет работать автоматически по нажатию кнопки пользователя, без какой-либо поддержки консультанта). 12-значное число, в каком бы оно формате до этого не стояло, превращается в 1,2345E+11 и оказывается негодным для загрузки в BW. Как с этим бороться?
Пока придумала один вариант - добавлять макросом какой-нибудь символ, а при загрузке его убирать. Но это неспортивно

_________________
Пушномолочная свинья-несушка (тест)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Детский вопрос про csv-формат в excel
СообщениеДобавлено: Пт, апр 06 2007, 13:50 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, июн 24 2005, 15:18
Сообщения: 1216
Откуда: Diagon Alley
LadyWind написала:
:oops: :oops: :oops: Макросом VBA разбираю файл xls на несколько csv для загрузки в систему (макрос будет работать автоматически по нажатию кнопки пользователя, без какой-либо поддержки консультанта). 12-значное число, в каком бы оно формате до этого не стояло, превращается в 1,2345E+11 и оказывается негодным для загрузки в BW. Как с этим бороться?
Пока придумала один вариант - добавлять макросом какой-нибудь символ, а при загрузке его убирать. Но это неспортивно


ВСЕГДА ставь формат "String". В явном виде

_________________
"Если ты в молодости не испытал трудности, их стоит купить за большие деньги". (с) Даймо


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Детский вопрос про csv-формат в excel
СообщениеДобавлено: Пт, апр 06 2007, 14:21 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пн, фев 21 2005, 00:50
Сообщения: 10284
Откуда: г.Мышуйск
Пол: Женский
csv все равно переделывает в общий, при сохранении файла. Попробуй сам. :evil:

_________________
Пушномолочная свинья-несушка (тест)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, апр 06 2007, 15:13 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пн, фев 21 2005, 00:50
Сообщения: 10284
Откуда: г.Мышуйск
Пол: Женский
И еще такой момент - если я сохраняю файл csv руками (команда "сохранить"), он сохраняет форматирование столбцов, т.е. делает разделители ";"
А вот если макросом - то форматирование столбцов не сохраняется, получаются "," разделители (как и нужно!), но даже при сохранеии перед закрытием запрашивает о сохранении данных еще раз и макрос не улавливает этой тонкости :roll:

_________________
Пушномолочная свинья-несушка (тест)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Детский вопрос про csv-формат в excel
СообщениеДобавлено: Пт, апр 06 2007, 16:25 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, июн 24 2005, 15:18
Сообщения: 1216
Откуда: Diagon Alley
LadyWind написала:
csv все равно переделывает в общий, при сохранении файла. Попробуй сам. :evil:



Перелопатил этих Excel-файлов в свое время, наверное больше. чем скушал котлет за всю жизнь.
Какая у тебя версия офиса ? Может мелкомягкие опять что-то навернули...

_________________
"Если ты в молодости не испытал трудности, их стоит купить за большие деньги". (с) Даймо


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Детский вопрос про csv-формат в excel
СообщениеДобавлено: Пт, апр 06 2007, 16:59 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пн, фев 21 2005, 00:50
Сообщения: 10284
Откуда: г.Мышуйск
Пол: Женский
2003 офис

Давай всю задачу обрисую, может вообще нафиг я это все делаю? И предложишь иной вариант :)
Дано:
1) "человеческий" интерфейс в xls (по-другому - не выйдет), куда пользователи в количестве пары тысяч человек забивают данные
2) далее эти файлики собирает ответственный сотрудник. в его задачу входит их загрузить в bw. разумеется, сотрудник ничего не знает о перекодировках, csv, особенностях загрузки, инфоисточниках, одс... и знать не будет.
Решение, которое было придумано:
1) ответственный сотрудник заходит в файл, дописывает еще данные, ведомые только ему. сохраняет
2) вызывает макрос, макрос отрабатывает, раскидывая данные файла xls в заранее подготовленные файлы csv на серваке. каждый csv-файл может содержать от 0 до N строк из одной анкеты, в зависимости от информации (необходимые ключи для ОДС уже определены). Файлы сохраняются.
3) следующий файл раскидывается в эти же csv, строками ниже
4) после этого сотрудник вызывает цепочку BW (или же это происходит автоматом, раз в сутки, неважно) , забирает с сервака данные из файлов.

Соответственно на этапе 2 я получила 3 подводных камня
- вышеозвученная фигня с форматами
- повторный запрос при сохранении файла в формате csv - макрос не закрывает файл без пользователя
- если в строке содержится символ ",", строка заключается в " ", что тоже неудобно

Идеи есть, или промежуточный ексель файл-создавать, а потом перезаписывать как csv каждый раз при сохранении, в таком случае проблема форматов вроде как решается (пока нет проблем), но запрос пользователю на перезапись файла тоже идет :(


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Детский вопрос про csv-формат в excel
СообщениеДобавлено: Пт, апр 06 2007, 17:05 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Ср, авг 10 2005, 09:24
Сообщения: 1023
LadyWind написала:
12-значное число, в каком бы оно формате до этого не стояло, превращается в 1,2345E+11 и оказывается негодным для загрузки в BW. Как с этим бороться?


CSV-файл после сохранения блокнотом смотришь или опять экселем?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Детский вопрос про csv-формат в excel
СообщениеДобавлено: Пт, апр 06 2007, 17:15 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пн, фев 21 2005, 00:50
Сообщения: 10284
Откуда: г.Мышуйск
Пол: Женский
Если сохраняю макросом и просто save, не save as (а мне необходимо сохранить N раз) - то гадость выползает равно как и в блокноте, и в екселе.
при save as пока все норм, но запросы на перезапись, дополнительные запросы на пересохранение - напрягают =\

_________________
Пушномолочная свинья-несушка (тест)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Детский вопрос про csv-формат в excel
СообщениеДобавлено: Пт, апр 06 2007, 17:23 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Ср, авг 10 2005, 09:24
Сообщения: 1023
LadyWind написала:
Если сохраняю макросом и просто save, не save as (а мне необходимо сохранить N раз) - то гадость выползает равно как и в блокноте, и в екселе.
при save as пока все норм, но запросы на перезапись, дополнительные запросы на пересохранение - напрягают =\


на VBA ведь можно самому файлы создавать. Т.е. создаешь тектсовый файл с расширением CSV, и пишешь туда данные через точку с запятой. Потом файл закрываешь...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Детский вопрос про csv-формат в excel
СообщениеДобавлено: Пт, апр 06 2007, 20:53 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пн, фев 21 2005, 00:50
Сообщения: 10284
Откуда: г.Мышуйск
Пол: Женский
Vitaly V.V. - Еще раз.
У меня много файлов екселя, все они одинаковы, но не табличного вида вообще, на 2х листах 100 ячеек, в разных местах, в т.ч. объединенные.
Необходимо с каждого нового файла информацию запихивать в уже существующие csv-шники, на новые строчки :) И только ПОТОМ вся информация пойдет в BW.

_________________
Пушномолочная свинья-несушка (тест)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб, апр 07 2007, 20:53 
Начинающий
Начинающий

Зарегистрирован:
Вс, сен 24 2006, 16:48
Сообщения: 24
Откуда: Москва
Да имхо Виталий дело говорит. И большое количество ёксельных файлов не помеха.

Виталий имеет в виду создание csv файла в макросе средствами VB. Например, так

Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("c:\testfile.csv", True)
a.WriteLine ("1,1,2")
a.Close

Далее записывывать и дополнять этот файл можно через ',' или другой желаемый символ.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб, апр 07 2007, 21:10 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пн, фев 21 2005, 00:50
Сообщения: 10284
Откуда: г.Мышуйск
Пол: Женский
Timer - не обижайтесь, пожалуйста, но прочтите мой пост ВНИМАТЕЛЬНО. Нет ничего хуже, чем, когда пытаясь помочь, вы не вникаете в суть проблемы.
Один файл ексель НЕТАБЛИЧНОГО РАСПОЛОЖЕНИЯ ДАННЫХ - может дать и 15 строчек в файле csv. Следующий файл - еще 5. Третий только одну.
WriteLine - неприменим. Необходимы обращения к ячейкам в книге и csv, открытом в екселе. Либо же создание промежуточных рабочих книг, что очень замедлит работу макроса.

_________________
Пушномолочная свинья-несушка (тест)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс, апр 08 2007, 09:38 
Начинающий
Начинающий

Зарегистрирован:
Вс, сен 24 2006, 16:48
Сообщения: 24
Откуда: Москва
LadyWind написала:
Timer - не обижайтесь, пожалуйста, но прочтите мой пост ВНИМАТЕЛЬНО. Нет ничего хуже, чем, когда пытаясь помочь, вы не вникаете в суть проблемы.
Один файл ексель НЕТАБЛИЧНОГО РАСПОЛОЖЕНИЯ ДАННЫХ - может дать и 15 строчек в файле csv. Следующий файл - еще 5. Третий только одну.
WriteLine - неприменим. Необходимы обращения к ячейкам в книге и csv, открытом в екселе. Либо же создание промежуточных рабочих книг, что очень замедлит работу макроса.


не обижаюсь.
Не очень ясно почему неприменим writeline? почему нельзя последовательно обрабатывать в 1ом случае 15 строчек, потом 5, далее одну строку, чтобы после каждой строки вносить её в csv с помощью writeline?

Так же не совсем понятна необходимость иметь открытый в ёкселе csv. Можно ведь средствами VB открывать csv (без открытия в xl), записывать данные и закрывать.

Иллюстрирующий пример ниже

Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
Dim fs, f, ts, s
Set fs = CreateObject("Scripting.FileSystemObject")

FirstCompile = True
' если 1ая порция xls файлов, то создаём и записываем файл
If FirstCompile Then

fs.CreateTextFile "c:\testfile.csv"
Set f = fs.GetFile("c:\testfile.csv")
Set ts = f.OpenAsTextStream(ForWriting, TristateUseDefault)

Else 'иначе открываем и дополняем

Set f = fs.GetFile("c:\testfile.csv")
Set ts = f.OpenAsTextStream(ForAppending, TristateUseDefault)

End If

Dim str As String
'вместо вычисления str можно внести свою логику обработки 0..N строк анкет
str = Cells(1, 1).Value & "," & Cells(1, 2).Value & "," & Cells(1, 3).Value
ts.WriteLine str

ts.Close


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс, апр 08 2007, 17:06 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пн, фев 21 2005, 00:50
Сообщения: 10284
Откуда: г.Мышуйск
Пол: Женский
Цитата:
Не очень ясно почему неприменим writeline? почему нельзя последовательно обрабатывать в 1ом случае 15 строчек, потом 5, далее одну строку, чтобы после каждой строки вносить её в csv с помощью writeline?
Потому что у меня файл нетабличный.
в строке A только 2 ячейки, A1 и A5, в которых могут существовать данные, в строке B данных не бывает, в строке С объединены ячейки C2 и С3, в них и ТОЛЬКО В НИХ могут быть занесены данные и т.д. И все эти данные надо запихнуть в одну строку файла csv.
Во-вторых, из одного файла я могу получить несколько строчек, опять же, из разрозненных мест файла. Как в файле csv мне прописать символ ентер?
В-третьих, ячейки д.б. именованными (защита от дураков, вставивших строку)
В-четвертых, некоторые ячейки содержат данные с символами ",", и их нужно заключать в кавычки

_________________
Пушномолочная свинья-несушка (тест)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс, апр 08 2007, 20:07 
Начинающий
Начинающий

Зарегистрирован:
Вс, сен 24 2006, 16:48
Сообщения: 24
Откуда: Москва
LadyWind, я понимаю, что приходят различные формы анкет, в которых в разных ячейках на листе расположены поля для ввода, расчётные показатели и проч.

Видимо, не совсем осведомлены с возможностями VB. Макросу не обязательно просматривать каждую строку xls, чтобы потом через WriteLine записывать её в существующем виде в csv.

итак, отвечая по пунктам:
1. в зависимости от типа анкеты можно собирать (конкатинировать) строку из различных разбросанных ячеек. Это достигается путём обращения к конкретным ячейкам листа xls.
пример.
'вместо вычисления str можно внести свою логику обработки 0..N строк анкет
str = Cells(1, 1).Value & "," & Cells(1, 2).Value & "," & Cells(1, 3).Value

2. см. п.1. А символ enter имеет код 10 в ASCII таблице символов
Пример.
str = "ABC" & Chr(10) & "XYZ"

а вообще гря оператор write дописывает текущую строку в csv, writeline дописывает текущую строку и сам переводит каретку (курсор) на следующую, т.е. ставит enter. Так что юзайте writeline и упражняться с кодами ASCII таблицы не придётся ;)

3. не понял где и как именноваными? в csv файле названия столбцов или в xls файле названия полей или может быть комменты на ячейках xls навешаны? поясни плз

4. т.е. если ячейка содержала: <Вася, Петя>, то в в csv должно пойти значение <Вася"," Петя>?
если да, то используй функцию
InStr Function

Returns a Variant (Long) specifying the position of the first occurrence of one string within another.

Syntax

InStr([start, ]string1, string2[, compare])

для нахождения и замены , -> ","


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB