天天看點

.NET實作Office Excel自定義公式 廣泛應用于報表與資料分析

在管理軟體開發的功能點中,有相當一部分功能是與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程式,

提示安全聲明,選為本會話啟用此附加元件。

.NET實作Office Excel自定義公式 廣泛應用于報表與資料分析

然後就可以使用自定義的公式,打開或建立一個Excel檔案,輸入公式,回車後執行公式。

.NET實作Office 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      

更多内容可參考下載下傳的源代碼包,有詳細的例子和說明文檔。