Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Создание отчетов в Exel из шаблонов и динамических таблиц с данными / 5 сообщений из 5, страница 1 из 1
05.06.2010, 10:44
    #36670834
dn1k1t0ss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание отчетов в Exel из шаблонов и динамических таблиц с данными
Добрый день!
Собственно - цель сабж.
Реализовал нечто подобное на Delphi + MS Word. Скорость работы категорически не устраивает.. Поэтому решил выгружать данные в таблицу Exel и далее на основе этой таблицы генерировать отчет.

Выглядеть это будет примерно так: Есть некий шаблон, где статичные данные обозначены например "Какой то текст [моя_переменная] еще текст". Статичные данные хранятся на другом листе в виде [моя_переменная] = трутуту. После нажатия кнопочки, фраза становится "Какой то текст трутуту еще текст" (количество переменных заранее неизвестно и может быть любым) . Все просто. Поэтому это делать не надо, я сам написал, в файле это есть =)

Так вот, в тексте помимо статических переменных есть еще и "таблицы". На другом листе есть таблица "Данные", из которой шаблон и должен заполнятся.
Первый набросок реализации сделал, но все упирается опять в скорость работы.

Поэтому, есть вопросы:
1. Необходимо вставить из 1й таблицы данные 2й таблицы. В первой таблице находится лишь одна строка - (шаблон). Можно ли это сделать, не вставляя строки в 1ю таблицу, а сразу функцией pastle? Как ни пытался, у меня она затирает следующие строки шаблона. Поэтому пришлось поставить громоздкую вставку ячеек:

Код: plaintext
1.
2.
For i =  1  To l ' при l > 100 начинает тормозить
   Rows("11:11").Insert
Next i
Но такая конструкция работает очеень медленно (
Каким способом это сделать быстро, желательно не поячеечно, а диапазоном?

2. В таблице с данными есть кнопочка фильтрации. Когда выбираются определенные данные по фильтру, видно, что Exel просто "скрывает" не подходящие строчки (номер строки выдает)
Как в таком случае правильно обращатся к такому диапазону ячеек?
Например, функция определения последнего элемента в таблице выдаст неверный результат, вернув в качестве l номер строки в не сорированной таблице:
Код: plaintext
l = Sheets(fData).Cells(Rows.Count, "A").End(xlUp).Row

3. С объединенными ячейками операции copy \ pastle не проходят. Как это можно обойти? После вставки выполнять поячеечное Merge? опять же, слишком долго..
...
Рейтинг: 0 / 0
07.06.2010, 08:10
    #36672268
sergeyvg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание отчетов в Exel из шаблонов и динамических таблиц с данными
По первому пункту, можно так
Код: plaintext
Rows("11").Resize(l).Insert
...
Рейтинг: 0 / 0
07.06.2010, 08:29
    #36672278
sergeyvg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание отчетов в Exel из шаблонов и динамических таблиц с данными
По третьему пункту непонятен вопрос.
По второму можно так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
If ActiveSheet.AutoFilterMode Then
  Set WorkR = ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible)
  If Not WorkR Is Nothing Then
    For Each sArea In WorkR.Areas
      MsgBox sArea.Address
    Next sArea
  End If
End If
...
Рейтинг: 0 / 0
07.06.2010, 13:07
    #36672943
dn1k1t0ss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание отчетов в Exel из шаблонов и динамических таблиц с данными
Ух.. спасибо большое! Радовался как младенец, увидев всего одну строчку в ответ на первый вопрос =)
По третьему пункту - Есть две таблицы с одинаковым количеством колонок и строчек, но в таблице А есть объединенные колонки, а в таблице Б нет. Как вставить строчки из таблицы Б в А максимально быстро, избежав поячеечного присвоения?
Пробую вот так, но такой код "разбивает" в таблице А все объединенные колонки:
Код: plaintext
1.
Range("F2:G4").Copy
Range("A2:D4").PasteSpecial

Пример прикрепил.
...
Рейтинг: 0 / 0
07.06.2010, 13:59
    #36673085
sergeyvg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание отчетов в Exel из шаблонов и динамических таблиц с данными
думаю, можно так обойти объединение, правда, в два прохода
Код: plaintext
1.
2.
3.
4.
Range("F2:F4").Copy
Range("A2:A4").PasteSpecial Paste:=xlPasteFormulas
Range("G2:G4").Copy
Range("C2:C4").PasteSpecial Paste:=xlPasteFormulas
Application.CutCopyMode = False
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Создание отчетов в Exel из шаблонов и динамических таблиц с данными / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]