在管理軟體開發的功能點中,有相當一部分功能是與Excel做資料互動,産生Excel 資料報表。如果Excel報表的資料計算方法很有規律可循,則可以通過自定義公式來解決。比如常見的資産負債表,利潤表,取數都非常有規律。
Excel DNA是一套用.NET架構實作的Excel自定義公式引擎,網際網路上有很多Excel财務方面的報表是基于此技術實作。Excel DNA完全開放源代碼,可到網上下載下傳它的完整源代碼和例子工程,位址是https://exceldna.codeplex.com
開發自定義公式
1 建立使用者自定義公式(Visual Basic)
用記事本建立一個Test.dna的文本檔案,參考下面的代碼例子,實作一個簡單的加法公式。
<DnaLibrary>
<![CDATA[
Public Module MyFunctions
Function AddThem(x, y)
AddThem = x + y
End Function
End 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
更多内容可參考下載下傳的源代碼包,有詳細的例子和說明文檔。