EPPlus - 无法从 excel 获取 NPV 和 IRR 函数的值
EPPlus - Unable to get values of NPV and IRR functions from excel
我在 excel 中有一个模型并尝试通过 ASP.NET 将输入馈送到 excel 并 return 返回模型结果在网格上前端。我在 ASP.NET 中使用 EPPlus 包,因为它不需要安装 MS Office。
我无法获取使用 NPV [净现值] 和 IRR [return 的内部利率] 函数的单元格的值。它总是 returns #VALUE
或 #NAME
。作为一种解决方法,我能够手动计算 NPV,但我在 IRR 方面遇到了困难。
EPPlus 有没有办法将所有单元格作为值粘贴到工作表中?
或者还有其他选择吗?
请帮助并提前致谢
更新:我有 EPPlus 4.5.3.1 和 Visual studio 2013。
string strfilepath = Server.MapPath(destPath);
FileInfo fileInfo = new FileInfo(strfilepath);
ExcelPackage p = new ExcelPackage(fileInfo);
ExcelWorksheet myWorksheet = p.Workbook.Worksheets["Financial"];
GridView1.Rows[0].Cells[2].Text = float.Parse(myWorksheet1.Cells["f57"].Value.ToString()).ToString("N2");
我在 EPPlus 中尝试了所有可能的方法,但我无法计算 IRR。我在 SQL 中想出了一个解决方案,它给出的结果接近 excel 的 IRR 函数。
CREATE FUNCTION [dbo].[Ufn_irr1] (@strIDs1 VARCHAR(10),
@strIDs2 VARCHAR(10),
@guess DECIMAL(30, 10))
returns DECIMAL(30, 10)
AS
BEGIN
DECLARE @t_IDs TABLE
( a
id INT IDENTITY(0, 1),
value DECIMAL(30, 10)
)
DECLARE @strIDs VARCHAR(max)
SET @strIDs = @strIDs1 + ',' + @strIDs2
DECLARE @strID VARCHAR(12),
@sepPos INT,
@NPV DECIMAL(30, 10)
SET @strIDs = COALESCE(@strIDs + ',', '')
SET @sepPos = Charindex(',', @strIDs)
WHILE @sepPos > 0
BEGIN
SET @strID = LEFT(@strIDs, @sepPos - 1)
INSERT INTO @t_IDs
(value)
SELECT ( Cast(@strID AS DECIMAL(20, 10)) )
WHERE Isnumeric(@strID) = 1
SET @strIDs = RIGHT(@strIDs, Datalength(@strIDs) - @sepPos)
SET @sepPos = Charindex(',', @strIDs)
END
SET @guess = CASE
WHEN Isnull(@guess, 0) <= 0 THEN 0.00001
ELSE @guess
END
SELECT @NPV = Sum(value / Power(1 + @guess, id))
FROM @t_IDs
WHILE @NPV > 0
BEGIN
SET @guess = @guess + 0.00001
SELECT @NPV = Sum(value / Power(1 + @guess, id))
FROM @t_IDs
END
RETURN @guess
END
我在 excel 中有一个模型并尝试通过 ASP.NET 将输入馈送到 excel 并 return 返回模型结果在网格上前端。我在 ASP.NET 中使用 EPPlus 包,因为它不需要安装 MS Office。
我无法获取使用 NPV [净现值] 和 IRR [return 的内部利率] 函数的单元格的值。它总是 returns #VALUE
或 #NAME
。作为一种解决方法,我能够手动计算 NPV,但我在 IRR 方面遇到了困难。
EPPlus 有没有办法将所有单元格作为值粘贴到工作表中? 或者还有其他选择吗?
请帮助并提前致谢
更新:我有 EPPlus 4.5.3.1 和 Visual studio 2013。
string strfilepath = Server.MapPath(destPath);
FileInfo fileInfo = new FileInfo(strfilepath);
ExcelPackage p = new ExcelPackage(fileInfo);
ExcelWorksheet myWorksheet = p.Workbook.Worksheets["Financial"];
GridView1.Rows[0].Cells[2].Text = float.Parse(myWorksheet1.Cells["f57"].Value.ToString()).ToString("N2");
我在 EPPlus 中尝试了所有可能的方法,但我无法计算 IRR。我在 SQL 中想出了一个解决方案,它给出的结果接近 excel 的 IRR 函数。
CREATE FUNCTION [dbo].[Ufn_irr1] (@strIDs1 VARCHAR(10),
@strIDs2 VARCHAR(10),
@guess DECIMAL(30, 10))
returns DECIMAL(30, 10)
AS
BEGIN
DECLARE @t_IDs TABLE
( a
id INT IDENTITY(0, 1),
value DECIMAL(30, 10)
)
DECLARE @strIDs VARCHAR(max)
SET @strIDs = @strIDs1 + ',' + @strIDs2
DECLARE @strID VARCHAR(12),
@sepPos INT,
@NPV DECIMAL(30, 10)
SET @strIDs = COALESCE(@strIDs + ',', '')
SET @sepPos = Charindex(',', @strIDs)
WHILE @sepPos > 0
BEGIN
SET @strID = LEFT(@strIDs, @sepPos - 1)
INSERT INTO @t_IDs
(value)
SELECT ( Cast(@strID AS DECIMAL(20, 10)) )
WHERE Isnumeric(@strID) = 1
SET @strIDs = RIGHT(@strIDs, Datalength(@strIDs) - @sepPos)
SET @sepPos = Charindex(',', @strIDs)
END
SET @guess = CASE
WHEN Isnull(@guess, 0) <= 0 THEN 0.00001
ELSE @guess
END
SELECT @NPV = Sum(value / Power(1 + @guess, id))
FROM @t_IDs
WHILE @NPV > 0
BEGIN
SET @guess = @guess + 0.00001
SELECT @NPV = Sum(value / Power(1 + @guess, id))
FROM @t_IDs
END
RETURN @guess
END