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

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

  1. Lina

    Lina Гость

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

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

    Вложения:

  2. Klido

    Klido Гость

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

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

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

    amigolinx Гость

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

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

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

    amigolinx Гость

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

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

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

    Lina Гость

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

    amigolinx Гость

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

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

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

    hosm * so what *

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

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

    yerke Well-Known Member

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



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

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

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

    amigolinx Гость

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

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

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

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

    amigolinx Гость

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

    hosm * so what *

    Репутация:
    0
    Регистрация:
    18 май 2009
    Сообщения:
    2.442
    Симпатии:
    8
    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

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

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

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

    nvyush Well-Known Member
    Lotus team

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

    amigolinx Гость

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

    hosm * so what *

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

    Lina Гость

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

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