|
Модераторы: mihanik |
|
pavelv |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 245 Регистрация: 5.2.2006 Репутация: нет Всего: нет |
Всем доброго утра.
Был у меня один отчет в БД, который нужно было формировать в MS Word. Стал работать медленно из-за большого количества строк в таблице Word и решил сделать я его быстрее. После пары тестов единственным выходом оказалось уйти от заполнения ячеек таблицы поотдельности, сделать вставку данных сразу целиком. Чего делаю? Беру данные и сую их все в Memo. Потом memo.copytoclipboard и далее вставка в Word. Но тут проблемка появилась, в рамках одной ячейки пропали переходы на след. строчку и вместо них стали появляться квадратики. Ну т.е. к примеру в ячейке хочу написать: "г.Новосибирск ОАО Вымпел ул. Жемчужная, 45" а он мне все в строчку лепит и в местах переноса строки квадратики рисует. Причем если вставлять просто в ячейку что-нибудь в духе: "г.Новосибирск + #13 + ОАО Вымпел+ #13 + ул. Жемчужная, 45" то всё окей. Нет ли другого кода переноса строки или может как-то настройки Word это решить можно? P.S> Надеюсь понятно изложился, заранее спасибо. Это сообщение отредактировал(а) pavelv - 25.10.2010, 06:08 |
|||
|
||||
Akina |
|
|||
Советчик Профиль Группа: Модератор Сообщений: 20570 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 453 |
Ctrl-Enter
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
pavelv |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 245 Регистрация: 5.2.2006 Репутация: нет Всего: нет |
Ctrl+Enter?
Это на новую строку переход. Но в случае с таблицей такая комбинация вызовет переход из данной ячейки в новую первую ячейку следующей строки. Просто создал таблицу в Word и нажал комбинацию. Необходимая мне комбинация Enter или Shift+Enter. Но судя по таблице ASC II код у этих клавиш одинаковый - #13. Ну а вместо него квадратик ставится, как говорит уже. |
|||
|
||||
Akina |
|
|||
Советчик Профиль Группа: Модератор Сообщений: 20570 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 453 |
Так тебе на VBA? есть спецово заточенная под это дело константа - vbNewLine.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
pavelv |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 245 Регистрация: 5.2.2006 Репутация: нет Всего: нет |
Akina да, но не совсем так.
Я как бы задаю данные в Delphi и затем простым копи-пастом(программно) вставляю всё в Word. VBA сейчас никак не учавствует в этом, кроме процессам самой вставки. У меня понятно нет таких констант как vbNewLine, но в хелпе к бэйсику указано что это аналог chr(13)+chr(10) or chr(13). При вставки опять вижу квадратики. Дальше маленько проштудировал интернет
итого меняем символ "перевод строки" на "перевод каретки + перевод строки". После этого все квадратики заменяются на перевод строки и всё становится нормально. Но при этом почему-то дублиурется последний символ каждой строки! Т.е. если было "Маша играла в мячик" то будет после этой операции "Маша играла в мячик к". И ещё эта фигня выполняется довольно долго. Чтобы проштудировать 1 колонку в 795 строчках мне потребовалась 1 минута. Может я случайно не в том разделе тему создал и мне нужно в Delphi больше писать? Это сообщение отредактировал(а) pavelv - 25.10.2010, 11:46 |
|||
|
||||
mihanik |
|
|||
-=Белый Медведь=- Профиль Группа: Комодератор Сообщений: 4054 Регистрация: 24.4.2006 Где: г. Тверь Репутация: 9 Всего: 109 |
Может, зеркало сделать?
|
|||
|
||||
Rohoss |
|
|||
Начальник интернета Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: нет Всего: 18 |
Молодцы, куда надо создали
|
|||
|
||||
Akina |
|
|||
Советчик Профиль Группа: Модератор Сообщений: 20570 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 453 |
C этого места поподробнее. Я правильно понимаю, что подключается референсная библиотека Ворда к программе на Дельфе, и используются VBA-методы объекта типа wordApp.Selection.Paste? -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Данкинг |
|
|||
Yersinia pestis Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 1 Всего: 130 |
Что-то я не понял: какие у тебя в Memo ячейки могут быть?
-------------------- There's nothing left but silent epitaphs. |
|||
|
||||
pavelv |
|
||||
Бывалый Профиль Группа: Участник Сообщений: 245 Регистрация: 5.2.2006 Репутация: нет Всего: нет |
Где ячейки в memo? Ячейки я имел ввиду таблицы.
Сразу не кинул как проще. Вот код, так будет прозрачнее я думаю . Вот как формируется(процесс создания опустим думаю и т.д.)
почему так и не иначе? Всё просто эта фигня крайне быстро работает, быстрее вообще ничего не знаю. Процесс вставки данных в Word при этом не занимает и секунды. Если же я начну делать всё через
то процесс вставки только в Word растягивается минут на 15ть даже со средней таблицей. Если Вместо #13 написать #13#10, то в итоге получим переход на след. строчку а не внутри той же ячейки! Это сообщение отредактировал(а) pavelv - 26.10.2010, 05:07 |
||||
|
|||||
Данкинг |
|
|||
Yersinia pestis Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 1 Всего: 130 |
Понятно. А не проще через генератор отчётов?
-------------------- There's nothing left but silent epitaphs. |
|||
|
||||
pavelv |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 245 Регистрация: 5.2.2006 Репутация: нет Всего: нет |
Если честно не заморачивался с этой идеей ни разу, т.е. было как-то и всё криво...забил и стал напрямую делать. А генераторы напрямую в Word/Excel данные выводят?
В любом случае сейчас уже интересно как сделать именно через это место? |
|||
|
||||
Akina |
|
|||
Советчик Профиль Группа: Модератор Сообщений: 20570 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 453 |
Господи, какой ужас! пастить plain text в коллекцию таблиц и надеяться на правильную раскидку? никогда...
Сделай ты по-человечески - создай в документе таблицу, а потом в нужные ячейки таблицы добавляй нужные данные. И не будет у тебя этих твоих проблем с "квадратиками". -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Данкинг |
|
|||
Yersinia pestis Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 1 Всего: 130 |
Да, у FastReport есть экспорт в XLS. -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
pavelv |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 245 Регистрация: 5.2.2006 Репутация: нет Всего: нет |
А я ведь раньше все так и делал. В каждую ячейку, всё вставлялось...всё было четко, красиво и безоблачно. Жалко отчет теперь этот формирует 15ть минут! Понимаешь, проблема в скорости обращения славного Ворда к ячейкам своей таблицы(можешь проверить через VBA напрямую). Это мегаприложение испытывает непомерные трудности почему-то при этом, или чай оно попивает с печеньем в этот момент. Я в общем хбз, предложенная тобой идея даже права на зарождение жизни не имеет. Ну т.е. если отчет не очень большой то это бесспорно хороший подход, но стоит строкам таблицы перевалить за 300 и нужно сразу искать что-то другое. Единственный выход который я нашёл и который реально работает быстро, указан выше. Если ты сможешь быстрее хоть каким-нибудь макаром закинуть в 1000 строчную таблицу с 13тью столбцами(сейчас такой объем и он будет расти ещё примерно на 70%) данные выложи сюда этот способ и думаю многие тебе скажут спасибо. Я вообще сначала думал попробовать работу со встроенными компонентами для Word-а, но чего-то кто-то меня убедил что там скорости не выудишь. Может ошибаюсь, честно не пробовал. Если у кого опыт есть, поделитесь пожалуйста . Данкинг нужно имеено Word. И ещё почему-то Excel побыстрее со своими ячейками общается, заметил давно ещё такой нюанс. P.S> Отчет действительно реальный. Я сам хз нафиг кому-то отчет с таким количеством данных и тем более с такой структурой . |
|||
|
||||
Akina |
|
||||
Советчик Профиль Группа: Модератор Сообщений: 20570 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 453 |
Нет, это ты так пишешь:
И программа, как дура, по твоей инструкции бредёт каждый раз по всему дереву объектов... Сделай ты всё-таки по-человечески - и всё залетает. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
pavelv |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 245 Регистрация: 5.2.2006 Репутация: нет Всего: нет |
Ок, видимо я не шарю .
Я кроме того и вот этава(плюс пара вариаций от него)
вообще хз как добавить. Akina, а какие ещё средства Visual Basic позволяют добавлять? |
|||
|
||||
skyboy |
|
|||
неОпытный Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 1 Всего: 260 |
я правильно понял: генерация данных происходит в Delphi? а затем данные надо сохранить в виде таблицы в докумнте Word? если говорить про VBA в отрыве от Delphi, то в msdn советуют использовать вставку построчно при помощи range.convertToTable. но там #13 разделяет данные, которые станут разными строками. Может, попробовать только #10 для перевода каретки?
|
|||
|
||||
Правила форума "Программирование, связанное с MS Office" | |
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще!
|
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |