[WORD] Нужно перевести таблицу в текст!

Программирование на Visual Basic for Applications
kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

[WORD] Нужно перевести таблицу в текст!

Сообщение kibernetics » 07.04.2009 (Вт) 20:53

Народ, кто-нибудь пробовал отрисовать таблицу знаками "-" и "!" ?
В общем, есть динамическая таблица в ворде, я беру Row, просчитываю сколько в Row ячеек, получаю ширину ячейки в Single,
но никак не могу сопоставить значение Single - количеству символов.
Как можно определить по ширине ячейки, сколько тирешек печатать?

karlex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 30.03.2009 (Пн) 20:25
Откуда: Пермский край, г.Кунгур

Re: [WORD] Нужно перевести таблицу в текст!

Сообщение karlex » 07.04.2009 (Вт) 21:04

Определи ширину одной "тирешки", подели ей ширину ячейки, собственно получишь кол-во.
Все гениальное — просто!
-------------------------------------
Кто ищет — тот всегда найдет!
-------------------------------------
Лень — двигатель прогресса.
Прогресс — двигатель лени.

Lilo
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 30.03.2009 (Пн) 12:44

Re: [WORD] Нужно перевести таблицу в текст!

Сообщение Lilo » 08.04.2009 (Ср) 6:32

single/(длину '-') * row

karlex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 30.03.2009 (Пн) 20:25
Откуда: Пермский край, г.Кунгур

Re: [WORD] Нужно перевести таблицу в текст!

Сообщение karlex » 08.04.2009 (Ср) 7:12

Lilo писал(а):single/(длину '-') * row

Длину? Может ширину?

Умножить на номер строки? (... * row)
Хм... А может кол-во строк? (RowsCount) Все равно не понятно...
А может всетаки умножить на кол-во столбцов? (... * ColumnsCount)
Но и тут нас может ждать неудача, т.к. не известно заранее, у всех ли ячеек ширина равна, ведь автор об этом не рассказал.
Все гениальное — просто!
-------------------------------------
Кто ищет — тот всегда найдет!
-------------------------------------
Лень — двигатель прогресса.
Прогресс — двигатель лени.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: [WORD] Нужно перевести таблицу в текст!

Сообщение alibek » 08.04.2009 (Ср) 7:33

karlex писал(а):Определи ширину одной "тирешки", подели ей ширину ячейки, собственно получишь кол-во.

А ты не забыл, что нужно учитывать еще и величину расстояния между символами?
Lasciate ogni speranza, voi ch'entrate.

Lilo
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 30.03.2009 (Пн) 12:44

Re: [WORD] Нужно перевести таблицу в текст!

Сообщение Lilo » 08.04.2009 (Ср) 8:21

karlex писал(а):
Lilo писал(а):single/(длину '-') * row

Длину? Может ширину?

Умножить на номер строки? (... * row)
Хм... А может кол-во строк? (RowsCount) Все равно не понятно...
А может всетаки умножить на кол-во столбцов? (... * ColumnsCount)
Но и тут нас может ждать неудача, т.к. не известно заранее, у всех ли ячеек ширина равна, ведь автор об этом не рассказал.


ну во-первых, под "длиной" издревле люди подразумевали расстояние между двумя самыми удаленными точками (даже слова похожи "длинный" и "удаленный")

на счет (...*row) я конечно загналась, здесь имелось в виду количество ячеек в row, назовем его count. Тогда получаем соотношение

count*single/(длину '-' вместе с промежутком)

в случае неоднородной ширины ячеек, используем массив

i=1 to count
sum=sum+single(i)/(длину '-' вместе с промежутком)

ЗЫ это все подразумевалось, мог бы сам догадаться

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: [WORD] Нужно перевести таблицу в текст!

Сообщение alibek » 08.04.2009 (Ср) 8:40

Lilo писал(а):count*single/(длину '-' вместе с промежутком)

И чему же равен промежуток?
Lasciate ogni speranza, voi ch'entrate.

karlex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 30.03.2009 (Пн) 20:25
Откуда: Пермский край, г.Кунгур

Re: [WORD] Нужно перевести таблицу в текст!

Сообщение karlex » 08.04.2009 (Ср) 8:57

alibek писал(а):А ты не забыл, что нужно учитывать еще и величину расстояния между символами?

Ладно бы забыл, а то ведь даже не знал =(
Надо будет поэксперементировать.

Lilo
На счет "мог бы догадаться", ты мог бы тоже догадаться, что я догадался =), а вот догадаются ли все, кто увидит твое сообщение?
Все гениальное — просто!
-------------------------------------
Кто ищет — тот всегда найдет!
-------------------------------------
Лень — двигатель прогресса.
Прогресс — двигатель лени.

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Re: [WORD] Нужно перевести таблицу в текст!

Сообщение kibernetics » 08.04.2009 (Ср) 9:50

Стоит упомянуть, что стиль используемый для текста в таблице моноширинный (Courier New), и во всех строка и ячейках одинаков. Всегда составляет Font.Size = 10.
И сама тирешка также отрисовывается этим же шрифтом.

gjghjc
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 659
Зарегистрирован: 13.10.2002 (Вс) 8:28
Откуда: БАЛАКЛАВА!!

Re: [WORD] Нужно перевести таблицу в текст!

Сообщение gjghjc » 08.04.2009 (Ср) 13:48

Кол-во тирешек = максимально возможной длине содержимого ячейки + 2-3 тирешки для "типа форматирования" в этой ячейке
Утро добрым не бывает!

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Re: [WORD] Нужно перевести таблицу в текст!

Сообщение kibernetics » 08.04.2009 (Ср) 17:44

gjghjc писал(а):Кол-во тирешек = максимально возможной длине содержимого ячейки + 2-3 тирешки для "типа форматирования" в этой ячейке


я честно гря вообще ничего не понял...

gjghjc
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 659
Зарегистрирован: 13.10.2002 (Вс) 8:28
Откуда: БАЛАКЛАВА!!

Re: [WORD] Нужно перевести таблицу в текст!

Сообщение gjghjc » 08.04.2009 (Ср) 18:25

Если я правильно понял то тебе нужно перегнать вордовскую табличку в текстовый файл, но при этом оформление должно выглядеть как таблица?
1. Для начала найдем самое длинно слово (словосочетание) в таблице
2. При помощи Len () найдем количество символов в этом слове.
3. К полученому значению прибавим 2 (если столбец №1 ) и 1 если любой последующий (Этим учитывается что под первым и последним знаком "-" рисующим ячейку твоей таблицы будет стоять символ "|")
Это и будет минимальным необходимым количеством знаков "-", которое необходимо для перевода таблицы в псевдотаблицу границы ячеек которой выделены знаками "-" и "|"
Например слово ВАСЯ самое длинное в 1-ом столбце твоей таблицы, тогда для обозначения границ ячейки тебе нужно будет напечатать 6 знаков "-"
Код: Выделить всё
-----------
|вася|Петя|
-----------
|ася |етя |
-----------
|ся  |тя  |
-----------
|я   |я   |
-----------
Утро добрым не бывает!

karlex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 30.03.2009 (Пн) 20:25
Откуда: Пермский край, г.Кунгур

Re: [WORD] Нужно перевести таблицу в текст!

Сообщение karlex » 08.04.2009 (Ср) 18:35

alibek
Видимо я тебя не понял, про какие промежутки ты говорил?
Потому что при ширине ячейки кратной ширине "тирешки", ширина получаемой последовательности "тирешек" равна ширине ячейки.
Проверял через TextWidth(), String() ну и формула о которой я говорил.

kibernetics
Ты еще не сделал что ли?
Все гениальное — просто!
-------------------------------------
Кто ищет — тот всегда найдет!
-------------------------------------
Лень — двигатель прогресса.
Прогресс — двигатель лени.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: [WORD] Нужно перевести таблицу в текст!

Сообщение alibek » 09.04.2009 (Чт) 7:17

karlex писал(а):Видимо я тебя не понял, про какие промежутки ты говорил?

Сделай посимвольный вывод текста куда-нибудь (Print Mid$(text,i,1);).
Потом включи курсив и повтори вывод.
Тогда сразу увидишь, что означает интервал между символами.
Lasciate ogni speranza, voi ch'entrate.

karlex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 30.03.2009 (Пн) 20:25
Откуда: Пермский край, г.Кунгур

Re: [WORD] Нужно перевести таблицу в текст!

Сообщение karlex » 09.04.2009 (Чт) 8:10

alibek писал(а):Тогда сразу увидишь, что означает интервал между символами.

Эх... ну попробовал, ну вывел он мне символы и что? =)
Ну да, интервал между символами есть, не спорю, иначе они бы сливались, только я вот понять не могу, как его нужно учитывать при реализации сабжа?
У меня все нормально получается (вроде) через вышеперечисленные функции и формулу, может TextWidth всетаки все учитывает?
Все гениальное — просто!
-------------------------------------
Кто ищет — тот всегда найдет!
-------------------------------------
Лень — двигатель прогресса.
Прогресс — двигатель лени.

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Re: [WORD] Нужно перевести таблицу в текст!

Сообщение kibernetics » 09.04.2009 (Чт) 9:36

karlex
нет, ещё не сделал. ибо, пока есть много нюансов.

gjghjc
в ячейке может и не быть слова, или слово выровненное по середине или приклеено к правому краю и т.д., поэтому привязка к слову исключена, я уже думал изначально так делать. потом, таблица может ещё иметь не стандартную структуру, типа в первой строке три ячейки, во второй две, в третей - одна, в четвёртой опять три и т.д.

явно нужно именно привязываться к ширине ячейки, я уже начал вести журнал сколько минимальная ширина может быть ячейки, а потом ещё оказалось, что есть такая штука как отступ от края ячейки до символа, в общем, есть ещё над чем думать

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: [WORD] Нужно перевести таблицу в текст!

Сообщение alibek » 09.04.2009 (Чт) 13:47

karlex писал(а):У меня все нормально получается (вроде) через вышеперечисленные функции и формулу, может TextWidth всетаки все учитывает?

Выполни Debug.Print TextWidth("-"), TextWidth(String$(10000, "-")) / 10000.
С одними шрифтами числа будут одинаковы, с другими будут отличаться.
Так что лучше учитывать расстояние между символами самостоятельно.
Lasciate ogni speranza, voi ch'entrate.

karlex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 30.03.2009 (Пн) 20:25
Откуда: Пермский край, г.Кунгур

Re: [WORD] Нужно перевести таблицу в текст!

Сообщение karlex » 09.04.2009 (Чт) 14:19

alibek писал(а):С одними шрифтами числа будут одинаковы, с другими будут отличаться.
Так что лучше учитывать расстояние между символами самостоятельно.

Понятно.
Все гениальное — просто!
-------------------------------------
Кто ищет — тот всегда найдет!
-------------------------------------
Лень — двигатель прогресса.
Прогресс — двигатель лени.

viter.alex
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 221
Зарегистрирован: 27.07.2008 (Вс) 20:17
Откуда: Montreal

Re: [WORD] Нужно перевести таблицу в текст!

Сообщение viter.alex » 11.04.2009 (Сб) 11:43

Сам задумывался над этой проблемой, только хотел сразу делать через псевдографику ┌, ┤и прочие. Но до конца не довел.
alibek писал(а):
karlex писал(а):…С одними шрифтами числа будут одинаковы, с другими будут отличаться…


В текстовом файле все равно моношрифт, поэтому расстояние между символами значения не имеет Важно только количество символов. Определить ширину ячейки несложно. Нужно только определится со шрифтом. Для Courier 10 кегля ширина тире равна 8 пикселов или 6 поинтов. Узнать это можно так:
Код: Выделить всё
Sub SymbolWidth()
  Dim t&, l&, h&, w&
  ActiveWindow.View.Zoom.Percentage = 100
  ActiveWindow.GetPoint l, t, w, h, Selection.Range
End Sub

Таким образом количество символов умножаем на ширину одного символа и прибавляем границы ячейки.
А вот как быть с высотой ячейки, если строк в ячейке несколько?
Лучше день потерять — потом за пять минут долететь!

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Re: [WORD] Нужно перевести таблицу в текст!

Сообщение kibernetics » 12.04.2009 (Вс) 16:55

viter.alex писал(а):Сам задумывался над этой проблемой, только хотел сразу делать через псевдографику ┌, ┤и прочие. Но до конца не довел.

так я псевдографику и сам планировал, просто не хотел сильно перегружать топикстарт. :D , чтоб особо не распалятся.

viter.alex писал(а):В текстовом файле все равно моношрифт, поэтому расстояние между символами значения не имеет Важно только количество символов. Определить ширину ячейки несложно. Нужно только определится со шрифтом. Для Courier 10 кегля ширина тире равна 8 пикселов или 6 поинтов. Узнать это можно так:
Код: Выделить всё
Sub SymbolWidth()
  Dim t&, l&, h&, w&
  ActiveWindow.View.Zoom.Percentage = 100
  ActiveWindow.GetPoint l, t, w, h, Selection.Range
End Sub

Таким образом количество символов умножаем на ширину одного символа и прибавляем границы ячейки.
А вот как быть с высотой ячейки, если строк в ячейке несколько?

c высотой, я гдето видел реализацию кода. на работе посмотрю в хистори IE.
т.е. погоди, ты уже можешь отрисовать в псевдо хотя бы корректно шапку таблицы в длину?
может примерчик есть? а я поищу высоту таблы как найти

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Re: [WORD] Нужно перевести таблицу в текст!

Сообщение kibernetics » 13.04.2009 (Пн) 19:18

вот, вроде есть решение для определения высоты таблицы: http://forum.codenet.ru/archive/index.php/t-15465.html
не проверял сам

viter.alex
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 221
Зарегистрирован: 27.07.2008 (Вс) 20:17
Откуда: Montreal

Re: [WORD] Нужно перевести таблицу в текст!

Сообщение viter.alex » 13.04.2009 (Пн) 19:36

Я тут подумал, можно ведь как ширину символа считать в пикселах, так и высоту строки таблицы, если ее выделить. Точно также получаем высоту выделения, делим на количество строк и получаем высоту одной строки. Как-то в в этом направлении. Сейчас нет времени кодить.:(, а то можно попробовать.
Лучше день потерять — потом за пять минут долететь!


Вернуться в VBA

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

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

    TopList