tommy_sn Skrevet 25. mars 2008 Del Skrevet 25. mars 2008 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
Manfred Skrevet 25. mars 2008 Del Skrevet 25. mars 2008 Hva med om du prøveR: to_char(TEST*1000.0,'999,9') Egentlig et lite skudd i blinde, men ved å legge på et komma null etter 1000 forteller du scriptet at det skal være et desimal der. Lenke til kommentar
tommy_sn Skrevet 25. mars 2008 Forfatter Del Skrevet 25. mars 2008 Nope..ingen forskjell dessverre.. Lenke til kommentar
Harald Staff Skrevet 25. mars 2008 Del Skrevet 25. mars 2008 Du snakker VBscript nå ? FormatNumber skulle funke da: http://www.drdev.net/article03.asp http://www.w3schools.com/vbscript/vbscript_ref_functions.asp HTH. Beste hilsen Harald Lenke til kommentar
tommy_sn Skrevet 25. mars 2008 Forfatter Del Skrevet 25. mars 2008 Ja, er VB script..lagret som en vbs fil. Men får samme resultat selv med FormatNumbers. Hvordan mener du jeg skal legge inn den funksjonen? Funker ikke sånn som jeg gjør det, men får heller ingen feilmelding.. Lenke til kommentar
Harald Staff Skrevet 25. mars 2008 Del Skrevet 25. mars 2008 Prøv å lagre dette som en vbs-fil: Dim Test Test = 0.0123 MsgBox FormatNumber(Test*1000,1) Lenke til kommentar
tommy_sn Skrevet 25. mars 2008 Forfatter Del Skrevet 25. mars 2008 Det der funker ja..Men skjønner ikke hvordan jeg skal putte inn NumberFormat i koden min.. Lenke til kommentar
Harald Staff Skrevet 25. mars 2008 Del Skrevet 25. mars 2008 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
tommy_sn Skrevet 25. mars 2008 Forfatter Del Skrevet 25. mars 2008 Hvis jeg skriver 999.9 får jeg feil i samsvar med CDbl. Grunnen til problemet slik jeg ser det er at tallene etter desimalen forsvinner. Den lager heltall bare. Lagrer CDbl bare heltall? Lenke til kommentar
Harald Staff Skrevet 25. mars 2008 Del Skrevet 25. mars 2008 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
tommy_sn Skrevet 25. mars 2008 Forfatter Del Skrevet 25. mars 2008 Har kommet noe videre her. Hele greia fungerer knirkefritt hvis jeg setter . som desimaltegn istedenfor , i regionalinnstillingene for Windows. Så finnes det en funksjon eller liknendwe som gjør om fra , til . i vbs skriptene? Lenke til kommentar
tommy_sn Skrevet 25. mars 2008 Forfatter Del Skrevet 25. mars 2008 Eller eventuelt setter at skriptet skal bruke amerikansk oppsett når det gjelder komma og tall.. Lenke til kommentar
Harald Staff Skrevet 25. mars 2008 Del Skrevet 25. mars 2008 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
tommy_sn Skrevet 25. mars 2008 Forfatter Del Skrevet 25. mars 2008 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
tommy_sn Skrevet 26. mars 2008 Forfatter Del Skrevet 26. mars 2008 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
Harald Staff Skrevet 26. mars 2008 Del Skrevet 26. mars 2008 (endret) 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 26. mars 2008 av Harald Staff Lenke til kommentar
tommy_sn Skrevet 26. mars 2008 Forfatter Del Skrevet 26. mars 2008 (endret) 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 26. mars 2008 av tommy_sn Lenke til kommentar
Harald Staff Skrevet 26. mars 2008 Del Skrevet 26. mars 2008 Spill inn en makro i Excel mens du setter den opp manuelt slik du vil ha den, så har du et veldig bra utgangspunkt. HTH. beste hilsen Harald Lenke til kommentar
GeirGrusom Skrevet 26. mars 2008 Del Skrevet 26. mars 2008 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
tommy_sn Skrevet 28. mars 2008 Forfatter Del Skrevet 28. mars 2008 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå