home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 2004 June / VPR0406.ISO / STARSUITE7 / EVALUATION / windows / office7 / f_0449 / carmoney.stc / Basic / Standard / Functions.xml next >
Extensible Markup Language  |  2002-05-14  |  8KB  |  257 lines

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
  3. <script:module xmlns:script="http://openoffice.org/2000/script" script:name="Functions" script:language="StarBasic">Option Explicit
  4.  
  5. Global oDocument as Object
  6. Global oSheets as Object
  7. Global sDocLanguage as String
  8. Global PeriodList(3) as Double
  9.  
  10.  
  11. Sub Initialize()
  12. Dim oFamily as Object
  13. Dim aStyleFormat as Object
  14. Dim oStyle as Object
  15.     GlobalScope.BasicLibraries.LoadLibrary("Tools")
  16.     oDocument = ThisComponent
  17.     oFamily = oDocument.StyleFamilies.GetByIndex(0)
  18.     oStyle = oFamily.GetbyName("Default")
  19.     aStyleFormat = oDocument.NumberFormats.getByKey(oStyle.NumberFormat)
  20.     sDocLanguage = aStyleFormat.Locale.Language
  21.     oSheets = oDocument.Sheets
  22.     PeriodList(0) = 0.0833333
  23.     PeriodList(1) = 1
  24.     PeriodList(2) = 2
  25.     PeriodList(3) = 3
  26. End Sub
  27.  
  28.  
  29. ' This sub changes the styles of two cells and their contents
  30. ' from a formula to a numerical value and vice versa
  31. Sub SetPOT(aEvent as Object)
  32. Dim i, Down, Workline As Integer
  33. Dim iNextCellValue as Double
  34. Dim sCellFormula As String
  35. Dim oSheet as Object
  36. Dim oCell as Object
  37. Dim oNextCell as Object
  38. Dim RefFormula(3) as String
  39. Const SBFIRSTCOL = 3
  40. Const SBFIRSTROW = 13
  41.     Down = aEvent.Source.Model.TabIndex
  42.     Workline = SBFIRSTROW + Down
  43.  
  44.     RefFormula(0) =    "=EWorkline/12"
  45.     RefFormula(1) = "=FWorkline/2"
  46.     RefFormula(2) =    "=GWorkline*2/3"
  47.     RefFormula(3) =    "=DWorkline*36"
  48.     
  49.     oDocument.AddActionLock()
  50.     oSheet = oSheets.GetbyIndex(0)
  51.     oSheet.Unprotect("")
  52.     For i = 0 To 3
  53.         oCell = oSheet.GetCellbyPosition(SBFIRSTCOL + i, Workline)
  54.         If oCell.CellStyle = InputStyle Then
  55.             If i < 3 Then
  56.                 oNextCell = oSheet.GetCellbyPosition(SBFIRSTCOL + i + 1, Workline)
  57.             Else
  58.                 oNextCell = oSheet.GetCellbyPosition(SBFIRSTCOL, Workline)
  59.             End If 
  60.             iNextCellValue = oNextCell.Value
  61.             oNextCell.CellStyle = InputStyle
  62.             oNextCell.Formula = ""
  63.             oNextCell.Value = iNextCellValue
  64.             oCell.CellStyle = CalcStyle
  65.             sCellFormula = ReplaceString(RefFormula(i), CStr(Workline+1),"Workline") 
  66.             oCell.Formula = sCellFormula
  67.             Exit For
  68.         End If
  69.     Next i
  70.     oSheet.Protect("")
  71.     oDocument.RemoveActionLock()    
  72.     oDocument.CalculateAll
  73. End Sub
  74.  
  75.  
  76.  
  77. Sub CopySheet
  78. Dim TableName as String
  79. Dim Separator as String
  80. Dim oSheet as Object
  81. Dim oNewSheet as object
  82.     oSheet = oDocument.CurrentController.ActiveSheet
  83.     ' Copy current sheet
  84.     ' Rename new sheet with its title, replace ".", "-" and "/" by "_"
  85.     TableName = oSheet.GetCellbyPosition(2,2).String
  86.     TableName = CheckNewSheetname(oSheets, TableName, oDocument.CharLocale)
  87.     oSheet.Unprotect("")
  88.     oNewSheet = CopySheetbyName(oSheets, oSheet.Name, TableName, oSheets.Count)
  89.     ClearReceipts
  90.     oNewSheet.Protect("")
  91.     oSheet.protect("")    
  92. End Sub
  93.  
  94.  
  95.  
  96. ' This sub clears all data on the costs overview sheet
  97. Sub ClearCosts
  98. Dim oSheet as Object
  99.     oSheet = oSheets(0)
  100.     oSheet.Unprotect("")
  101.     ChangeValueofRange(oSheet, "Costs", 0)
  102.     ChangeValueofRange(oSheet, "Price", 0)
  103.     ChangeValueofRange(oSheet, "Consumption", 0)
  104.     ChangeValueofRange(oSheet, "Mileage", 0)
  105.     ChangeValueofRange(oSheet, "Car", "")
  106.     oSheet.Protect("")
  107. End Sub
  108.  
  109.  
  110. ' This sub clears the data on the current gas bills sheet
  111. Sub ClearReceipts
  112. Dim oSheet as Object
  113.     oSheet = oDocument.CurrentController.GetActiveSheet
  114.     oDocument.AddActionLock()
  115.     oSheet.Unprotect("")
  116.     ChangeValueofRange(oSheet, oSheet.Name & "." & SBRECEIPTRANGE, "")
  117.     ChangeValueofRange(oSheet, oSheet.Name & "." & "I8:I8", "")
  118.     oSheet.Protect("")
  119.     oDocument.RemoveActionLock()    
  120. End Sub
  121.  
  122.  
  123.  
  124. ' The CheckGas function and the CheckConsumption function are invoked by checking
  125. ' the validity of the data entered into the respective cells.
  126. ' This function calculates the money spent on gasoline.
  127. ' It is called whenever a value for mileage, consuption or
  128. ' price for gas is being changed
  129. Function CheckGas (Value, Pos)
  130. Dim oSheet, oController, oCell as Object
  131. Dim Mileage, Consumption, Price, Gasoline as Double
  132. Dim i as Integer
  133. Dim SheetName as String
  134.     InsertValueToSelectedCell(Value)
  135.     oSheet = oSheets(0)
  136.     Mileage = GetValueofCellbyName(oSheet, "Mileage")    
  137.     Consumption = GetValueofCellbyName(oSheet, "Consumption")    
  138.     Price = GetValueofCellbyName(oSheet, "Price")
  139.     If Mileage <> 0 AND Consumption <> 0 AND Price <> 0 Then 'Avoid miscalculation
  140.         Select Case sDocLanguage
  141.             Case "en", "ja", "ko"
  142.                 Gasoline = (Mileage / Consumption) * Price
  143.             Case Else
  144.                 Gasoline = (Mileage / 100) * Consumption * Price
  145.         End Select
  146.         ' Recalculate the monthly, yearly etc. consumption of gasoline
  147.         SheetName = oSheet.Name
  148.         For i = 0 To Ubound(PeriodList())
  149.             oCell = oSheet.GetCellbyPosition(i + 3, 14)
  150.             If Instr(1,oCell.Formula, "=") = 0 Then
  151.                 oCell.Value = Gasoline *  PeriodList(i)
  152.                 Exit For
  153.             End If
  154.         Next i
  155.     End If
  156.     CheckGas = False
  157. End Function
  158.  
  159.  
  160. Sub InsertValuetoSelectedCell(CurValue)
  161. Dim oCell, oSheet as Object
  162. Dim dblValue as Double
  163.     On Local ERROR GOTO CELLISNULL
  164.     dblValue = CDbl(CurValue)
  165.     oSheet = oDocument.GetCurrentController.GetActiveSheet()
  166.     oCell = oDocument.GetCurrentController.Selection
  167.     oCell.Value = dblValue
  168. CELLISNULL:
  169. ' CDbl throws an exception when the parameter is a valueless string
  170.     If Err <> 0 Then
  171.         Resume Next    
  172.     End If
  173. End Sub
  174.  
  175. ' This function calculates consumption of gasoline
  176. ' It is called whenever a value for the money spent
  177. ' on gas is being changed
  178. Function CheckConsumption (Value, Pos)
  179. Dim GasMoney as Double
  180. Dim Mileage as Double
  181. Dim Price as Double
  182. Dim NewConsump as Double
  183. Dim oSheet, oController, oCell as Object
  184.     oSheet = oSheets(0)
  185.  
  186.     InsertValuetoSelectedCell(Value)
  187.     Mileage = GetValueofCellbyName(oSheet, "Mileage")    
  188.     Price = GetValueofCellbyName(oSheet, "Price")    
  189.  
  190.     oCell = oSheet.GetCellbyPosition(4, 14)
  191.     GasMoney = oCell.Value
  192.     If Mileage <> 0 AND GasMoney <> 0 AND Price <> 0 Then 'Avoid miscalculation
  193.         Select Case sDocLanguage
  194.             Case "en", "ja", "ko"
  195.                 NewConsump = (Mileage / (GasMoney / Price))
  196.             Case Else
  197.                 NewConsump = (((GasMoney / Price) / Mileage) * 100)
  198.         End Select
  199.         ChangeValueofRange(oSheet, "Consumption",NewConsump)
  200.     End If    
  201.     CheckConsumption = False
  202. End Function
  203.  
  204.  
  205.  
  206. ' This function is invoked by entering data in one of the cells for fuel bought,
  207. ' price per liter and total costs on a Gas Bills sheet. As soon as two of the
  208. ' three values are provided, the remaining value will be calculated.
  209. Function EnterGasBill (Value, Pos)
  210. Dim oSheet as Object
  211. Dim Column%, Row%, Table%
  212. Dim Liters as Double
  213. Dim Price as Double
  214. Dim Total as Double
  215. Dim iCellCol as Integer
  216. Dim iCellRow as Integer
  217.  
  218.     InsertValuetoSelectedCell(Value)
  219.     oSheet = oDocument.GetCurrentController.GetActiveSheet
  220.     iCellCol = oDocument.GetCurrentController.GetSelection.RangeAddress.StartColumn
  221.     iCellRow = oDocument.GetCurrentController.GetSelection.RangeAddress.StartRow
  222.  
  223.     Liters = oSheet.GetCellbyPosition(5, iCellRow).Value
  224.     Price = oSheet.GetCellbyPosition(6, iCellRow).Value
  225.     Total = oSheet.GetCellbyPosition(7, iCellRow).Value
  226.     Select Case iCellCol
  227.         Case 5 ' Liters entered
  228.             ' Change the Values in column 7 and 8
  229.             If Price <> 0 Then
  230.                 Total = Price*Liters
  231.                 oSheet.GetCellbyPosition(7,iCellRow).Value = Total
  232.             Elseif Total<>0 Then
  233.                 Price = Total/Liters
  234.                 oSheet.GetCellbyPosition(6,iCellRow).Value = Price 
  235.             End If
  236.  
  237.         Case 6 ' Price entered
  238.             ' Change the Values in column 6 and 8
  239.             If Liters <> 0 Then
  240.                 Total = Price*Liters
  241.                 oSheet.GetCellbyPosition(7, iCellRow).Value = Total
  242.             Elseif Total<>0 Then
  243.                 Liters = Total/Price
  244.                 oSheet.GetCellbyPosition(5,iCellRow).Value = Liters
  245.             End If
  246.  
  247.         Case 7 ' Total costs entered
  248.             ' Change the Values in column 6 and 7
  249.             If Liters <> 0 Then
  250.                 Price = Total/Liters
  251.                 oSheet.GetCellbyPosition(6, iCellRow).Value = Price 
  252.             Elseif Price <> 0 Then
  253.                 Liters = Total/Price
  254.                 oSheet.GetCellbyPosition(5,iCellRow).Value =  Liters
  255.             End If
  256.     End Select
  257. End Function</script:module>