Текущее время: Пн, июл 28 2025, 00:49

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


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Преобразование данных при сохранении файла формата XLS в CSV
СообщениеДобавлено: Вт, фев 19 2013, 12:50 
Гуру-маршал
Гуру-маршал
Аватара пользователя

Зарегистрирован:
Пт, янв 30 2009, 09:59
Сообщения: 1594
Откуда: Москва, Минск
Пол: Мужской
Добрый день, коллеги.
Подскажите, пожалуйста, как побороть следующую проблему:
Есть файл формата XLS(XLSX). Сохраняю его в формате CSV(разделитель ;). И полученный CSV-файл загружаю в SAP ERP с помощью cl_gui_frontend_services=>gui_upload.

При этом, если в ячейке XLS(XLSX) файла было указано значение, содержащее символ ", то после сохранения в CSV это значение дополняется еще двойными ковычками. :shock:

Примеры:
1) До сохранения в CSV: 3D LED-Телевизоры 46" и более
После сохранения в CSV: "3D LED-Телевизоры 46"" и более"

2) До сохранения в CSV: ООО "Бимикс"
После сохранения в CSV: "ООО ""Бимикс"""

Подскажите, пожалуйста, может быть есть какие то настройки XLS, которые позволяют не выполнять данное преобразование. при сохранении SCV-файла?
Или может быть есть какой то Функциональный модуль для приведения значения, загруженного в SAP, к "нормальному" виду: "ООО ""Бимикс""" ---> ООО "Бимикс"?

_________________
Лучше быть умным и иногда тупить, чем быть тупым и постоянно умничать!


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Преобразование данных при сохранении файла формата XLS в CSV
СообщениеДобавлено: Вт, фев 19 2013, 13:46 
Начинающий
Начинающий

Зарегистрирован:
Чт, янв 24 2013, 08:19
Сообщения: 3
Я после загрузки использую "FUNCTION text_convert_tex_to_sap".
И судя по кускам кода внутри
Code:
IF sy-subrc = c_rc0 AND <f_source> = '"""'.

может чтото и обрабатывает похожее.

Можно в соседних с text_convert_tex_to_sap ФМ поковыряться - может там чтото будет.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Преобразование данных при сохранении файла формата XLS в CSV
СообщениеДобавлено: Вт, фев 19 2013, 14:26 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Чт, ноя 20 2008, 16:29
Сообщения: 245
Откуда: RU->DE
Пол: Мужской
Чтобы избежать лишних ковычек я обычно просто выделяю лист и копирую в текстовый редактор. Получается файл с разделителями табуляции который успешно подсовывается SAPу (тому же GUI_UPLOAD)


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразование данных при сохранении файла формата XLS в CSV
СообщениеДобавлено: Вт, фев 19 2013, 14:57 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
BaBuin написал:
Чтобы избежать лишних ковычек я обычно просто выделяю лист и копирую в текстовый редактор. Получается файл с разделителями табуляции...

Тот же результат можно получить, если сохранить из Excel в формате TXT :wink:

_________________
С уважением,
Удав.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразование данных при сохранении файла формата XLS в CSV  Тема решена
СообщениеДобавлено: Вт, фев 19 2013, 15:36 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 16 2010, 09:57
Сообщения: 106
Откуда: СПб
Пол: Мужской
Удав написал(а):
Тот же результат можно получить, если сохранить из Excel в формате TXT
Это каким форматом из эксельного списка надо сохранять? Что-то у меня в 2010 не очень получается с txt или csv... Пока только формат *.prn - "Форматированный текст (разделитель - пробел)" сохранил кавычки без задвоения и без взятия в кавычки всей строки. Причем, не очень уверенно - если ширины колонки не хватает для отображения, то символы пропадают...

Другое дело, что можно попробовать точку с запятой добавить прямо в конец значения ячейки и подогнать ширину колонок, чтобы все символы отображались. Тогда в файле - почти требуемая картина (может, с каким-нибудь лишним пробелом, который надо будет откусить).

Почему живо интересуюсь - потому, что у меня встречалось подобное. И сейчас подумал - может, я всё-таки что-то упустил ранее.

Когда же сам встретился с этим явлением, то не стал бороться с ним на стороне Excel (пытался, но показалось бесполезным), а стал очищать уже загруженные в SAP строки. Есть у меня такая процедурка очистки с использованием механизма регулярных выражений. Вроде, пока работает без нареканий.
Code:
FORM zld_cnv_xl_doublequotes CHANGING p_text TYPE string.

  DATA tmpstr TYPE string.

  IF p_text IS NOT INITIAL.
    tmpstr = p_text.

    "проверим, есть ли двойные кавычки в строке в принципе?
    FIND FIRST OCCURRENCE OF '"' IN tmpstr.
    IF sy-subrc = 0. "двойные кавычки в строке есть

      FIND REGEX '\A"("")*[^"]' IN tmpstr. "нечетное кол-во кавычек слева, начиная с 1

      IF sy-subrc = 0. "найдено
        "удаляем самую левую кавычку - она именно ограничительная, а не исходная
        SHIFT tmpstr BY 1 PLACES. "LEFT
      ENDIF.

      FIND REGEX '[^"]("")*"\Z' IN tmpstr. "нечетное кол-во кавычек справа, начиная с 1

      IF sy-subrc = 0. "найдено
        "удаляем самую ПРАВУЮ кавычку - она именно ограничительная, а не исходная
        SHIFT tmpstr BY 1 PLACES RIGHT CIRCULAR.
        SHIFT tmpstr BY 1 PLACES. "LEFT
      ENDIF.

      FIND REGEX '\A""("")+\Z' IN tmpstr. "строка из одних кавычек - четное количество кавычек, начиная с 4

      IF sy-subrc = 0. "найдено; это может быть только тогда, когда исходная строка была из одних кавычек
        "удаляем две кавычки, считая, что они ограничительные
        SHIFT tmpstr BY 2 PLACES. "LEFT
      ENDIF.

      "пары двойных кавычек заменяем на одну двойную кавычку
      FIND FIRST OCCURRENCE OF '""' IN tmpstr.
      IF sy-subrc = 0. "двойные ДВОЙНЫЕ кавычки в строке есть
        REPLACE ALL OCCURRENCES OF '""' IN tmpstr WITH '"'.
      ENDIF.

    ENDIF.

    p_text = tmpstr.
  ENDIF.

ENDFORM.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Преобразование данных при сохранении файла формата XLS в CSV
СообщениеДобавлено: Ср, фев 20 2013, 00:09 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Gustav написал:
Это каким форматом из эксельного списка надо сохранять? Что-то у меня в 2010 не очень получается с txt или csv...

Текстовые файлы (с разделителем табуляции) (*.txt)

После "Шаблон Excel 97-2003 (*.xlt)"

_________________
С уважением,
Удав.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразование данных при сохранении файла формата XLS в CSV
СообщениеДобавлено: Ср, фев 20 2013, 06:30 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Чт, ноя 20 2008, 16:29
Сообщения: 245
Откуда: RU->DE
Пол: Мужской
Текстовые файлы с разделителями табуляции как раз и выдают лишние кавычки. Спасает, повторюсь, только копирование в текстовый файл.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразование данных при сохранении файла формата XLS в CSV
СообщениеДобавлено: Ср, фев 20 2013, 07:24 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
BaBuin написал:
Текстовые файлы с разделителями табуляции как раз и выдают лишние кавычки.

Лишние кавычки дает CSV.

_________________
С уважением,
Удав.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразование данных при сохранении файла формата XLS в CSV
СообщениеДобавлено: Ср, фев 20 2013, 09:28 
Гуру-маршал
Гуру-маршал
Аватара пользователя

Зарегистрирован:
Пт, янв 30 2009, 09:59
Сообщения: 1594
Откуда: Москва, Минск
Пол: Мужской
Коллеги, спасибо за ответы.
Сохранение XLS файла в текстовом файле, как писал Удав, не помогает - значение дополняется двойными ковычками.
ФМ text_convert_tex_to_sap не удается запустить в тестовом режиме - выдает ошибку "Ошибка при генерации кадра теста."
У вас такая же ошибка?

Пробую вариант, предложенный Gustav.

_________________
Лучше быть умным и иногда тупить, чем быть тупым и постоянно умничать!


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Преобразование данных при сохранении файла формата XLS в CSV
СообщениеДобавлено: Ср, фев 20 2013, 10:01 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 16 2010, 09:57
Сообщения: 106
Откуда: СПб
Пол: Мужской
В общем, с учетом публикаций в сети и личного опыта, освеженного сегодня утром, могу констатировать следующее:

При выгрузке из Excel и CSV, и TXT (с табуляциями):

1. дублируют двойные кавычки в значениях полей (ячеек) - например: ООО "Бимикс" превращается в ООО ""Бимикс""

2. заключают в двойные кавычки всё значение поля (ячейки), если поле содержит:
* перевод строки (любой: CR, LF, CRLF)
* двойную кавычку - например, ООО "Бимикс" после превращения в ООО ""Бимикс"" окончательно становится "ООО ""Бимикс"""
* символ разделителя списка, указанный в региональных установках Винды (обычно это либо запятая для англ.версии, либо точка с запятой для русской)
* возможно, что-то еще (еще какой-нибудь особый символ или символы)...

DED_MOROZ написал:
Пробую вариант, предложенный Gustav.
Welcome! Если в свою очередь как-то улучшите или покритикуете - с удовольствием воспользуюсь/восприму.

P.S. OFFTOP НА ЗАМЕТКУ: Пользуясь случаем, проверил еще десятичный разделитель при выгрузке в CSV или TXT.

Так вот:
* при проведении операции экспорта ВРУЧНУЮ через пользовательский интерфейс Excel (Сохранить как) разделитель будет таким, каким он установлен в региональных настройках Винды.
* при ПРОГРАММНОМ же экспорте (неважно, выполняется ли он в Excel на VBA или в ABAP с OLE2 и CALL METHOD OF) в качестве разделителя ВСЕГДА выводится ТОЧКА.

Можно проверить это в Excel в окне отладки редактора VBA (Immediate window), используя следующие операторы:
ActiveWorkbook.SaveAs "C:\proba1.txt", xlText
или
ActiveWorkbook.SaveAs "C:\proba1.csv", xlCSV


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

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


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

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


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

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