2014-02-14 34 views
2

範圍:編寫和執行Excel的VBA宏不使用Excel.Interop

我生成使用Excel自動生成報告,但因爲我們有我們的服務器上的限制,我們無法安裝Excel.Interop或使用任何COM反對執行這樣的行動。

我們一直在使用EPPLUS作爲我們對這項任務的主要幫手,但它有一些嚴重的限制,當涉及到更多的intricated的東西,如PivotChartsMacros

我們剛剛完成了這個項目,因爲EPPLUS不支持它們,所以只丟失了PivotCharts

問:

我們怎樣才能:

A)編寫宏到.xlsm文件? (我們可以寫一個名爲「Auto_Open」,以便Excel將運行它uppon開放,創造了圖表和東西)

OR

B)運行我們的代碼中宏後生成的圖表把所有需要的數據放在那裏?

不使用Excel.Interop這是必須在這一刻。我們對一些建議開放,如 SpreadsheetGearEasyXLS,但是我們找不到任何示例或代碼段,它們實際上顯示瞭如何編寫或運行宏。

在此先感謝

回答

1
  1. 打開Excel
  2. 按Alt + F11

現在,您會在VBA IDE。在項目資源管理器的左

  1. 選擇ThisWorkbook從的VBAProject屏幕

  2. 有靠近窗口一個會的頂部有兩個下拉菜單:

    要在自動打開運行的東西說(General)和其他(Declarations)點擊(General),選擇工作簿

Excel應自動將您帶到Open聲明。

本小節中的任何內容都將公開執行。

+0

感謝您的回覆。我需要報告生成器完全自動化,不需要人力輸出。 此外,EPPLUS不支持打開xlsm(啓用宏)文件,所以我無法手動完成此操作。 –

+1

@MarcelloGrechiLins然後你可能必須使用(Open XML SDK)來查看inot [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.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(); 

希望這有助於:

哪裏excelDoc是你ExcelPackage,您可以使用的線沿線的東西砸。

+1

將工作簿放入工作簿後,如何真正執行vba代碼? –

+1

@VanceSmith在上面的示例中,因爲代碼位於Workbook_Open子例程內,所以它將在打開工作簿時自動執行。 –

+0

直到宏由於過度熱心的安全區域而被阻塞,該區域默認所有設置並阻止宏....因此,沒有workbook_open事件會觸發 – Gary