WPS表格的JS宏开发入门4——实现跨平台多方法折旧计算器

100 阅读3分钟

经过之前的《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语言使用很广泛。