2016-10-08 37 views
4

EPPlusを使用してデータを入力して計算します。ここで Here is my excel files and user defined function 私のコードです:EPPlus:ユーザー定義関数calculate

ExcelWorksheet sheet = ep.Workbook.Worksheets["input"]; 
sheet.Cells[1, 1].Value = 10; 
ep.Workbook.Calculate(); 
string test = sheet.Cells[1, 5].Text; 
ep.Save(); 

文字列のテストがある "#NAME?"

EPPlusがユーザー定義関数を読み込んでいないようです。

保存したファイルを開くと、自動的に計算が行われます。

ユーザー定義関数を機能させるにはどうすればよいですか?

(私は、ユーザー呼んエクセルfile.Iが、それは私が欲しいものを達成することができ、相互運用機能を試してみました存在で関数を定義するためにASP.NETの後半で、この機能を使用していますが、たくさん遅くなります。)

感謝を!あなたはExcelWorkSheet

sheet.Cells[5, 5].Formula = "=A1*3";

に式を設定する必要が

答えて

2

式のcalcエンジンは、ブックにVBA機能を実行することはできません。それは約150の一般的なExcel式で構築され、それ以上のものはありません。

ただし、.NETコードでVBA関数を実装できます。各関数は、EPPlusクラスExcelFunctionを継承し、VBA関数と同じ関数名が与えられたWorkbook.FormulaParserManagerを介してEPPlusに登録されます。

CodeplexからダウンロードできるEPPlusサンプルプロジェクトでこれを示すサンプル(カスタム関数の作成)があります。

バージョン4.1については

、あなたはここで、 "サンプルとEPPlusを" 解決策をダウンロードすることができます。

https://epplus.codeplex.com/releases/view/625020

次に "EPPlusSamples" プロジェクトを後藤SampleAddFormulaFunction.cs

+0

多分あなたはあなたが参照しているドキュメンテーションやサンプルを案内するリンク(あなたの答えに加えて)を参照するべきです。 –

0

これは、あなたが大量の行で行いたいならば、あなたはループと内部ループの使用式を使用する必要があり、最初の行だけのためです。

+0

EXCELの機能をチェックしてくださいイメージは単なる実験にすぎません。それ以降、私はより複雑な関数を作成します。 EXCELで提供されている式のみでは不十分です。 – Chao

1

Epplusで関数を定義するvbaプロジェクトを作成する必要があります。このような何か:

var fileinfo = new FileInfo(@"c:\temp\UserDefinedFunctionTest.xlsm"); 
if (fileinfo.Exists) 
    fileinfo.Delete(); 

var sb = new StringBuilder(); 
sb.AppendLine("Function test(a)"); 
sb.AppendLine(" test = a * 3"); 
sb.AppendLine("End Function"); 

using (var package = new ExcelPackage(fileinfo)) 
{ 
    var workbook = package.Workbook; 
    var worksheet = workbook.Worksheets.Add("Sheet1"); 

    workbook.CreateVBAProject(); 
    var mod1 = workbook.VbaProject.Modules.AddModule("Module1"); 
    mod1.Code = sb.ToString(); 

    worksheet.Cells["A1"].Value = 5; 
    worksheet.Cells["A2"].Formula = "=test(A1)"; 

    package.Save(); 
} 

次のようになります。EPPlusで

enter image description here

+0

あなたの方法は可能ですが、依然としてオフィスオープンを使用して計算されます。 C#の場合でも、この関数は動作しません。 以下のようになります。 [link](http://i.imgur.com/RWygARp.png) – Chao

+0

@Chaoもしあなたがそのセルの計算された値をC#で見ることが期待されるなら、残念ながらそれはできません。Eppusは生のXMLファイルをZIPコンテナに作成するだけです。エクセルがそれを開くまで、実際の計算は行われません。 – Ernie

関連する問題