在管理軟件開發的功能點中,有相當一部分功能是與Excel做數據交互,產生Excel 數據報表。如果Excel報表的數據計算方法很有規律可循,則可以通過自定義公式來解決。比如常見的資產負債表,利潤表,取數都非常有規律。
Excel DNA是一套用.NET框架實現的Excel自定義公式引擎,互聯網上有很多Excel財務方面的報表是基於此技術實現。Excel DNA完全開放源代碼,可到網上下載它的完整源代碼和例子工程,地址是https://exceldna.codeplex.com
開發自定義公式
1 創建用戶自定義公式(Visual Basic)
用記事本創建一個Test.dna的文本文件,參考下面的代碼例子,實現一個簡單的加法公式。
<DnaLibrary><![CDATA[Public Module MyFunctionsFunction AddThem(x, y)
AddThem = x + yEnd FunctionEnd Module]]></DnaLibrary>
打開Excel,輸入公式=AddThem(4,2),可以看到Excel計算后的公式結果是6。
2 創建自定義公式(C#)
創建一個Test.dna的文本文件,參考如下所示的例子代碼,實現字符串與雙精度類型數值相加的公式。
<DnaLibrary Language="CS">
<![CDATA[using ExcelDna.Integration;
public class MyFunctions{[ExcelFunction(Description="Joins a string to a number", Category="My functions")]public static string JoinThem(string str, double val){return str + val;
}}]]></DnaLibrary>
可以打開Excel,輸入公式=JoinThem(“James”,1983),可看到實際的運算結果。
3 通過.NET程序集創建自定義公式
Visual Basic,C#都是.NET的一等公民,用自己熟悉的語言創建一個Class Library類庫項目TestLib,參考如下的代碼例子,實現兩個雙精度數值相加的公式。
using ExcelDna.Integration;
public class MyFunctions{[ExcelFunction(Description="Multiplies two numbers", Category="Useful functions")]public static double MultiplyThem(double x, double y){return x * y;
}}
再來創建一個Test.dna的文本文件,添加如下的文本片段,用於聲明前面創建的公式。
<DnaLibrary><ExternalLibrary Path="TestLib.dll" />
</DnaLibrary>打開Excel,輸入公式=MultiplyThem(2,3) 或=MultiplyThem(2; 3),看到計算結果是5。
如果.NET程序集編譯成.NET 4.0,則需要稍微修改一下Test.dna的文本內容,參考下面的例子。
<DnaLibrary RuntimeVersion="v4.0" >
<ExternalLibrary Path="TestLib.dll" />
</DnaLibrary>
部署 Deployment
拷貝一份文件ExcelDna.xll到需要的目錄中,重命名為需要的名字,比如上面的Test.xll,將上面的Test.dna文件也放到同一個文件中。雙擊xll文件會打開Excel程序,
提示安全聲明,選為本會話啟用此加載項。
然后就可以使用自定義的公式,打開或新建一個Excel文件,輸入公式,回車后執行公式。
TestClassLibrary程序集中自定義公式的方法的源代碼。要編譯必須引用程序集ExcelDna.Integration.dll。
[ExcelFunction(Description="My first Excel-DNA function")]
public static string MyFirstFunction(string name){return ("Hello " + name);}
Test.dna文件的內容如下,只是簡單的聲明上面的程序集中的方法。
<DnaLibrary Name="First Add-In" RuntimeVersion="v4.0"><ExternalLibrary Path="TestClassLibrary.dll" /></DnaLibrary>
打包 Packing
注意在部署時,必須同時存在dna文件和xll文件,而且這兩個文件的名字要完全相同。Excel DNA支持將這兩個文件合並打包在一個文件中。
運行程序ExcelDna\Distribution\ExcelDnaPack.exe,並傳入參數Test.dna。如下的命令所示例的:
ExcelDnaPack.exe, Test.dna
執行完成之后,會生成一個Test-packed.xll文件,這個文件可以拷貝到其它電腦中直接執行。Test-packed.xll中已經包含Test.dna和TestLibrary.dll文件,運行時會主動被加載。
拋開復雜的Visual Studio Tools for Office, 憑借這幾天簡單的例子,我想讀者應該可以快速的上手,高效率的創作Excel中的自定義公式。
界面(Ribbon,Panel)與COM服務器支持
Excel DNA支持創建一個自定義的面板,添加一個WinForms自定義控件,繼承於System.Windows.Forms.UserControl,再添加下面的碼調用即可。
CustomTaskPane myCTP = CustomTaskPaneFactory.CreateCustomTaskPane(typeof(MyUserControl), myTitle
更多內容可參考下載的源代碼包,有詳細的例子和說明文檔。