2014-02-14 4 views
2

Область применения:Запись и выполнение макросов VBA на Excel без использования Excel.Interop

Я генерации автоматизированных отчетов с помощью Excel, но так как у нас есть ограничения на нашем сервере, мы не можем установить Excel.Interop или использовать любой COM объект для выполнения такого действия.

Мы используем EPPLUS как наш главный помощник в решении этой задачи, но она имеет некоторые серьезные ограничения, когда речь идет о более intricated вещи, такие как PivotCharts и Macros.

Мы только что закончили проект, пропустив только PivotCharts, поскольку EPPLUS не поддерживает их.

Вопрос:

Как мы можем:

A) Запись макросов в виде .xlsm файла? (Мы могли бы написать один под названием «Auto_Open» так, что первенствует бы запустить его uppon открытие, создание графиков и прочее)

ИЛИ

B) Выполнить макрос в коде для создания этих карт после поместив там все необходимые данные?

В настоящий момент не используется Excel.Interop. Мы открыты для некоторых предложений, таких как SpreadsheetGear и EasyXLS, но мы не можем найти ни одного образца или фрагмента кода, который фактически показывает, как писать или запускать макросы.

Заранее спасибо

ответ

1
  1. Открыть Excel
  2. Нажмите Alt + F11

Вы теперь будете в VBA IDE.

Чтобы запустить что-то на Auto Open:

  1. Выберите ThisWorkbook Из VBAProject в Project Explorer, на левой части экрана

  2. Есть два падения капли в верхней части окна одной воли говорят (General), а другой (Declarations) нажмите на (General) и выберите Учебное пособие

Excel автоматически приведет вас к объявлению Open.

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

+0

Спасибо за ответ. Мне нужен генератор отчетов, который будет полностью автоматизирован, без человеческого выхода. Кроме того, EPPLUS не поддерживает открытие файлов xlsm (macro enabled), поэтому я не могу это сделать вручную. –

+1

@MarcelloGrechiLins. Возможно, вам придется искать inot с помощью (Open XML SDK) [http://msdn.microsoft.com/en-us/library/office/bb448854.aspx] – user2140261

1

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

Когда пользователь открывает отчет (и позволяет запускать макросы), тогда ваш макрос будет запускаться и выполнять требуемые вами манипуляции (ваш вариант A). Ваш макрос Auto_Open может проверить какое-либо подходящее условие (например, наличие значения в определенном месте, возможно, на листе VeryHidden, чтобы пользователь не мог легко вмешаться в него) перед выполнением какой-либо работы, чтобы он не запускался при открытии «пустой» шаблон.

Что касается вашего варианта B (запустите макрос перед предоставлением отчета пользователю): это невозможно без автоматизации Excel.

+1

Неплохо, я забыл упомянуть, что EPPLUS не открывает файлы xlsm, поэтому мы не можем настроить шаблон и работать оттуда. Это был наш первый подход, но он не сработал. –

13

Я понимаю, что этот вопрос немного устарел, но в интересах оказания помощи будущим посетителям я добавлю, что текущая версия EPPlus (4.0.4 на момент написания) поддерживает включение VBA.

Где excelDoc ваш ExcelPackage, вы можете оставить его в использовании что-то вдоль линий:

excelDoc.Workbook.CreateVBAProject(); 

StringBuilder vbaCode = new StringBuilder(); 

vbaCode.AppendLine("Private Sub Workbook_Open()"); 
vbaCode.AppendLine(" Application.DisplayFormulaBar = False"); 
vbaCode.AppendLine("End Sub"); 

excelDoc.Workbook.CodeModule.Code = vbaCode.ToString(); 

Надеется, что это помогает.

+1

Как вы фактически выполняете код vba после того, как вы поместили его в книгу? –

+1

@VanceSmith В приведенном выше примере, поскольку код находится в подпрограмме Workbook_Open, он будет выполняться автоматически при открытии книги. –

+0

, до тех пор, пока макросы не будут заблокированы из-за более усердной зоны безопасности, которая по умолчанию задает все настройки и блокирует макросы .... так что никакие события workbook_open не срабатывают – Gary

Смежные вопросы