经过之前的《WPS表格的JS宏开发入门1--自动清除表格内容》、《WPS表格的JS宏开发入门2--读取和输出数据》、《WPS表格的JS宏开发入门3--实现平均年限折旧计算法》三篇文章,我们对于WPS的JS宏开发应该也有了一个基础的认识,下面就是整合知识,完成一个跨平台多方法折旧计算器了。
function catl(){
var alg=Worksheets.Item("计算器").Cells.Item(3, 4).Value2
var urow=Application.Worksheets.Item("计算器").Range("A65535").End(xlUp).Row
var life_year=Worksheets.Item("计算器").Cells.Item(2, 2).Value2
var last_value=Worksheets.Item("计算器").Cells.Item(2, 4).Value2
var in_value=Worksheets.Item("计算器").Cells.Item(3, 2).Value2
Application.Worksheets.Item("计算器").Range("A5:D"+urow).Delete()
if (alg=="平均法"){
var lost_year=(in_value-last_value)/life_year
var lost_rate=lost_year/in_value
for (var i=1;i<=life_year;i++){
Worksheets.Item("计算器").Cells.Item(i+4,1).Value2=i
Worksheets.Item("计算器").Cells.Item(i+4,3).Value2=lost_year
Worksheets.Item("计算器").Cells.Item(i+4,3).NumberFormatLocal ="¥#,##0.00;¥-#,##0.00"
Worksheets.Item("计算器").Cells.Item(i+4,2).Value2=lost_rate
Worksheets.Item("计算器").Cells.Item(i+4,2).NumberFormatLocal = "0.00%"
Worksheets.Item("计算器").Cells.Item(i+4,4).Value2=Worksheets.Item("计算器").Cells.Item(3,2).Value2-i*lost_year
Worksheets.Item("计算器").Cells.Item(i+4,4).NumberFormatLocal ="¥#,##0.00;¥-#,##0.00"
t=i-2
}
}
if(alg=="双倍余额递减法"){
var lost_rate=2/life_year
var time1=life_year-2
Worksheets.Item("计算器").Cells.Item(5,1).Value2=1
Worksheets.Item("计算器").Cells.Item(5,2).Value2=lost_rate
Worksheets.Item("计算器").Cells.Item(5,2).NumberFormatLocal = "0.00%"
Worksheets.Item("计算器").Cells.Item(5,3).Value2=in_value*lost_rate
Worksheets.Item("计算器").Cells.Item(5,3).NumberFormatLocal ="¥#,##0.00;¥-#,##0.00"
Worksheets.Item("计算器").Cells.Item(5,4).Value2=in_value-in_value*lost_rate
Worksheets.Item("计算器").Cells.Item(5,4).NumberFormatLocal ="¥#,##0.00;¥-#,##0.00"
for (var i=2;i<=time1;i++){
if(Worksheets.Item("计算器").Cells.Item(i+3,4).Value2>=last_value){
Worksheets.Item("计算器").Cells.Item(i+4,1).Value2=i
Worksheets.Item("计算器").Cells.Item(i+4,2).Value2=lost_rate
Worksheets.Item("计算器").Cells.Item(i+4,2).NumberFormatLocal = "0.00%"
Worksheets.Item("计算器").Cells.Item(i+4,3).Value2=lost_rate*Worksheets.Item("计算器").Cells.Item(i+3,4).Value2
Worksheets.Item("计算器").Cells.Item(i+4,3).NumberFormatLocal ="¥#,##0.00;¥-#,##0.00"
var tmp=Worksheets.Item("计算器").Cells.Item(i+3,4).Value2-Worksheets.Item("计算器").Cells.Item(i+4,3).Value2
if(tmp>last_value){
Worksheets.Item("计算器").Cells.Item(i+4,4).Value2=tmp
Worksheets.Item("计算器").Cells.Item(i+4,4).NumberFormatLocal ="¥#,##0.00;¥-#,##0.00"
var t=i
}
}
}
Worksheets.Item("计算器").Cells.Item(t+5,2).Value2=Worksheets.Item("计算器").Cells.Item(t+6,2).Value2="--"
Worksheets.Item("计算器").Cells.Item(t+6,1).Value2=t+2
Worksheets.Item("计算器").Cells.Item(t+5,1).Value2=t+1
var lastlost=(Worksheets.Item("计算器").Cells.Item(t+4,4).Value2-last_value)/2
Worksheets.Item("计算器").Cells.Item(t+5,3).Value2=Worksheets.Item("计算器").Cells.Item(t+6,3).Value2=lastlost
Worksheets.Item("计算器").Cells.Item(t+6,3).NumberFormatLocal=Worksheets.Item("计算器").Cells.Item(t+5,3).NumberFormatLocal ="¥#,##0.00;¥-#,##0.00"
Worksheets.Item("计算器").Cells.Item(t+5,4).Value2=Worksheets.Item("计算器").Cells.Item(t+4,4).Value2-lastlost
Worksheets.Item("计算器").Cells.Item(t+5,4).NumberFormatLocal ="¥#,##0.00;¥-#,##0.00"
Worksheets.Item("计算器").Cells.Item(t+6,4).Value2=last_value
Worksheets.Item("计算器").Cells.Item(t+6,4).NumberFormatLocal ="¥#,##0.00;¥-#,##0.00"
}
Application.Worksheets.Item("计算器").Range("A1:D"+(t+6)).Borders.LineStyle =1
Application.Worksheets.Item("计算器").Range("A5:D"+(t+6)).Font.Name="汉仪意宋简"
Application.Worksheets.Item("计算器").Range("A5:D"+(t+6)).Font.Size=14
Application.Worksheets.Item("计算器").Range("A5:B"+(t+6)).HorizontalAlignment=xlCenter
}
这个代码属于比较简单的,就是双倍余额法的计算逻辑比较特殊,尤其是在最后两期折旧计算上,不过这属于业务逻辑,大家不必深究,我简单讲下代码运行逻辑:
1.清楚上一次计算的结果,避免数据混乱;
2.读取参数;
3根据参数选择对应的计算方法并输出;
4.调整输出单元格的格式。要是还有问题可以公众号留言。我还是建议大家学学JavaScript,JS语言使用很广泛。