From 897a4a11ae16cafdf7dd71f09685ddb6e4ab3866 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BE=9D=E7=91=AA=E8=B2=93?= Date: Tue, 6 Sep 2016 14:34:13 +0800 Subject: [PATCH] Added the Chi-square goodness of fit report. --- _1CorRel.vb | 6 +- _2PTTest.vb | 4 +- _3ITTest.vb | 4 +- _4ANOVA.vb | 8 +- _5Chi2GoF.vb | 818 +++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 829 insertions(+), 11 deletions(-) create mode 100644 _5Chi2GoF.vb diff --git a/_1CorRel.vb b/_1CorRel.vb index 2b05f0e..6891982 100644 --- a/_1CorRel.vb +++ b/_1CorRel.vb @@ -29,13 +29,13 @@ Sub subReportCorrelation (oDoc As Object, oDataRange As Object) Dim oSheet As Object, oColumns As Object, nRow As Integer Dim oCell As Object, oCells As Object, oCursor As Object Dim nN As Integer, sFormula As String + Dim sNotes As String, nPos As Integer Dim nFormatN As Integer, nFormatF As Integer, nFormatP As Integer Dim aBorderSingle As New com.sun.star.table.BorderLine Dim aBorderDouble As New com.sun.star.table.BorderLine Dim sCellXLabel As String, sCellsXData As String Dim sCellYLabel As String, sCellsYData As String Dim sCellN As String, sCellR As String - Dim sNotes As String, nPos As Integer oSheets = oDoc.getSheets sSheetName = oDataRange.getSpreadsheet.getName @@ -168,7 +168,7 @@ Sub subReportCorrelation (oDoc As Object, oDataRange As Object) oCursor.setPropertyValue ("CharPosture", com.sun.star.awt.FontSlant.ITALIC) oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) - nPos = InStr (nPos + 1, sNotes, "p<") + nPos = InStr (nPos + 1, sNotes, "p<") Loop nPos = InStr (sNotes, "(p)") oCursor.gotoStart (False) @@ -185,7 +185,7 @@ Sub subReportCorrelation (oDoc As Object, oDataRange As Object) oCursor.setPropertyValue ("CharPosture", com.sun.star.awt.FontSlant.ITALIC) oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) - nPos = InStr (nPos + 1, sNotes, "ρ") + nPos = InStr (nPos + 1, sNotes, "ρ") Loop nPos = InStr (sNotes, "H0") oCursor.gotoStart (False) diff --git a/_2PTTest.vb b/_2PTTest.vb index 1bd7000..b191092 100644 --- a/_2PTTest.vb +++ b/_2PTTest.vb @@ -28,6 +28,7 @@ Sub subReportPairedTTest (oDoc As Object, oDataRange As Object) Dim oSheet As Object, oColumns As Object, nRow As Integer Dim oCell As Object, oCells As Object, oCursor As Object Dim nN As Integer, sFormula As String + Dim sNotes As String, nPos As Integer Dim nFormatN As Integer, nFormatF As Integer, nFormatP As Integer Dim aBorderSingle As New com.sun.star.table.BorderLine Dim aBorderDouble As New com.sun.star.table.BorderLine @@ -36,7 +37,6 @@ Sub subReportPairedTTest (oDoc As Object, oDataRange As Object) Dim sCellYLabel As String, sCellsYData As String Dim sCellYN As String, sCellYMean As String, sCellYS As String Dim sCellN As String, sCellXYS As String, sCellR As String - Dim sNotes As String, nPos As Integer oSheets = oDoc.getSheets sSheetName = oDataRange.getSpreadsheet.getName @@ -317,7 +317,7 @@ Sub subReportPairedTTest (oDoc As Object, oDataRange As Object) oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) nPos = InStr (nPos + 1, sNotes, "p<") - Loop + Loop nPos = InStr (sNotes, "(p)") oCursor.gotoStart (False) oCursor.goRight (nPos, False) diff --git a/_3ITTest.vb b/_3ITTest.vb index d398365..ba30198 100644 --- a/_3ITTest.vb +++ b/_3ITTest.vb @@ -31,6 +31,7 @@ Sub subReportIndependentTTest (oDoc As Object, oDataRange As Object) Dim oSheet As Object, oColumns As Object, nRow As Integer Dim oCell As Object, oCells As Object, oCursor As Object, oTempDataRange As Object Dim nN As Integer, sFormula As String, sSP2 As String + Dim sNotes As String, nPos As Integer Dim nFormatN As Integer, nFormatF As Integer, nFormatP As Integer Dim aBorderSingle As New com.sun.star.table.BorderLine Dim aBorderDouble As New com.sun.star.table.BorderLine @@ -39,7 +40,6 @@ Sub subReportIndependentTTest (oDoc As Object, oDataRange As Object) Dim sCellYLabel As String, sCellsYData As String Dim sCellYN As String, sCellYMean As String, sCellYS As String Dim sCellF As String, sCellsN As String, sCellN As String - Dim sNotes As String, nPos As Integer oSheets = oDoc.getSheets sSheetName = oDataRange.getSpreadsheet.getName @@ -273,7 +273,7 @@ Sub subReportIndependentTTest (oDoc As Object, oDataRange As Object) oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) nPos = InStr (nPos + 1, sNotes, "p<") - Loop + Loop nPos = InStr (sNotes, "(p)") oCursor.gotoStart (False) oCursor.goRight (nPos, False) diff --git a/_4ANOVA.vb b/_4ANOVA.vb index 49e7004..43de397 100644 --- a/_4ANOVA.vb +++ b/_4ANOVA.vb @@ -32,6 +32,7 @@ Sub subReportANOVA (oDoc As Object, oDataRange As Object) Dim oSheet As Object, oColumns As Object, nRow As Integer, nStartRow As Integer Dim oCell As Object, oCells As Object, oCursor As Object, oTempDataRange As Object Dim nN As Integer, sFormula As String + Dim sNotes As String, nPos As Integer Dim nFormatN As Integer, nFormatF As Integer, nFormatP As Integer Dim aBorderSingle As New com.sun.star.table.BorderLine Dim aBorderDouble As New com.sun.star.table.BorderLine @@ -45,7 +46,6 @@ Sub subReportANOVA (oDoc As Object, oDataRange As Object) Dim sCellSSB As String, sCellSSW As String, sCellSST As String Dim sCellMSB As String, sCellMSW As String Dim sCellMeanDiff As String - Dim sNotes As String, nPos As Integer oSheets = oDoc.getSheets sSheetName = oDataRange.getSpreadsheet.getName @@ -341,7 +341,7 @@ Sub subReportANOVA (oDoc As Object, oDataRange As Object) oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) nPos = InStr (nPos + 1, sNotes, "p<") - Loop + Loop nPos = InStr (sNotes, "(p)") oCursor.gotoStart (False) oCursor.goRight (nPos - 1, False) @@ -565,7 +565,7 @@ Sub subReportANOVA (oDoc As Object, oDataRange As Object) oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) nPos = InStr (nPos + 1, sNotes, "p<") - Loop + Loop nPos = InStr (sNotes, "(p)") oCursor.gotoStart (False) oCursor.goRight (nPos, False) @@ -586,7 +586,7 @@ Sub subReportANOVA (oDoc As Object, oDataRange As Object) oCursor.setPropertyValue ("CharEscapement", -33) oCursor.setPropertyValue ("CharEscapementHeight", 58) nPos = InStr (nPos + 1, sNotes, "μ") - Loop + Loop nPos = InStr (sNotes, "μN") oCursor.gotoStart (False) oCursor.goRight (nPos, False) diff --git a/_5Chi2GoF.vb b/_5Chi2GoF.vb new file mode 100644 index 0000000..864cf2a --- /dev/null +++ b/_5Chi2GoF.vb @@ -0,0 +1,818 @@ +' _5Chi2GoF: The macros to for generating the report of Chi-square goodness of fit +' by imacat , 2016-09-05 +Option Explicit + +' subTestChi2GoodnessOfFit: Tests the chi-square goodness of fit report +Sub subTestChi2GoodnessOfFit + Dim oSheets As Object, sSheetName As String + Dim oSheet As Object, oRange As Object + + sSheetName = "chi2" + oSheets = ThisComponent.getSheets + If Not oSheets.hasByName (sSheetName) Then + MsgBox "Data sheet """ & sSheetName & """ not found" + Exit Sub + End If + If oSheets.hasByName (sSheetName & "_chi2") Then + oSheets.removeByName (sSheetName & "_chi2") + End If + oSheet = ThisComponent.getSheets.getByName (sSheetName) + 'oRange = oSheet.getCellRangeByName ("A7:B192") + oRange = oSheet.getCellRangeByName ("A7:B167") + subReportChi2GoodnessOfFit (ThisComponent, oRange) +End Sub + +' subReportChi2GoodnessOfFit: Reports the chi-square goodness of fit +Sub subReportChi2GoodnessOfFit (oDoc As Object, oDataRange As Object) + Dim oSheets As Object, sSheetName As String + Dim nI As Integer, nJ As Integer, nJ1 As Integer, nJ2 As Integer + Dim mNames () As String, nSheetIndex As Integer + Dim oSheet As Object, oColumns As Object, nRow As Integer, nStartRow As Integer + Dim oCell As Object, oCells As Object, oCursor As Object + Dim nN As Integer, sFormula As String + Dim sNotes As String, nPos As Integer + Dim nFormatN As Integer, nFormatF As Integer, nFormatP As Integer, nFormatPct As Integer + Dim aBorderSingle As New com.sun.star.table.BorderLine + Dim aBorderDouble As New com.sun.star.table.BorderLine + + Dim sCellsJData As String, sCellsIData As String + Dim sLabel As String, sLabelsColumn As String, sLabelsRow As String + Dim nGroups As Integer, nEvents As Integer + Dim mCellLabelColomn () As String, mCellLabelRow () As String + Dim mCellNJ () As String, mCellNI () As String, mCellPI () As String + Dim mCellFrequency (0, 0) As String, mCellProportion (0, 0) As String + Dim sCellN As String + + Dim sCell As String, sCells As String + Dim sCellsRow As String, sCellsColumn As String + Dim sCellChi2 As String, sCellDF As String + Dim sSE2 AS String, nTotalColumns As Integer + + oSheets = oDoc.getSheets + sSheetName = oDataRange.getSpreadsheet.getName + mNames = oSheets.getElementNames + For nI = 0 To UBound (mNames) + If mNames (nI) = sSheetName Then + nSheetIndex = nI + End If + Next nI + oSheets.insertNewByName (sSheetName & "_chi2", nSheetIndex + 1) + oSheet = oSheets.getByName (sSheetName & "_chi2") + + sCellsJData = fnGetRangeName (oDataRange.getCellRangeByPosition (0, 1, 0, oDataRange.getRows.getCount - 1)) + sCellsIData = fnGetRangeName (oDataRange.getCellRangeByPosition (1, 1, 1, oDataRange.getRows.getCount - 1)) + + ' Counts the number of groups and events + sLabelsColumn = " " + sLabelsRow = " " + nGroups = 0 + nEvents = 0 + For nRow = 1 To oDataRange.getRows.getCount - 1 + sLabel = oDataRange.getCellByPosition (0, nRow).getString + If InStr (sLabelsColumn, " " & sLabel & " ") = 0 Then + sLabelsColumn = sLabelsColumn & sLabel & " " + nGroups = nGroups + 1 + End If + sLabel = oDataRange.getCellByPosition (1, nRow).getString + If InStr (sLabelsRow, " " & sLabel & " ") = 0 Then + sLabelsRow = sLabelsRow & sLabel & " " + nEvents = nEvents + 1 + End If + Next nRow + + ReDim mCellLabelColomn (nGroups - 1) As String, mCellLabelRow (nEvents - 1) As String + ReDim mCellNJ (nGroups - 1) As String, mCellNI (nEvents - 1) As String + ReDim mCellPI (nEvents - 1) As String + ReDim mCellFrequency (nGroups - 1, nEvents - 1) As String + ReDim mCellProportion (nGroups - 1, nEvents - 1) As String + + ' Collects the group and event labels + sLabelsColumn = " " + sLabelsRow = " " + nJ = 0 + nI = 0 + For nRow = 1 To oDataRange.getRows.getCount - 1 + oCell = oDataRange.getCellByPosition (0, nRow) + sLabel = oCell.getString + If InStr (sLabelsColumn, " " & sLabel & " ") = 0 Then + sLabelsColumn = sLabelsColumn & sLabel & " " + mCellLabelColomn (nJ) = fnGetRangeName (oCell) + nJ = nJ + 1 + End If + oCell = oDataRange.getCellByPosition (1, nRow) + sLabel = oCell.getString + If InStr (sLabelsRow, " " & sLabel & " ") = 0 Then + sLabelsRow = sLabelsRow & sLabel & " " + mCellLabelRow (nI) = fnGetRangeName (oCell) + nI = nI + 1 + End If + Next nRow + + ' Obtains the format parameters for the report. + nFormatN = fnQueryFormat (oDoc, "#,##0") + nFormatF = fnQueryFormat (oDoc, "#,###.000") + nFormatP = fnQueryFormat (oDoc, "[<0.01]#.000""**"";[<0.05]#.000""*"";#.000") + nFormatPct = fnQueryFormat (oDoc, "0.0%") + + aBorderSingle.OuterLineWidth = 2 + aBorderDouble.OuterLineWidth = 2 + aBorderDouble.InnerLineWidth = 2 + aBorderDouble.LineDistance = 2 + + ' Sets the column widths of the report. + nTotalColumns = nGroups + 2 + If nEvents = 2 Then + If nTotalColumns < 5 Then + nTotalColumns = 5 + End If + Else + If nTotalColumns < 6 Then + nTotalColumns = 6 + End If + End If + oColumns = oSheet.getColumns + For nJ = 0 To nTotalColumns - 1 + oColumns.getByIndex (nJ).setPropertyValue ("Width", 3060) + Next nJ + + nRow = -2 + + ' Group description + nRow = nRow + 2 + oCell = oSheet.getCellByPosition (0, nRow) + oCell.setString ("Crosstabulation") + oCell.setPropertyValue ("CellStyle", "Result2") + oCells = oSheet.getCellRangeByPosition (0, nRow, nGroups + 1, nRow) + oCells.merge (True) + nRow = nRow + 1 + oCell = oSheet.getCellByPosition (0, nRow) + oCell.setString ("Event") + For nJ = 0 To nGroups - 1 + oCell = oSheet.getCellByPosition (nJ + 1, nRow) + sFormula = "=" & mCellLabelColomn (nJ) + oCell.setFormula (sFormula) + mCellLabelColomn (nJ) = fnGetLocalRangeName (oCell) + Next nJ + oCell = oSheet.getCellByPosition (nGroups + 1, nRow) + oCell.setString ("Total") + + ' Shows each event + nRow = nRow - 1 + For nI = 0 To nEvents - 1 + nRow = nRow + 2 + oCell = oSheet.getCellByPosition (0, nRow) + sFormula = "=" & mCellLabelRow (nI) + oCell.setFormula (sFormula) + oCell.setPropertyValue ("VertJustify", com.sun.star.table.CellVertJustify.TOP) + mCellLabelRow (nI) = fnGetLocalRangeName (oCell) + oCells = oSheet.getCellRangeByPosition (0, nRow, 0, nRow + 1) + oCells.merge (True) + For nJ = 0 To nGroups - 1 + oCell = oSheet.getCellByPosition (1 + nJ, nRow) + sFormula = "=COUNTIFS(" & sCellsJData & ";" & mCellLabelColomn (nJ) & ";" & sCellsIData & ";" & mCellLabelRow (nI) & ")" + oCell.setFormula (sFormula) + oCell.setPropertyValue ("NumberFormat", nFormatN) + mCellFrequency (nJ, nI) = fnGetLocalRangeName (oCell) + Next nJ + oCell = oSheet.getCellByPosition (1 + nGroups, nRow) + sCells = fnGetLocalRangeName (oSheet.getCellRangeByPosition (1, nRow, nGroups, nRow)) + sFormula = "=SUM(" & sCells & ")" + oCell.setFormula (sFormula) + oCell.setPropertyValue ("NumberFormat", nFormatN) + mCellNI (nI) = fnGetLocalRangeName (oCell) + Next nI + ' Shows the total + nRow = nRow + 2 + oCell = oSheet.getCellByPosition (0, nRow) + oCell.setString ("Total") + oCell.setPropertyValue ("VertJustify", com.sun.star.table.CellVertJustify.TOP) + oCells = oSheet.getCellRangeByPosition (0, nRow, 0, nRow + 1) + oCells.merge (True) + For nJ = 0 To nGroups - 1 + oCell = oSheet.getCellByPosition (1 + nJ, nRow) + sFormula = "" + For nI = 0 To nEvents - 1 + sFormula = sFormula & "+" & mCellFrequency (nJ, nI) + Next nI + sFormula = "=" & Right (sFormula, Len (sFormula) - 1) + oCell.setFormula (sFormula) + oCell.setPropertyValue ("NumberFormat", nFormatN) + mCellNJ (nJ) = fnGetLocalRangeName (oCell) + Next nJ + oCell = oSheet.getCellByPosition (1 + nGroups, nRow) + sCells = fnGetLocalRangeName (oSheet.getCellRangeByPosition (1, nRow, nGroups, nRow)) + sFormula = "" + For nI = 0 To nEvents - 1 + sFormula = sFormula & "+" & mCellNI (nI) + Next nI + sFormula = "=" & Right (sFormula, Len (sFormula) - 1) + oCell.setFormula (sFormula) + oCell.setPropertyValue ("NumberFormat", nFormatN) + sCellN = fnGetLocalRangeName (oCell) + ' Shows the proportions + nRow = nRow - nEvents * 2 - 1 + For nI = 0 To nEvents - 1 + nRow = nRow + 2 + For nJ = 0 To nGroups - 1 + oCell = oSheet.getCellByPosition (1 + nJ, nRow) + sFormula = "=" & mCellFrequency (nJ, nI) & "/" & mCellNJ (nJ) + oCell.setFormula (sFormula) + oCell.setPropertyValue ("NumberFormat", nFormatPct) + mCellProportion (nJ, nI) = fnGetLocalRangeName (oCell) + Next nJ + oCell = oSheet.getCellByPosition (1 + nGroups, nRow) + sFormula = "=" & mCellNI (nI) & "/" & sCellN + oCell.setFormula (sFormula) + oCell.setPropertyValue ("NumberFormat", nFormatPct) + Next nI + ' Shows the total + nRow = nRow + 2 + For nJ = 0 To nGroups - 1 + oCell = oSheet.getCellByPosition (1 + nJ, nRow) + sFormula = "" + For nI = 0 To nEvents - 1 + sFormula = sFormula & "+" & mCellProportion (nJ, nI) + Next nI + sFormula = "=" & Right (sFormula, Len (sFormula) - 1) + oCell.setFormula (sFormula) + oCell.setPropertyValue ("NumberFormat", nFormatPct) + Next nJ + oCell = oSheet.getCellByPosition (1 + nGroups, nRow) + sCells = fnGetLocalRangeName (oSheet.getCellRangeByPosition (1, nRow, nGroups, nRow)) + sFormula = "=" & sCellN & "/" & sCellN + oCell.setFormula (sFormula) + oCell.setPropertyValue ("NumberFormat", nFormatPct) + + oCells = oSheet.getCellRangeByPosition (1, nRow - nEvents * 2 - 1, nGroups, nRow - nEvents * 2 - 1) + sCellsRow = fnGetLocalRangeName (oCells) + oCells = oSheet.getCellRangeByPosition (1, nRow - nEvents * 2 - 1, 1, nRow - 2) + sCellsColumn = fnGetLocalRangeName (oCells) + + ' Draws the table borders. + oCells = oSheet.getCellByPosition (0, nRow - nEvents * 2 - 2) + oCells.setPropertyValue ("TopBorder", aBorderDouble) + oCells.setPropertyValue ("RightBorder", aBorderSingle) + oCells.setPropertyValue ("BottomBorder", aBorderSingle) + oCells = oSheet.getCellRangeByPosition (1, nRow - nEvents * 2 - 2, nGroups + 1, nRow - nEvents * 2 - 2) + oCells.setPropertyValue ("TopBorder", aBorderDouble) + oCells.setPropertyValue ("BottomBorder", aBorderSingle) + oCells = oSheet.getCellRangeByPosition (0, nRow - nEvents * 2 - 1, 0, nRow - 2) + oCells.setPropertyValue ("RightBorder", aBorderSingle) + oCells = oSheet.getCellByPosition (0, nRow - 1) + oCells.setPropertyValue ("TopBorder", aBorderSingle) + oCells.setPropertyValue ("RightBorder", aBorderSingle) + oCells.setPropertyValue ("BottomBorder", aBorderDouble) + oCells = oSheet.getCellRangeByPosition (1, nRow - 1, nGroups + 1, nRow - 1) + oCells.setPropertyValue ("TopBorder", aBorderSingle) + oCells = oSheet.getCellRangeByPosition (1, nRow, nGroups + 1, nRow) + oCells.setPropertyValue ("BottomBorder", aBorderDouble) + + ' The Chi-square test + nRow = nRow + 2 + oCell = oSheet.getCellByPosition (0, nRow) + oCell.setString ("Chi-Square Test") + oCell.setPropertyValue ("CellStyle", "Result2") + oCells = oSheet.getCellRangeByPosition (0, nRow, 3, nRow) + oCells.merge (True) + nRow = nRow + 1 + oCell = oSheet.getCellByPosition (0, nRow) + oCell.setString ("Test") + oCell = oSheet.getCellByPosition (1, nRow) + oCell.setString ("χ2") + oCell.setPropertyValue ("ParaAdjust", com.sun.star.style.ParagraphAdjust.RIGHT) + oCursor = oCell.createTextCursor + oCursor.gotoStart (False) + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharPosture", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) + oCursor.collapseToEnd + oCursor.gotoEnd (True) + oCursor.setPropertyValue ("CharEscapement", 33) + oCursor.setPropertyValue ("CharEscapementHeight", 58) + oCell = oSheet.getCellByPosition (2, nRow) + oCell.setString ("df") + oCell.setPropertyValue ("ParaAdjust", com.sun.star.style.ParagraphAdjust.RIGHT) + oCursor = oCell.createTextCursor + oCursor.gotoStart (False) + oCursor.gotoEnd (True) + oCursor.setPropertyValue ("CharPosture", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) + oCell = oSheet.getCellByPosition (3, nRow) + oCell.setString ("p") + oCell.setPropertyValue ("ParaAdjust", com.sun.star.style.ParagraphAdjust.RIGHT) + oCursor = oCell.createTextCursor + oCursor.gotoStart (False) + oCursor.gotoEnd (True) + oCursor.setPropertyValue ("CharPosture", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) + + ' The test result. + nRow = nRow + 1 + oCell = oSheet.getCellByPosition (0, nRow) + oCell.setString ("Pearson’s Chi-Square") + oCell = oSheet.getCellByPosition (1, nRow) + sFormula = "" + For nI = 0 To nEvents - 1 + For nJ = 0 To nGroups - 1 + sFormula = sFormula & "+POWER(" & mCellFrequency (nJ, nI) & ";2)/(" & mCellNI (nI) & "*" & mCellNJ (nJ) & ")" + Next nJ + Next nI + sFormula = "=" & sCellN & "*(" & Right (sFormula, Len (sFormula) - 1) & "-1)" + oCell.setFormula (sFormula) + oCell.setPropertyValue ("NumberFormat", nFormatF) + sCellChi2 = fnGetLocalRangeName (oCell) + oCell = oSheet.getCellByPosition (2, nRow) + sFormula = "=(COUNT(" & sCellsRow & ")-1)*(COUNT(" & sCellsColumn & ")/2-1)" + oCell.setFormula (sFormula) + oCell.setPropertyValue ("NumberFormat", nFormatN) + sCellDF = fnGetLocalRangeName (oCell) + oCell = oSheet.getCellByPosition (3, nRow) + sFormula = "=CHIDIST(" & sCellChi2 & ";" & sCellDF & ")" + oCell.setFormula (sFormula) + oCell.setPropertyValue ("NumberFormat", nFormatP) + + ' The foot notes of the test. + nRow = nRow + 1 + oCell = oSheet.getCellByPosition (0, nRow) + oCell.setString ("Note: *: p<.05, **: p<.01" & Chr (10) & _ + "H0: P1=P2=…PN=P (the proportions of the events in each group are the same)." & Chr (10) & _ + "H1: The above is false (the proportions of the events in each group are different) if the probability (p) is small enough.") + oCell.setPropertyValue ("IsTextWrapped", True) + oCells = oSheet.getCellRangeByPosition (0, nRow, 3, nRow) + oCells.merge (True) + sNotes = oCell.getString + oCursor = oCell.createTextCursor + nPos = InStr (sNotes, "p<") + Do While nPos <> 0 + oCursor.gotoStart (False) + oCursor.goRight (nPos - 1, False) + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharPosture", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) + nPos = InStr (nPos + 1, sNotes, "p<") + Loop + nPos = InStr (sNotes, "(p)") + oCursor.gotoStart (False) + oCursor.goRight (nPos, False) + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharPosture", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) + nPos = InStr (1, sNotes, "P", 0) + Do While nPos <> 0 + oCursor.gotoStart (False) + oCursor.goRight (nPos - 1, False) + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharPosture", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) + oCursor.collapseToEnd + oCursor.goRight (1, True) + If oCursor.getString <> " " Then + oCursor.setPropertyValue ("CharEscapement", -33) + oCursor.setPropertyValue ("CharEscapementHeight", 58) + End If + nPos = InStr (nPos + 1, sNotes, "P", 0) + Loop + nPos = InStr (sNotes, "PN") + oCursor.gotoStart (False) + oCursor.goRight (nPos, False) + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharPosture", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) + nPos = InStr (sNotes, "H0") + oCursor.gotoStart (False) + oCursor.goRight (nPos - 1, False) + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharPosture", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) + oCursor.collapseToEnd + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharEscapement", -33) + oCursor.setPropertyValue ("CharEscapementHeight", 58) + nPos = InStr (sNotes, "H1") + oCursor.gotoStart (False) + oCursor.goRight (nPos - 1, False) + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharPosture", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) + oCursor.collapseToEnd + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharEscapement", -33) + oCursor.setPropertyValue ("CharEscapementHeight", 58) + + ' Draws the table borders. + oCells = oSheet.getCellByPosition (0, nRow - 2) + oCells.setPropertyValue ("TopBorder", aBorderDouble) + oCells.setPropertyValue ("RightBorder", aBorderSingle) + oCells.setPropertyValue ("BottomBorder", aBorderSingle) + oCells = oSheet.getCellRangeByPosition (1, nRow - 2, 3, nRow - 2) + oCells.setPropertyValue ("TopBorder", aBorderDouble) + oCells.setPropertyValue ("BottomBorder", aBorderSingle) + oCells = oSheet.getCellByPosition (0, nRow - 1) + oCells.setPropertyValue ("TopBorder", aBorderSingle) + oCells.setPropertyValue ("RightBorder", aBorderSingle) + oCells.setPropertyValue ("BottomBorder", aBorderDouble) + oCells = oSheet.getCellRangeByPosition (1, nRow - 1, 3, nRow - 1) + oCells.setPropertyValue ("TopBorder", aBorderSingle) + oCells.setPropertyValue ("BottomBorder", aBorderDouble) + + ' The posteriori comparison + nRow = nRow + 2 + If nEvents = 2 Then + oCell = oSheet.getCellByPosition (0, nRow) + oCell.setString ("Posteriori Comparison") + oCell.setPropertyValue ("CellStyle", "Result2") + oCells = oSheet.getCellRangeByPosition (0, nRow, 4, nRow) + oCells.merge (True) + nRow = nRow + 1 + oCell = oSheet.getCellByPosition (0, nRow) + oCell.setString ("j1") + oCursor = oCell.createTextCursor + oCursor.gotoStart (False) + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharPosture", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) + oCursor.collapseToEnd + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharEscapement", -33) + oCursor.setPropertyValue ("CharEscapementHeight", 58) + oCell = oSheet.getCellByPosition (1, nRow) + oCell.setString ("j2") + oCursor = oCell.createTextCursor + oCursor.gotoStart (False) + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharPosture", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) + oCursor.collapseToEnd + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharEscapement", -33) + oCursor.setPropertyValue ("CharEscapementHeight", 58) + oCell = oSheet.getCellByPosition (2, nRow) + oCell.setString ("Pj1-Pj2") + oCell.setPropertyValue ("ParaAdjust", com.sun.star.style.ParagraphAdjust.RIGHT) + oCursor = oCell.createTextCursor + oCursor.gotoStart (False) + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharPosture", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) + oCursor.collapseToEnd + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharPosture", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharEscapement", -33) + oCursor.setPropertyValue ("CharEscapementHeight", 58) + oCursor.collapseToEnd + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharEscapement", -52) + oCursor.setPropertyValue ("CharEscapementHeight", 34) + oCursor.collapseToEnd + oCursor.goRight (1, False) + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharPosture", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) + oCursor.collapseToEnd + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharPosture", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharEscapement", -33) + oCursor.setPropertyValue ("CharEscapementHeight", 58) + oCursor.collapseToEnd + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharEscapement", -52) + oCursor.setPropertyValue ("CharEscapementHeight", 34) + oCell = oSheet.getCellByPosition (3, nRow) + oCell.setString ("χ2") + oCell.setPropertyValue ("ParaAdjust", com.sun.star.style.ParagraphAdjust.RIGHT) + oCursor = oCell.createTextCursor + oCursor.gotoStart (False) + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharPosture", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) + oCursor.collapseToEnd + oCursor.gotoEnd (True) + oCursor.setPropertyValue ("CharEscapement", 33) + oCursor.setPropertyValue ("CharEscapementHeight", 58) + oCell = oSheet.getCellByPosition (4, nRow) + oCell.setString ("p") + oCell.setPropertyValue ("ParaAdjust", com.sun.star.style.ParagraphAdjust.RIGHT) + oCursor = oCell.createTextCursor + oCursor.gotoStart (False) + oCursor.gotoEnd (True) + oCursor.setPropertyValue ("CharPosture", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) + Else + oCell = oSheet.getCellByPosition (0, nRow) + oCell.setString ("Posteriori Comparison") + oCell.setPropertyValue ("CellStyle", "Result2") + oCells = oSheet.getCellRangeByPosition (0, nRow, 5, nRow) + oCells.merge (True) + nRow = nRow + 1 + oCell = oSheet.getCellByPosition (0, nRow) + oCell.setString ("Event") + oCell = oSheet.getCellByPosition (1, nRow) + oCell.setString ("j1") + oCursor = oCell.createTextCursor + oCursor.gotoStart (False) + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharPosture", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) + oCursor.collapseToEnd + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharEscapement", -33) + oCursor.setPropertyValue ("CharEscapementHeight", 58) + oCell = oSheet.getCellByPosition (2, nRow) + oCell.setString ("j2") + oCursor = oCell.createTextCursor + oCursor.gotoStart (False) + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharPosture", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) + oCursor.collapseToEnd + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharEscapement", -33) + oCursor.setPropertyValue ("CharEscapementHeight", 58) + oCell = oSheet.getCellByPosition (3, nRow) + oCell.setString ("Pj1-Pj2") + oCell.setPropertyValue ("ParaAdjust", com.sun.star.style.ParagraphAdjust.RIGHT) + oCursor = oCell.createTextCursor + oCursor.gotoStart (False) + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharPosture", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) + oCursor.collapseToEnd + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharPosture", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharEscapement", -33) + oCursor.setPropertyValue ("CharEscapementHeight", 58) + oCursor.collapseToEnd + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharEscapement", -52) + oCursor.setPropertyValue ("CharEscapementHeight", 34) + oCursor.collapseToEnd + oCursor.goRight (1, False) + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharPosture", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) + oCursor.collapseToEnd + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharPosture", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharEscapement", -33) + oCursor.setPropertyValue ("CharEscapementHeight", 58) + oCursor.collapseToEnd + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharEscapement", -52) + oCursor.setPropertyValue ("CharEscapementHeight", 34) + oCell = oSheet.getCellByPosition (4, nRow) + oCell.setString ("χ2") + oCell.setPropertyValue ("ParaAdjust", com.sun.star.style.ParagraphAdjust.RIGHT) + oCursor = oCell.createTextCursor + oCursor.gotoStart (False) + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharPosture", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) + oCursor.collapseToEnd + oCursor.gotoEnd (True) + oCursor.setPropertyValue ("CharEscapement", 33) + oCursor.setPropertyValue ("CharEscapementHeight", 58) + oCell = oSheet.getCellByPosition (5, nRow) + oCell.setString ("p") + oCell.setPropertyValue ("ParaAdjust", com.sun.star.style.ParagraphAdjust.RIGHT) + oCursor = oCell.createTextCursor + oCursor.gotoStart (False) + oCursor.gotoEnd (True) + oCursor.setPropertyValue ("CharPosture", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) + End If + + ' The comparison between groups + nRow = nRow + 1 + If nEvents = 2 Then + For nJ1 = 0 To nGroups - 1 + oCell = oSheet.getCellByPosition (0, nRow) + sFormula = "=" & mCellLabelColomn (nJ1) + oCell.setFormula (sFormula) + oCell.setPropertyValue ("VertJustify", com.sun.star.table.CellVertJustify.TOP) + oCells = oSheet.getCellRangeByPosition (0, nRow, 0, nRow + (nGroups - 1) - 1) + oCells.merge (True) + For nJ2 = 0 To nGroups - 1 + If nJ1 <> nJ2 Then + oCell = oSheet.getCellByPosition (1, nRow) + sFormula = "=" & mCellLabelColomn (nJ2) + oCell.setFormula (sFormula) + oCell = oSheet.getCellByPosition (2, nRow) + sFormula = "=" & mCellProportion (nJ1, 0) & "-" & mCellProportion (nJ2, 0) + oCell.setFormula (sFormula) + oCell.setPropertyValue ("NumberFormat", nFormatPct) + sCell = fnGetLocalRangeName (oCell) + sSE2 = "(" & mCellProportion (nJ1, 0) & "*(1-" & mCellProportion (nJ1, 0) & "))/" & mCellNJ (nJ1) & _ + "+(" & mCellProportion (nJ2, 0) & "*(1-" & mCellProportion (nJ2, 0) & "))/" & mCellNJ (nJ2) + oCell = oSheet.getCellByPosition (3, nRow) + sFormula = "=IF(" & sSE2 & "=0;""(N/A)"";POWER(" & sCell & ";2)/(" & sSE2 & "))" + oCell.setFormula (sFormula) + oCell.setPropertyValue ("NumberFormat", nFormatF) + oCell.setPropertyValue ("ParaAdjust", com.sun.star.style.ParagraphAdjust.RIGHT) + sCellChi2 = fnGetLocalRangeName (oCell) + oCell = oSheet.getCellByPosition (4, nRow) + sFormula = "=IF(" & sSE2 & "=0;""(N/A)"";CHIDIST(" & sCellChi2 & ";" & sCellDF & "))" + oCell.setFormula (sFormula) + oCell.setPropertyValue ("NumberFormat", nFormatP) + oCell.setPropertyValue ("ParaAdjust", com.sun.star.style.ParagraphAdjust.RIGHT) + nRow = nRow + 1 + End If + Next nJ2 + Next nJ1 + Else + For nI = 0 To nEvents - 1 + oCell = oSheet.getCellByPosition (0, nRow) + sFormula = "=" & mCellLabelRow (nI) + oCell.setFormula (sFormula) + oCell.setPropertyValue ("VertJustify", com.sun.star.table.CellVertJustify.TOP) + oCells = oSheet.getCellRangeByPosition (0, nRow, 0, nRow + nGroups * (nGroups - 1) - 1) + oCells.merge (True) + For nJ1 = 0 To nGroups - 1 + oCell = oSheet.getCellByPosition (1, nRow) + sFormula = "=" & mCellLabelColomn (nJ1) + oCell.setFormula (sFormula) + oCell.setPropertyValue ("VertJustify", com.sun.star.table.CellVertJustify.TOP) + oCells = oSheet.getCellRangeByPosition (1, nRow, 1, nRow + (nGroups - 1) - 1) + oCells.merge (True) + For nJ2 = 0 To nGroups - 1 + If nJ1 <> nJ2 Then + oCell = oSheet.getCellByPosition (2, nRow) + sFormula = "=" & mCellLabelColomn (nJ2) + oCell.setFormula (sFormula) + oCell = oSheet.getCellByPosition (3, nRow) + sFormula = "=" & mCellProportion (nJ1, nI) & "-" & mCellProportion (nJ2, nI) + oCell.setFormula (sFormula) + oCell.setPropertyValue ("NumberFormat", nFormatPct) + sCell = fnGetLocalRangeName (oCell) + sSE2 = "(" & mCellProportion (nJ1, nI) & "*(1-" & mCellProportion (nJ1, nI) & "))/" & mCellNJ (nJ1) & _ + "+(" & mCellProportion (nJ2, nI) & "*(1-" & mCellProportion (nJ2, nI) & "))/" & mCellNJ (nJ2) + oCell = oSheet.getCellByPosition (4, nRow) + sFormula = "=IF(" & sSE2 & "=0;""(N/A)"";POWER(" & sCell & ";2)/(" & sSE2 & "))" + oCell.setFormula (sFormula) + oCell.setPropertyValue ("NumberFormat", nFormatF) + oCell.setPropertyValue ("ParaAdjust", com.sun.star.style.ParagraphAdjust.RIGHT) + sCellChi2 = fnGetLocalRangeName (oCell) + oCell = oSheet.getCellByPosition (5, nRow) + sFormula = "=IF(" & sSE2 & "=0;""(N/A)"";CHIDIST(" & sCellChi2 & ";" & sCellDF & "))" + oCell.setFormula (sFormula) + oCell.setPropertyValue ("NumberFormat", nFormatP) + oCell.setPropertyValue ("ParaAdjust", com.sun.star.style.ParagraphAdjust.RIGHT) + nRow = nRow + 1 + End If + Next nJ2 + Next nJ1 + Next nI + End If + nRow = nRow - 1 + + ' The foot notes of the test. + nRow = nRow + 1 + oCell = oSheet.getCellByPosition (0, nRow) + oCell.setString ("Note: *: p<.05, **: p<.01" & Chr (10) & _ + "H0: Pj1=Pj2 (the proportions of the event in the two groups are the same)." & Chr (10) & _ + "H1: Pj1≠Pj2 (the proportions of the event in the two groups are different) if the probability (p) is small enough.") + oCell.setPropertyValue ("IsTextWrapped", True) + If nEvents = 2 Then + oCells = oSheet.getCellRangeByPosition (0, nRow, 4, nRow) + Else + oCells = oSheet.getCellRangeByPosition (0, nRow, 5, nRow) + End If + oCells.merge (True) + sNotes = oCell.getString + oCursor = oCell.createTextCursor + nPos = InStr (sNotes, "p<") + Do While nPos <> 0 + oCursor.gotoStart (False) + oCursor.goRight (nPos - 1, False) + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharPosture", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) + nPos = InStr (nPos + 1, sNotes, "p<") + Loop + nPos = InStr (sNotes, "(p)") + oCursor.gotoStart (False) + oCursor.goRight (nPos, False) + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharPosture", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) + nPos = InStr (sNotes, "Pj") + Do While nPos <> 0 + oCursor.gotoStart (False) + oCursor.goRight (nPos - 1, False) + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharPosture", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) + oCursor.collapseToEnd + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharEscapement", -33) + oCursor.setPropertyValue ("CharEscapementHeight", 58) + oCursor.setPropertyValue ("CharPosture", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) + oCursor.collapseToEnd + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharEscapement", -52) + oCursor.setPropertyValue ("CharEscapementHeight", 34) + nPos = InStr (nPos + 1, sNotes, "Pj") + Loop + nPos = InStr (sNotes, "H0") + oCursor.gotoStart (False) + oCursor.goRight (nPos - 1, False) + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharPosture", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) + oCursor.collapseToEnd + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharEscapement", -33) + oCursor.setPropertyValue ("CharEscapementHeight", 58) + nPos = InStr (sNotes, "H1") + oCursor.gotoStart (False) + oCursor.goRight (nPos - 1, False) + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharPosture", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureAsian", com.sun.star.awt.FontSlant.ITALIC) + oCursor.setPropertyValue ("CharPostureComplex", com.sun.star.awt.FontSlant.ITALIC) + oCursor.collapseToEnd + oCursor.goRight (1, True) + oCursor.setPropertyValue ("CharEscapement", -33) + oCursor.setPropertyValue ("CharEscapementHeight", 58) + + ' Draws the table borders. + If nEvents = 2 Then + nStartRow = nRow - nGroups * (nGroups - 1) - 1 + oCells = oSheet.getCellByPosition (0, nStartRow) + oCells.setPropertyValue ("TopBorder", aBorderDouble) + oCells.setPropertyValue ("BottomBorder", aBorderSingle) + oCells = oSheet.getCellByPosition (1, nStartRow) + oCells.setPropertyValue ("TopBorder", aBorderDouble) + oCells.setPropertyValue ("RightBorder", aBorderSingle) + oCells.setPropertyValue ("BottomBorder", aBorderSingle) + oCells = oSheet.getCellRangeByPosition (2, nStartRow, 4, nStartRow) + oCells.setPropertyValue ("TopBorder", aBorderDouble) + oCells.setPropertyValue ("BottomBorder", aBorderSingle) + oCells = oSheet.getCellRangeByPosition (1, nStartRow + 1, 1, nRow - 2) + oCells.setPropertyValue ("RightBorder", aBorderSingle) + oCells = oSheet.getCellByPosition (0, nRow - 1 - (nGroups - 1) + 1) + oCells.setPropertyValue ("BottomBorder", aBorderDouble) + oCells = oSheet.getCellByPosition (1, nRow - 1) + oCells.setPropertyValue ("RightBorder", aBorderSingle) + oCells.setPropertyValue ("BottomBorder", aBorderDouble) + oCells = oSheet.getCellRangeByPosition (2, nRow - 1, 4, nRow - 1) + oCells.setPropertyValue ("BottomBorder", aBorderDouble) + Else + nStartRow = nRow - nEvents * nGroups * (nGroups - 1) - 1 + oCells = oSheet.getCellRangeByPosition (0, nStartRow, 1, nStartRow) + oCells.setPropertyValue ("TopBorder", aBorderDouble) + oCells.setPropertyValue ("BottomBorder", aBorderSingle) + oCells = oSheet.getCellByPosition (2, nStartRow) + oCells.setPropertyValue ("TopBorder", aBorderDouble) + oCells.setPropertyValue ("RightBorder", aBorderSingle) + oCells.setPropertyValue ("BottomBorder", aBorderSingle) + oCells = oSheet.getCellRangeByPosition (3, nStartRow, 5, nStartRow) + oCells.setPropertyValue ("TopBorder", aBorderDouble) + oCells.setPropertyValue ("BottomBorder", aBorderSingle) + oCells = oSheet.getCellRangeByPosition (2, nStartRow + 1, 2, nRow - 2) + oCells.setPropertyValue ("RightBorder", aBorderSingle) + oCells = oSheet.getCellByPosition (0, nRow - 1 - nGroups * (nGroups - 1) + 1) + oCells.setPropertyValue ("BottomBorder", aBorderDouble) + oCells = oSheet.getCellByPosition (1, nRow - 1 - (nGroups - 1) + 1) + oCells.setPropertyValue ("BottomBorder", aBorderDouble) + oCells = oSheet.getCellByPosition (2, nRow - 1) + oCells.setPropertyValue ("RightBorder", aBorderSingle) + oCells.setPropertyValue ("BottomBorder", aBorderDouble) + oCells = oSheet.getCellRangeByPosition (3, nRow - 1, 5, nRow - 1) + oCells.setPropertyValue ("BottomBorder", aBorderDouble) + End If +End Sub