Текущее время: Пт, июл 25 2025, 07:17

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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