Поиск:

Ответ в темуСоздание новой темы Создание опроса
> работа с Excel с использованием Spreadsheet, проблема с чтением email'ов 
:(
    Опции темы
m_maxser
Дата 21.10.2011, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 5.2.2008

Репутация: нет
Всего: нет



Здравствуйте.
Есть некий xls-файл со списком людей и информацей о них. Там есть поле email со списком контактных ящиков. Вот эти ящики мне и нужно вытащить. Задача не сложная, код написал, все прекрасно работало на сделанных мной тестовых xls-файлах. Но во время тестирования с настоящим файлом, который будет периодически приходить в обновленном виде, возникли проблемы: 
  • Некоторые адреса вбиты просто текстом, некоторые как гиперссылка.  Обычные выбираются нормально, а вот с гиперссылками проблемы. Например вместо вывода "[email protected]" выведется "mailto:[email protected]". 
  • Есть вообще глючные записи. Например в ячейке вбит адрес "[email protected]", а гиперссылка для него указана "[email protected]". В таком случае выведется не "[email protected]", который мне нужен, a "mailto:[email protected]"
  • Если ящик является гиперссылкой, то помимо приставки "mailto:" в конец добавляются кракозябры. Например полное значение будет таким: "mailto:[email protected]塹ᴻ䡿ⲯ嶂藄挧ꮥ"

Для вышеописанного заметил следующее: данные берутся из ячейки, только когда email-адрес не является гиперссылкой. Если адрес-гиперссылка, они берутся не из ячейки(!). Но откуда не знаю :( 

Справиться смог только с первым пунктом, путем обычного удаления подстроки "mailto:". Второй и третий пункт не решил, т.к. не знаю причину проблемы.

А теперь ВНИМАНИЕ! smile. Если этот же файл открыть, выбрать колонку с гиперссылками, щелкнуть правой кнопкой, выбрать "удалить гиперссылки" и сохранить. То все нормально работает. Даже если по новой создавать гиперссылки для ящиков, то ящики адекватно считываются. Т.е. причина в том, что у того, кто создавал этот файл "РУКИ НЕ ОТ ТУДА" :(. Но мне от этого не легче. Скриптом вообще, не я буду пользоваться. А заставить человека пересохранять файл я не властен.

Вот сам скрипт, в упрощенном виде:
Код

def index
    require 'spreadsheet'
    workbook  = Spreadsheet.open('source/source.xls')
    worksheet = workbook.worksheet('Sheet1') 

    emails = []
    email_regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
    
    0.upto worksheet.last_row_index do |index|
      row = worksheet.row(index)
      if !row.nil? && !row[5].nil? && !row[5].empty?
        email = row[5]
        scan_key = 'mailto:'
        if !email.scan(scan_key).empty?
          email = email[scan_key.length .. -1]
        end
        emails.push(email_regex.match email) if email_regex.match email
      end
    end
    @emails = emails.join(', ')
    @title = "E-mail list #{emails.count}"
  end


Помогите разобраться.

Спасибо.

P.S.: Сам понимаю, что куда удобнее было бы использовать xml, но мне не дают :(. Только xls. Как же я его ненавижу!
PM MAIL   Вверх
source777
Дата 21.10.2011, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 12
Всего: 56



Цитата(m_maxser @  21.10.2011,  08:54 Найти цитируемый пост)
Помогите разобраться.

C тем, кто файл создаёт?  smile 

Цитата(m_maxser @  21.10.2011,  08:54 Найти цитируемый пост)
Сам понимаю, что куда удобнее было бы использовать xml

Скорее уж CSV, в него кстати можно сохранить из Excel.


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
m_maxser
Дата 21.10.2011, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 5.2.2008

Репутация: нет
Всего: нет



можно было бы и с CSV. Но пользователь не будет пересохранять файлы. Одного еще научить можно, но забыл сказать, что подобные файлы приходят из разных источников.
PM MAIL   Вверх
source777
Дата 21.10.2011, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 12
Всего: 56



Понятно, намёков на то, что без примера некорректно сформированного файла помочь тебе практически невозможно, ты не понимаешь...
Давай тогда пользователей обсудим, где они такие водятся? Какие версии Excel используют?


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
m_maxser
Дата 25.10.2011, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 5.2.2008

Репутация: нет
Всего: нет



Ладно, проехали smile. Выложить настоящий файл с маилами не могу, по понятным причинам. А если попытаться отредактировать какой-нибудь адрес, подставив левый. То эта строка будет считываться нормально. Вот такая ерунда. Придется оставить все как есть. Скрипт свое дело делает, хоть файлы все-таки приходится пересохранять.

Спасибо.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Ruby on Rails"
source777
  • С чего начать? начинаем
  • Документацию смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Ruby On Rails | Следующая тема »


 




[ Время генерации скрипта: 0.1273 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.