Текущее время: Вс, июл 27 2025, 18:18

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


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

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


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

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