Gå til innhold

Formatering av desimaltall - trenger hjelp..


Anbefalte innlegg

Hei!

 

Driver å lager et vbs script som skal presentere endel tall fra en oracel database som en graf.

 

Tallet er på formen 0,0123

 

Dette skal deretter gjøres om til 12,3.

Hvordan gjør jeg har for å få med desimalen?

 

Bruker jeg:

to_char(TEST*1000,'999,9')

kommer tallet opp som 12 på grafen når jeg gjør slik:

VisningArray(i) = CDbl(objRs("TEST"))

 

Noen som har noen gode forslag her?

Lenke til kommentar
Videoannonse
Annonse

Vrient å vite herfra hvor formatteringen skjer. Klarer du å finne ut om grafen faktisk bruker desimalene som verdi, men bare ikke viser dem på tekstene ? Ideelt skal tall være rene tall gjennom hele kjeden og formatteres bare idet du skal se på dem. Altså simpelthen

VisningArray(i) = Test * 1000

 

Vær også obs på at VBS bruker punktum som desimalseparator. Kanskje er det det som lager trøbbel i '999,9'

 

HTH. Beste hilsen Harald

Lenke til kommentar

Nei CDbl skal konvertere til flyttall Double. Men hvorfor all denne konverteringen? VBS bruker ikke datatyper, så gjør det enklest mulig. Også, det er forskjell på at desimaler skjules og fjernes. Du er sikker på at de fjernes ?

 

Du må vise mer kode hvis vi skal kunne hjelpe deg mer. "Jeg får feil"er for lite å jobbe med.

 

Beste hilsen Harald

Lenke til kommentar

Regionale innstillinger er noe som brukes ved konvertering, f.eks ved CDbl.

 

En datamaskin har ingen begreper om antall gjeldende sifre. Et tall er et tall. Det vil si at 8 er det samme som 8,00 og 8,000000 og 0008 og 0008,000 og 16/2 . Tallet inneholder ingen formatopplysbinger, ingen antall desimaler og ingen desimalseparator. Disse tingene er noe som pcen eller koden din slenger på idet tallet skal vises på skjermen. De følger ikke tallet rundt i maskinen og i regnestykkene.

 

Jeg mistenker deg for å gjøre følgende: Du vil tvinge tallet til å inneholde x antall desimaler. Men det gjør tallet altså helt av seg selv, det inneholder de desimaler det trenger innenfor 32-bits begrensninger, enten desimalene bare er null eller en haug andre tall. Ved å påtvinge tall desimaler, konverterer du tallet som tekst. Og så må du konvertere tilbake hver gang du skal regne og med det bytte ut lokale separatorer og greier. Det er en skjør og unødvendig konstruksjon, og den er følsom for både regionale innstillinger og programmeringsfeil.

 

Men jeg kan jo ta grusomt feil. Som sagt må jeg se koden din for å hjelpe deg, og det vil du tydeligvis ikke, så jeg gir meg her.

 

HTH. Beste hilsen Harald

Lenke til kommentar

Skal få posta koden imorgen..Fikk nettproblemer her så har ikke hatt tilgang til den eller forumet her før nå.

 

Er egentlig excelsom er problemet her, da vbs scriptet bruker excel til å lage ei kurve og en gif fil av den igjen..Men koden dukker opp imorgen, så er takknemelig for hjelp da!

Lenke til kommentar

Her er koden. Er bygd videre på noe jeg sakset fra ei nettside, så mulig den er litt uoversiktlig men..

 

 

'Option Explicit

 

' Pie and 3DPie work well

' The column graphs, because the labels are against the pink BG, have pink in them

' Also, the exported dimensions aren't exactly double the clip size, so the text is crinkly

Const ChartType = "Column"

Const adOpenStatic = 3

Const adLockOptimistic = 3

Const adCmdText = &H0001

 

 

'Open connection to database

Dim objConnection

Dim objRs

Dim maxDate

Dim numRecords

Dim strSQL

Dim 3Array(),4Array(), labelArray(), dateArray(), GrenseArray()

Dim 1Array()

Dim oExcel

Dim myWorkBook

Dim i

 

'On error Resume Next

'-----------------------------------------------------------------------------------------------------------------

 

Set objConnection = CreateObject("ADODB.Connection")

objConnection.Open "Driver={Microsoft ODBC for Oracle};Server=TEST9;User Id=TESTER;Password=TESTING;"

 

 

Set objRs = CreateObject("ADODB.recordset")

 

 

strSQL = "SELECT TO_CHAR(DATO_ORA, 'DD.MM') AS DATO, TESTV*1000 as TESTV FROM TEST02.TEST02 where TEST_KLASSE = '100' order by DATO_ORA desc "

 

objRs.Open strSQL, objConnection, adOpenStatic, adLockOptimistic

 

numRecords = objRs.RecordCount

 

 

if numRecords = 0 then

numRecords = 1

end if

 

if numRecords > 30 then

numRecords = 30

end if

 

 

Redim dateArray(numRecords-1)

Redim 1Array(numRecords-1)

 

 

 

for i = 0 to numRecords-1

dateArray(i) = objRs("DATO")

 

1Array(i) = CDbl(objRs("TESTV"))

objRs.MoveNext

next

 

objRs.Close

 

Set objRs = Nothing

objConnection.Close

Set objConnection = Nothing

 

 

Set oExcel = CreateObject("Excel.Application")

' Hide Mr. PaperClip

oExcel.Assistant.Visible = False

oExcel.Assistant.On = False

Set myWorkbook = oExcel.Workbooks.Add

oExcel.Visible = False

 

 

With oExcel.Workbooks(1).Sheets(1)

 

.Cells(1,2).Value = LTrim("'Kurve 1")

 

for i = 0 to numRecords-1

.Cells(i+2,1).Value = LTrim("'" &dateArray(i) & "")

.Cells(i+2,2).Value = LTrim(1Array(i) & "")

 

next

 

End With

 

 

Set myRange = oExcel.Workbooks(1).Sheets(1).Range("A1","B" & numRecords+1)

 

' We will write it to a temporary file

Dim tempFile

 

tempFile = "\\bruker\16x9.gif"

 

With oExcel.Workbooks(1).Sheets(2).ChartObjects.Add(0,0,1600,900)

.Chart.SetSourceData myRange, 3

.Chart.ChartType = 4 'xlColumnClustered

.Chart.HasTitle = True

.Chart.ChartTitle.Characters.Text = "30 siste verdier"

.Chart.ChartTitle.Font.Size=34

xlCategory = 1

.Chart.Axes(1).TickLabels.Font.Color = RGB(0,0,0)

.Chart.Axes(1).TickLabels.Font.Background = 3

.Chart.Axes(1).TickLabels.Font.Name = "Verdana"

.Chart.Axes(1).TickLabels.Font.Size = 28

.Chart.Axes(2).HasTitle = True

.Chart.Axes(2).AxisTitle.Caption = "KG"

.Chart.Axes(2).AxisTitle.Font.Size = 28

.Chart.Axes(2).TickLabels.Font.Color = RGB(0,0,0)

.Chart.Axes(2).TickLabels.Font.Background = 3

.Chart.Axes(2).TickLabels.Font.Name = "Verdana"

.Chart.Axes(2).TickLabels.Font.Size = 28

.Chart.Legend.Left = 1

.Chart.Legend.Top = 1

.Chart.Legend.Font.Size = 24

.Chart.Legend.Font.Name = "Verdana"

.Chart.ChartArea.Border.LineStyle = -4142 'xlLineStyleNone

.Chart.ChartArea.Interior.Color = RGB(255,255,255)

.Chart.PlotArea.Interior.Color = RGB(200,200,200)

.Chart.PlotArea.Fill.Visible = True

.Chart.PlotArea.Border.LineStyle = -4142 'xlLineStyleNone

.Chart.Export tempFile,"gif", False

End With

 

 

 

oExcel.DisplayAlerts = False

oExcel.Quit

 

Set myWorkbook = Nothing

Set oExcel = Nothing

Lenke til kommentar

Prøv uten tekst- og konverteringsfunksjoner.Til array:

 

1Array(i) = objRs("TESTV")

eller eventuelt

1Array(i) = objRs(1)

 

og til Excel

 

.Cells(i+2,2).Value = 1Array(i)

 

Jeg regner nå med at det ligger tall i databasen, ikke talliknende tekst.

 

PS. Du åpner basen med skrivetilgang. Kan være skummelt det. Endre

adLockOptimistic

til

adLockReadonly

 

HTH. Beste hilsen Harald

Endret av Harald Staff
Lenke til kommentar

Oki.takk for hjelpen og tipset.

 

En annen ting. Når det gjelder selve grafensom lages nederst i koden - hvordan kan jeg endre tykkelsen på selve graf-streken, og farge?

Og er det mulig å sette inn en egen tekstboks eller liknende?

 

Har ikke funnet noe dokumentasjon på Chart som jeg kan bruke..

 

Det samme gjelder for grafe typen. Dette blir kun ei linje, men hvordan får jeg vist punkter for verdiene?

Endret av tommy_sn
Lenke til kommentar

Tekstparsing er en ganske tung oppgave for maskinen, hvis du kan unngå det, så unngår man det.

 

Det er bedre å regne ut resultatet, og deretter lage en tekstrepresentasjon for å presentere det, framfor å lage en tekstrepresentasjon og bruke den som primær datakilde.

Lenke til kommentar

Klarer å endre farge og størrelse på teksten..men finner fortsatt ikke ut hvordan ejg lager grafene i en annen farge og tykkelse.

Har prøvd å lage en makro og se på kode, men får det ikke til..

 

Og hvorfor er det . (punktum) forran hver kodelinje her:

With oExcel.Workbooks(1).Sheets(2).ChartObjects.Add(0,0,1600,900)

.Chart.SetSourceData myRange, 3

.Chart.ChartType = 4 'xlColumnClustered

.Chart.HasTitle = True

.

.

.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...