Как определить уровень заголовков?
Мне в этой задаче необходимо их распределить по уровням и вытащить в переменные.
Ранее эту задачу я решила, преобразовав таблицу Ворд к более удобоваримову виду, т.е. объединяла ячейки, убрала строки, где присутствует словосочетание «Ст. нагр» и удаляла пустые строки. Короче, работала в Ворде через Билдер. Затем по условиям на пустоты и не пустоты в столбцах вычленяла нужные строки. В коротком вордовском файле все работало быстро. А когда загрузила файл на 40 страниц да еще в шаблоне с рамками, то обработка шла 20 мин. Ворд сильно тормозит, пока удаляет, объединяет и т. д..
Как мне сделать так, чтобы строка
Строка
Строка
Затем строки, не относящиеся к заголовку (оперативные данные) и снова строка
Строки, где есть словосочетание
«Ст. нагр» не должны участвовать в этом цикле.
На выходе, я так понимаю, должен быть массив из 3 переменных, каждая из которых соответствует своему уровню заголовков.
От меня уже «дым идет». Помогите, пожалуйста.
:angel:
Не уловил задачу...
А что ты подразумеваешь под фразой "уровень заголовка"?
Не уловил задачу...
Структура враспределения заголовков в данной таблице такова:
1 уровень - «Электрооборудование, устанавливаемое заводом-строителем»
2 уровень - «пом.07134»
3 уровень - «Схема электрическая внешних соединений кабелей системы «Двина». 18280-614-071»
Т.е,
Заголовок 2
Заголовок 3
Если перейти на строку «Схема соединения электропривода среднего гребного винта 18280-621-002», то перед нею отсутствуют 2 предыдущих уровня заголовков.
Допустим, есть массив Title[3].
Тогда, обрабатывая первые три строки будет
Title[2] = «пом.07134»
Title[3] = «Схема электрическая внешних соединений кабелей системы «Двина». 18280-614-071»
Дойдя до второго участка, где могут быть заголовки (со строки "Прибор ДВ4-1" до "Ст. нагр. 04020100" все должно быть пропущено, так как это не заголовки), тогда
Title[2] = ""
Title[3] = «Схема соединения электропривода среднего гребного винта 18280-621-002»
Во такая схема.:P
Если совпадение только с третьим, то Титл[0]="",Титл[1]="",Титл[2]=Текст. И т.д.
Из того, что я смог сообразить... Тебе нужно все табличные заголовки сверять на предмет совпадения с форматами твоих заголовков (всех уровней). Соответственно, если строка сразу оказывается заголовком первого уровня, то запихиваем его в Титл[0], если такового не оказывается, а оказывается совпадение с форматом заголовка вторго уровня, то Титл[0]="" , Титл[1]=Текст...
Если совпадение только с третьим, то Титл[0]="",Титл[1]="",Титл[2]=Текст. И т.д.
Совершенно правильно поняли.
Совершенно правильно поняли.
Ээээ... А в чем тогда вопрос?
В том, как скопировать из ворда в переммую чтоль?
Ээээ... А в чем тогда вопрос?
В том, как скопировать из ворда в переммую чтоль?
Именно в этом. Я попыталась обработать всю таблицу. Т.е., нужно распределить текст так:
Заголовок 2
Заголовок 3
Текст оперативных данных (там, где заполнены 1, 2 или 4 столбцы)
(Причем, если текст разорван, т.е. распределен на несколько строк, а разделителем является пустая строка, то эту строку нужно склеить)
А строки, где есть "Ст. нагр" вообще проигнорировать
В общем, код я сделала, но что-то он не верно делает, а где ошибка, понять не могу.
В общем, код я сделала, но что-то он не верно делает, а где ошибка, понять не могу.
Что тут скажешь... Кидай код. Поглядим.
Только поясни, что он не верно делает и что ты от него хочешь...
Самый скоростной код будет, пожалуй, если просто полностью скопируешь в некотором формате содержимое всей таблицы сразу к себе в прогу (в какой-нить массивчик), а дальше разгребай этот массивчик, как твоей душе угодно и ворд не трогай - тормоз он... основательный... ненавижу с ним работать... и матерится вечно по чем зря!
Присоединяю всю программу, поскольку здесь ее не вместить. Билдер 6.0.
Никогда так не делала. Хотелось бы посмотреть пример (если это возможно):{
А Ворд действительно тормозит. Excel работает быстро, а Ворд нет. Если бы работать с Вордом, это мне проще. Я Ворд знаю почти досконально. И могу почти все запрограммировать через Билдер. Но производить изменения в огромной таблице оказалось невозможно. Меня сбивает зацикленность на работе в самой таблице.
Компиллится у меня не хочет (я себе RX-ину не ставил), но так как я сделал глупость - попытался это сделать - у меня теперь и ехе-шника нет :D Но, не важно...
Кстати... Я наверно деревня :)
Я непосредственно в билдере не работал с вордом. Работал только в делфике. Дак там писал просто
Но, не важно :) Пишу, как писал:
Чтоб скопировать содержимое таблицы в переменную (в строчку) нужно написать
TabStr - String.
Формат там, вроде, простейший (ячейки в строчке разделяются символами переноса строки и символами новой ячейки, хочешь константы объяви, а хочешь просто как char)
Компиллится у меня не хочет (я себе RX-ину не ставил
RX - это библиотека? Она у меня стоит, но в этой программе я не использую ни одного компонента из нее.
Что касается массива: а как из переменной, куда я скинула таблицу вытаскивать ячейки?
И пока не удалось выяснить, почему у меня неверное завершение программы?:???:
RX - это библиотека? Она у меня стоит, но в этой программе я не использую ни одного компонента из нее.
Что касается массива: а как из переменной, куда я скинула таблицу вытаскивать ячейки?
И пока не удалось выяснить, почему у меня неверное завершение программы?:???:
RX-библиотека. И хоть ты ее не пользовала, прога все-таки ее запрашивает... хз, куда она прописалась.
Ячейки в строке разделены спец-символами (какими? хз. Проверишь - это не сложно). Соответственно, бежишь себе в цикле по этой строчке и, как встречаешь эти символы, значит новая ячейка пошла.
Чтобы узнать началась ли новая строчка в таблице придется еще из ворда вытащить ColCount (число столбцов) данной таблицы. Соответственно, каждая ColCount'овая ячейка (если нумеровать ячейки с 0) будет располагаться в начале новой строчки.
С завершением не выяснил, т.к. прога отсутствует и не компиллится, а на взгляд определить сложновато будет...
Пока не совсем понял, что означает в конце просто Quit()...
Я из ворда бы выходил Wapp.Quit(false) (если без сохранения)
Вру.. Понял.. Это твоя функция.
По поводу завершения программы - все сделано правильно. Прерывается она на этом месте
Title[x] = Next_naim[1];
x = x + 1; //?
}
только на одной строке таблицы файла (на листе 5), фраза такая
Убираю эту строку из таблицы или даже просто текст из ячейки, создается текстовый файл.
Эта строка - строка заголовка 3-го уровня. Чем она отличается от предыдущего заголовка этого же уровня - не знаю.
Вот если бы нашелся человек, который бы смог откомпелировать программу. Может быть понял бы в чем дело...:}
Jump, спасибо за помощь!:)