10 Replies Latest reply: Aug 26, 2014 1:06 PM by Eugeny Ilyin RSS

    Запуск макроса в редакторе скрипта (через Ctrl+E)

      Привет всем.


      У меня вопрос по запуску макросов в редакторе скрипта.

      Дело в следующем.

      У меня есть загруженные файлы и одна логическая таблица.

      На основе этой таблицы я создаю "Сводную таблицу" через диаграммы (объект CH01).

      Далее эту сводную таблицу мне необходимо выгрузить в эксель, а затем загрузить снова в QV.

      Как это сделать?

       

      Макрос на выгрузку XLS файла:

      sub exportCH03toExcel

      set obj = ActiveDocument.GetSheetObject("CH03")

      obj.ExportEx "D:\12345.xls", 5

      end sub

       

      Если я правильно понимаю алгоритм, то он должен быть следующий:

      1. Запускаем макрос в редакторе скрипта;

      2. Ждем 1-2 секунда (для создания файла);

      3. Выкидываем текущую логическую таблицу;

      4. Загружаем новый файл XLS (ранее выгруженный через макрос).

       

      Спасибо.

        • Re: Запуск макроса в редакторе скрипта (через Ctrl+E)
          Sergey Polekhin

          Какова исходная задача обработки данных?

          Возможно, стоит пересмотреть способ решения задачи?

          Использования макросов стоит избегать любыми возможными способами, т.к. получаемое решение не масштабируется, сложно переносимо и имеет еще кучу нежелательных эффектов.

            • Re: Запуск макроса в редакторе скрипта (через Ctrl+E)

              Есть около 10 эксельных файлов.

              Из них информация попадает в один единый (или "консолидированный") эксельный файл.

              Данные попадают через ссылки: ='D:\[Файл.xlsx]Лист!Ячейка.

              Также в этом "консолидированном" файле часть данных расчитывается построчно (в пределах одной строки), а часть по столбцам (в пределах одного столбца).

              Объем "консолидированного" файла: 750 строк и 120 столбцов.

               

              Надо перевести все на QV для упрощения отчетности.

               

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

              И пока мне требуется 3-4 файла для верного транспонирования и расчета данных. А я хочу засунуть все в один скрипт

               

              QV в столбце расчет же не делает? Только по всему столбцу, а не по 2-3 строкам.

                • Re: Запуск макроса в редакторе скрипта (через Ctrl+E)
                  Sergey Polekhin

                  Если я правильно понимаю идею, то:

                  1. Вы можете загрузить данные из ~10 исходных файлов

                  2. У вас есть набор правил, в соответствии с которыми исходные данные пересчитываются в целевые. Т.е.:
                       1) Есть описание того, какие конкретно наборы данных (столбцы/строки/ячейки используются в расчетах)

                       2) Есть описание формул, агрегирующих значения их этих наборов данных

                   

                  В таком случае вы имеете возможность описать всю последовательность преобразований (агрегирования) данных в теле скрипта, без необходимости выполнения экспорта/повторного импорта данных. Экспорт данных из объектов визуализации и повторный импорт этих данных является кривым сценарием решения задачи.

                  В зависимости от сложности преобразований, вы можете получить более простой или более сложный скрипт, но это уже просто вопрос времени и опыта разработки.

                   

                  В плане гибкости и скорости расчетов данных в столбцах, большинство операций (функций) скрипта изначально рассчитаны на обработку именно табличных данных и нужно стремиться к обработке именно табличных представлений данных, даже если они будут таблицами из минимального количества строк и столбцов (например, 100 строк на 10 столбцов) .

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

                  Нужно только не забывать, что любое подобное процедурное программирование работает существенно медленнее, чем обработка таблиц.

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

                    • Re: Re: Запуск макроса в редакторе скрипта (через Ctrl+E)

                      Ок. Во вложении пример структуры нужной мне таблицы.

                      Кратенький пример.

                      В файле 2 листа, на первом сама таблица, на втором исходные данные (по факту они разнесены на десяток разных файлов).

                       

                      Я хотел загрузить фактические данные.

                      Затем повернуть таблицу (показатели сделать столбцами) и рассчитать оранжевые значение.

                      После этого еще раз повернуть таблицу и рассчитать уже синие значения.

                      И еще раз, напоследок повернуть таблицу и обработать оставшиеся значения.

                      И т.д.

                        • Re: Re: Запуск макроса в редакторе скрипта (через Ctrl+E)
                          Sergey Polekhin

                          В аттаче - примеры приложений, демонстрирующих несколько возможных подходов к решению задачи.

                          В предложенных примерах (v.1.2 и v.2.1) реализованы простейшие сценарии загрузки. Агрегация выполняется в объектах визуализации.

                          Но никто не мешает выполнять предагрегацию и в сценарии загрузки (см. ниже).

                           

                          В желаемой итоговой таблице, предложенной вами есть только одна потенциальная сложность. Визуально она является похожей на сводную, однако на самом деле таковой не является, т.к. в ней используются различные формулы агрегации (сначала статьи расходов и доходов суммируются, а затем из общих доходов вычитаются общие расходы).

                           

                          Поэтому если весь расчет выполнять в объектах визуализации, то вижу два варианта:

                          1. Отделить сводные данные по расходам и доходам (одна таблица) от итоговой таблицы остатков (вторая таблица).
                            Этот пример приведен в приложении (v.1.2)
                          2. Если требуется отобразить информацию в единственной сводной таблице, то можно пойти на хитрость и считать все расходы отрицательными числами. В этом случае для подсчета всех агрегатов можно использовать единую формулу.
                            Очевидно, что в этом случае предложенная мной таблица будет отличаться от желаемого вами вида итоговой таблицы тем, что в статьях расходов числа будут представлены отрицательными значениями.
                            Этот пример приведен в приложении (v.2.1)

                           

                          Если хочется выполнить агрегацию с скрипте загрузки, то пример таких расчетов приведен в приложении (v.3.0)

                           

                          Также приаттачил созданный мной справочник для отображения иерархии показателей.