Модераторы: mihanik

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать переход на след. строчку? #13 не работает, ставит квадратик 
:(
    Опции темы
pavelv
Дата 25.10.2010, 06:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Всем доброго утра.
 Был у меня один отчет в БД, который нужно было формировать в MS Word. Стал работать медленно из-за большого количества строк в таблице Word и решил сделать я его быстрее. После пары тестов единственным выходом оказалось уйти от заполнения ячеек таблицы поотдельности, сделать вставку данных сразу целиком.
 Чего делаю? Беру данные и сую их все в Memo. Потом memo.copytoclipboard и далее вставка в Word. Но тут проблемка появилась, в рамках одной ячейки пропали переходы на след. строчку и вместо них стали появляться квадратики.
 Ну т.е. к примеру в ячейке хочу написать:
 "г.Новосибирск
  ОАО Вымпел
  ул. Жемчужная, 45"
 а он мне все в строчку лепит и в местах переноса строки квадратики рисует. Причем если вставлять просто в ячейку что-нибудь в духе:
 "г.Новосибирск + #13 + ОАО Вымпел+ #13 +  ул. Жемчужная, 45"
 то всё окей. 

Нет ли другого кода переноса строки или может как-то настройки Word это решить можно?

P.S> Надеюсь понятно изложился, заранее спасибо.

Это сообщение отредактировал(а) pavelv - 25.10.2010, 06:08
PM MAIL   Вверх
Akina
Дата 25.10.2010, 07:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



Ctrl-Enter


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
pavelv
Дата 25.10.2010, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Ctrl+Enter? 
 Это на новую строку переход. Но в случае с таблицей такая комбинация вызовет переход из данной ячейки в новую первую ячейку следующей строки. Просто создал таблицу в Word и нажал комбинацию. 
 Необходимая мне комбинация Enter или Shift+Enter. Но судя по таблице ASC II код у этих клавиш одинаковый - #13. Ну а вместо него квадратик ставится, как говорит уже.
PM MAIL   Вверх
Akina
Дата 25.10.2010, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



Так тебе на VBA? есть спецово заточенная под это дело константа - vbNewLine.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
pavelv
Дата 25.10.2010, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Akina да, но не совсем так.
 Я как бы задаю данные в Delphi и затем простым копи-пастом(программно) вставляю всё в Word. VBA сейчас никак не учавствует в этом, кроме процессам самой вставки.
 У меня понятно нет таких констант как vbNewLine, но в хелпе к бэйсику указано что это аналог chr(13)+chr(10) or chr(13). При вставки опять вижу квадратики.
 Дальше маленько проштудировал интернет
Код

   For i = 1 To N
     Word.ActiveDocument.Tables.Item(1).Cell(i, 2).Range.Text = Replace(Word.ActiveDocument.Tables.Item(1).Cell(i, 2).Range.Text, vbLf, vbCrLf)
   Next i

 итого меняем символ "перевод строки" на "перевод каретки + перевод строки". После этого все квадратики заменяются на перевод строки и всё становится нормально. Но при этом почему-то дублиурется последний символ каждой строки! Т.е. если было 
"Маша играла 
  в мячик" то будет после этой операции 
 "Маша играла 
  в мячик 
  к".
 И ещё эта фигня выполняется довольно долго. Чтобы проштудировать 1 колонку в 795 строчках мне потребовалась 1 минута.

 Может я случайно не в том разделе тему создал и мне нужно в Delphi больше писать? 

Это сообщение отредактировал(а) pavelv - 25.10.2010, 11:46
PM MAIL   Вверх
mihanik
Дата 25.10.2010, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

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



Может, зеркало сделать?



--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
Rohoss
Дата 25.10.2010, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


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

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



Молодцы, куда надо создали  smile 


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
Akina
Дата 25.10.2010, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



Цитата(pavelv @  25.10.2010,  12:44 Найти цитируемый пост)
затем простым копи-пастом(программно) вставляю всё в Word

C этого места поподробнее.
Я правильно понимаю, что подключается референсная библиотека Ворда к программе на Дельфе, и используются VBA-методы объекта типа wordApp.Selection.Paste?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Данкинг
Дата 25.10.2010, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Что-то я не понял: какие у тебя в Memo ячейки могут быть? smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
pavelv
Дата 26.10.2010, 05:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Где ячейки в memo? smile Ячейки я имел ввиду таблицы.
 Сразу не кинул как проще. Вот код, так будет прозрачнее я думаю . 
 Вот как формируется(процесс создания опустим думаю и т.д.)

Код

   mem:Tmemo.//сама таблица по сути
   SL:String;//эта строка в будущем будет всей строкой в таблице(одной)
//вот так формируем SL
  SL := SL + #9 + 'Маша играла в мячик';//так делаю переход внутри одной строки к следующей ячейке
 SL:= SL + #9 + 'Маша играла'+#13+'в мячик';//#13 - так делаю переход на след. строчку внутри одной ячейки
//в Мемо
     Smem.Lines.Add(SL);//Добавляем эти данные в Memo

//понятно
  Smem.SelectAll;
  Smem.CopyToClipboard;
//тут W = CreateOleObject('Word.Application')
  W.ActiveDocument.Tables.Item(1).Range.Paste;


 почему так и не иначе? Всё просто эта фигня крайне быстро работает, быстрее вообще ничего не знаю. Процесс вставки данных в Word при этом не занимает и секунды. Если же я начну делать всё через 
Код

  W.ActiveDocument.Tables.Item(Table).Cell(Ix,Jy).Range.Text:=text;

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

Если Вместо #13 написать #13#10, то в итоге получим переход на след. строчку а не внутри той же ячейки!

Это сообщение отредактировал(а) pavelv - 26.10.2010, 05:07
PM MAIL   Вверх
Данкинг
Дата 26.10.2010, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Понятно. А не проще через генератор отчётов?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
pavelv
Дата 26.10.2010, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



 Если честно не заморачивался с этой идеей ни разу, т.е. было как-то и всё криво...забил и стал напрямую делать. А генераторы напрямую в Word/Excel данные выводят?
 В любом случае сейчас уже интересно как сделать именно через это место? smile
PM MAIL   Вверх
Akina
Дата 26.10.2010, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



Господи, какой ужас! пастить plain text в коллекцию таблиц и надеяться на правильную раскидку? никогда...
Сделай ты по-человечески - создай в документе таблицу, а потом в нужные ячейки таблицы добавляй нужные данные. И не будет у тебя этих твоих проблем с "квадратиками".


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Данкинг
Дата 26.10.2010, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Цитата(pavelv @  26.10.2010,  11:43 Найти цитируемый пост)
А генераторы напрямую в Word/Excel данные выводят?

Да, у FastReport есть экспорт в XLS.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
pavelv
Дата 27.10.2010, 06:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата('Akina')

Господи, какой ужас! пастить plain text в коллекцию таблиц и надеяться на правильную раскидку? никогда...
Сделай ты по-человечески - создай в документе таблицу, а потом в нужные ячейки таблицы добавляй нужные данные. И не будет у тебя этих твоих проблем с "квадратиками".

 А я ведь раньше все так и делал. В каждую ячейку, всё вставлялось...всё было четко, красиво и безоблачно. Жалко отчет теперь этот формирует 15ть минут! Понимаешь, проблема в скорости обращения славного Ворда к ячейкам своей таблицы(можешь проверить через VBA напрямую). Это мегаприложение испытывает непомерные трудности почему-то при этом, или чай оно попивает с печеньем в этот момент. Я в общем хбз, предложенная тобой идея даже права на зарождение жизни не имеет. Ну т.е. если отчет не очень большой то это бесспорно хороший подход, но стоит строкам таблицы перевалить за 300 и нужно сразу искать что-то другое.
 Единственный выход который я нашёл и который реально работает быстро, указан выше. Если ты сможешь быстрее хоть каким-нибудь макаром закинуть в 1000 строчную таблицу с 13тью столбцами(сейчас такой объем и он будет расти ещё примерно на 70%) данные выложи сюда этот способ и думаю многие тебе скажут спасибо. Я вообще сначала думал попробовать работу со встроенными компонентами для Word-а, но чего-то кто-то меня убедил что там скорости не выудишь. Может ошибаюсь, честно не пробовал. Если у кого опыт есть, поделитесь пожалуйста smile

 Данкинг нужно имеено Word. И ещё почему-то Excel побыстрее со своими ячейками общается, заметил давно ещё такой нюанс.

P.S> Отчет действительно реальный. Я сам хз нафиг кому-то отчет с таким количеством данных и тем более с такой структурой smile.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




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


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

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