.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程序,

提示安全聲明,選為本會話啟用此加載項。

image

然后就可以使用自定義的公式,打開或新建一個Excel文件,輸入公式,回車后執行公式。

image

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM