Отказывается читать таблицу Word при вертикальном объединении столбцов

Тема в разделе "Lotus - Программирование", создана пользователем Lina, 9 дек 2009.

  1. Lina

    Lina Гость

    Добрый день!
    Стоит задача реализовать заполнение БД импортом по заполненным анкетам человеков.
    Так вот шаблон анкеты (Word) совершенно не адаптирован под импорт, но, боюсь, задача стоит именно в том, чтобы безболезненно для клиента перейти на использование БД и оставить анкету неизменной.
    В файле образец таблицы. Дело в том, что когда оставляешь небольшое количество последовательных ячеек, ошибок не появляется...
    Обращаюсь я к ним след. образом:

    Код (Text):
    Set vTable1 =docWord.Tables(1)
    content =vTable1.Rows(14).Cells(2).Range.Text
    Если в vTable1 есть объединения вертикальные, на 2 строчке примера он выдает ошибку. Есть ли с пособы работы с такими таблицами?
     

    Вложения:

  2. Klido

    Klido Гость

    эх, за такие "шаблоны" стоило бы кое-что удалять у их создателей :rolleyes:

    когда-то ещё на 5-ке не вышло у меня победить подобные табличные извращения, но там повезло - было немного заполненных файлов и я быстренько их вбил в красивые лотусиные доки...

    здесь же, если не появилось мега-чего-то-там (кстати, мож как-то в xml вордовское файло выгрузить и потом затянуть?) порекомендовал бы оставить существующие анкеты как есть, а новые сразу заносить в базу уже...
     
  3. amigolinx

    amigolinx Гость

    Судя по куску кода, это ФИО нужно забрать? Есть вариант обратиться к ячейке следующим образом
    Код (Text):
    content =vTable1.Cell(14, 2).Range.Text
    Собственно таким же макаром можно попытаться и другие "поля" читать...
     
  4. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.075
    Симпатии:
    300
    как-то выгружал ворд в ХМЛ - впечатление гнетущее :rolleyes: (мсо2003)
     
  5. amigolinx

    amigolinx Гость

    последствия пальбы из плазмагана в курятнике :rolleyes: не партесь, тут оно не требуется
     
  6. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.075
    Симпатии:
    300
    после "этого" я понял - почему апач не "довел" POI вордовый до всех фич ;)
    там реально - ужос
     
  7. Lina

    Lina Гость

    В моем случае затык с объединением вертикальным. Т.е. если есть в таблице такое объединение, доступ к любой ячейке этой таблицы невозможен. Она не берется как объект. Я вижу два пути: отмена объединения - такого метода в объекте Table не нашла??? и последняя идея - копирование этой таблицы в новую созданную таблицу автоматом и работа уже с таблицей 2, где никаких объединений нет. Но не могу правильно выстроить код создания новой таблицы и копирование этой через, опять же, объект Table. Может быть, есть какие-то идеи по поводу копирования? Хотя это вопрос скорее к тем, кто ан VBA монстрит.
     
  8. amigolinx

    amigolinx Гость

    Да нет же, можно получить доступ. по ходу вы не пробовали/пропустили
    <!--shcode--><pre><code class='auto vbscript'>content =vTable1.Cell(14, 2).Range.Text[/CODE]
    У меня подобные конструкции отрабатывают четко на любых объединениях (хоть вертикальных, хоть горизонтальных), главное знать жесткие индексы ячейки, откуда берутся данные.
    Объясню: в вашем коде вы пытаетесь обратиться к конкретной ячейке со стороны строки таблицы, взяв затем ее по порядковому номеру в этой строке. Разумеется, в таком случае будет ошибка, ибо строка включает в себя две объединенных. А нужно обращаться к ячейке напрямую, как советую - по четкому ее "адресу", не затрагивая строки/столбцы как сущность, тогда все пройдет на ура. Останутся тока грабли, если нужно перебирать ячейки в цикле - тогда нужно будет добавить нечто вроде обработчика ошибок
     
  9. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.075
    Симпатии:
    300
  10. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    Split Method работает с Cell и Cells, посмотрите хелп ВБА. Может, Вам поможет, только задание параметров имя:=значение лотус не поддерживает (имхо)
    Смотрю, тема так и просится в ветку Visual Basic? :newconfus:

    Добавлено: И проверьте пример amigolinx, может, вы просто индексом ошиблись?
    вроде с объединением работало, доставали данные.
     
  11. yerke

    yerke Well-Known Member

    Регистрация:
    28 авг 2007
    Сообщения:
    392
    Симпатии:
    0
    здесь врядли ошибка при выборе индекса ячейки
    кажется эт глюк толи лотоса то ли ворда



    у меня тоже был такой случай
    после того как сдеал вертикал мердж в таблице ворда
    не смог доставать некоторые ячейки таблицы

    выходило сообщ типа "не могу найти ячейку в семействе ячеек" что ли

    замучился с этим
    и передалал отчет по Ексел
    :newconfus:
     
  12. amigolinx

    amigolinx Гость

    Народ, я ща буду плакать :newconfus:. Ну шо за игнор? Да попробуйте ж уже наконец что amigolinx тут распинается и советует :) Или пошлите его уже прямым текстом хотяб :)

    И не токо - она еще и в РТФМ-ветку просится ;)
     
  13. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.075
    Симпатии:
    300
  14. amigolinx

    amigolinx Гость

    Мамма мия! Пошли танки в дело :newconfus: А всего-то требуется вытащить из жеско заданных ячеек (индексы которых мы знаем стопудова наперед) пускай и столь креативной таблицы. Мне это напоминает "Записки невесты программиста" Экслера - тот момент, где Серега пишет программулину для "быстрой" распечатки свадебных приглашений :)
     
  15. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    lmike - в этой теме, думаю, говорить это бесполезно.
    yerke
    Lina
    итак, VBA. если я Вас правильно поняла, мы вложенные таблицы не рассматриваем, простое объединение :newconfus:
    Вот что я имела ввиду под "индексом ошиблись":
    простой эксперимент, таблица в ворде: 3 столбца, 3 строки, объединяем ячейки - в 1м столбце 1-ю и 2-ю строку.
    простой макрос:
    Код (Text):
    Dim TBL As Table
    Set TBL = ActiveDocument.Tables(1)
    MsgBox TBL.Cell(1, 1).Range.Text ' тут OK - наша объединенная ячейка
    MsgBox TBL.Cell(2, 1).Range.Text ' тут ошибка
    Ячейка (2, 1) недоступна, к ней не обратишься (Запрашиваемый номер семейства не сущ-ет).
    но текст объединенной ячейки получить можно из (1, 1) - левой верхней ячейки объединения.
     
  16. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.075
    Симпатии:
    300
    OKEN
    amigolinx
    ведь велик человек пилит, причём с квадратными колесами, и из целого куска дерева :newconfus:
    вляпается полностью, натиражирует форм и доков, а потом скажет - хочу на сервере исполнять и с чем-нить интегрить...
    приложение на "одно боевое действие" - напрасная трата вемени и сил (учитывая и отсутствие навыков в "технологиях")

    расширить кругозор, "застасвить" думать, вырабоать подход, выдвинуть и обсудить идею... - это форум

    а просто ответ на вопрос - общением с колцентром попахивает (ничего толкового, но масса времени ушло) :)
    для этого есть документация, базы знаний
     
  17. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Золотые слова!
     
  18. amigolinx

    amigolinx Гость

    lmike, красиво излогаешь и под каждым твоим словом я с готовностью подпишусь. Но человек в данном случае не пилит велик - он на нем уже сидит, и судя по канве разговора пытается прикрутить к нему еще и камазовский бампер. Вот как в таком случае "заставить думать"? Только дать возможность проехаться и набить шишку, ибо свои шишки больнее, чем чужие - отсюда кмк и произрастет вопрос "а шо я не так делаю?", а это уже начало того "думать", о котором ты говоришь.
     
  19. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    lmike прав. И если бы не он, тема уже бы плавно переехала в раздел VB (не увидела вовремя)
    Но вот девушка что-то испугалась наших советов и убежала :)
    Может, и задумается :newconfus:
     
  20. Lina

    Lina Гость

    Спасибо, милый человек!!! Вы совершенно правы, при таком подходе всё чудненько работает! Так что тысячу вам спасибо за ответ))))
    А вот интересно, фотку можно как-то взятЬ из вордовской картинки?
     
Загрузка...

Поделиться этой страницей