Solun taustaväri ilman ehdollista muotoilua

Terve!

Nyt olisi paha pähkinä miten saa solun taustaväriä muokattua täydellisemmin mitä ehdollinen muotoilu antaa tehdä. Ehdollisen muotoilun kanssa saa muistaakseni kolme eri tilaa määrätä mitkä vaikuttavat solun näyttöön.

Nyt olisi tarkoitus määrätä solulle taustaväri liukuvärillä mikä määräytyy solun arvon mukaan.
Solun arvo on aina välillä 0..1

Tämä varmaan onnistuu makrojen avulla mutta allekirjoittanut on suuri käsi näissä niin tarttisin apua.

Liukuvärin joka on punainen min arvon kohdalla, keltainen sen keskellä(min-max) ja punainen sen max arvon kohdalla sain omasta mielestäni tehtyä oikein. Laskin punaiselle R, vihreälle G ja siniselle B arvot solun arvon mukaan.

RGB:n kaavojen syntaksi saattaa olla pilalla mutta ne voi säätää toivottavasti.

Eli en päässyt juuri alkua pitemmälle ja tässä on virityksen alkua:

REM ***** BASIC *****

Sub SolunTaustaVari

cell=getcell...

max=40% // tai 0,4
min=10% // tai 0,1

R=ROUNDUP(IF(cell>(max min)/2;255;IF(cell
81145
Äänestä

Muut lukivat myös

Vastaukset 8

Vanhimmat

osheet=thiscomponent.sheets(0)
ocell=osheet.getcellbyposition(sarake,rivi)
arvo = ocell.value
.
.
.
oCell.CellBackColor = RGB(R,G,B)

Äänestä
  • Kiva kun jaksoit helppiä ...

    Viittiikö joku neuvoa vielä tuon syntaxin kanssa, tai laittaa linkkiä missä tuosta syntaxista on juttua tai kertoo ohjetiedostossa olevan kohdan?

    tässä esim. tuo sinisen arvon laskeminen:

    B=ROUNDUP(IF(arvo>(max min)/2;85;IF(arvo

    Äänestä

  • RJR kirjoitti:

    Kiva kun jaksoit helppiä ...

    Viittiikö joku neuvoa vielä tuon syntaxin kanssa, tai laittaa linkkiä missä tuosta syntaxista on juttua tai kertoo ohjetiedostossa olevan kohdan?

    tässä esim. tuo sinisen arvon laskeminen:

    B=ROUNDUP(IF(arvo>(max min)/2;85;IF(arvo

    if arvo>(max min)/2 then B=85 else
    if arvo

    Äänestä

  • ... kirjoitti:

    if arvo>(max min)/2 then B=85 else
    if arvo

    2 ongelmaa olisi.

    1. Virheilmoitus:

    BASIC-Suoritusvirhe.
    Aliproseduuria tai funktiota ei ole määritetty.

    Herjaa näitstä lausekkeista:

    R=ceiling(255-150*(1-(arvo-min)*(1/((max-min)/2))))
    G=ceiling(255-(1-(1/((max-min)/2))*(arvo-min))*168)
    B=ceiling(105-(arvo-min)*(1/((max-min)/2))*20)

    Eli ceiling funktiota ei ymmärrä. Se varmaan pitää hakea erikseen joistain kirjastosta?


    2. Toimii ainoastaan soluun A1 eikä maalattuihin soluihin mikä oli haluttu toimenpide.

    Miten tämän saisi toimimaan maalattuihin soluihin eikä taulukon ensimmäiseen soluun? Onko liian paha?

    On muuten vielä muutakin ongelmaa taulukossa joten ei hätä. :)

    Kitos taas ...

    Äänestä

  • RJR kirjoitti:

    2 ongelmaa olisi.

    1. Virheilmoitus:

    BASIC-Suoritusvirhe.
    Aliproseduuria tai funktiota ei ole määritetty.

    Herjaa näitstä lausekkeista:

    R=ceiling(255-150*(1-(arvo-min)*(1/((max-min)/2))))
    G=ceiling(255-(1-(1/((max-min)/2))*(arvo-min))*168)
    B=ceiling(105-(arvo-min)*(1/((max-min)/2))*20)

    Eli ceiling funktiota ei ymmärrä. Se varmaan pitää hakea erikseen joistain kirjastosta?


    2. Toimii ainoastaan soluun A1 eikä maalattuihin soluihin mikä oli haluttu toimenpide.

    Miten tämän saisi toimimaan maalattuihin soluihin eikä taulukon ensimmäiseen soluun? Onko liian paha?

    On muuten vielä muutakin ongelmaa taulukossa joten ei hätä. :)

    Kitos taas ...

    Sub Soluntausta
    SelectedCells = ThisComponent.CurrentSelection
    If SelectedCells.supportsService("com.sun.star.sheet.SheetCellRange") then
    aCellAddress = SelectedCells.getrangeAddress
    osheet = thiscomponent.sheets(aCellAddress.Sheet)
    max=0.4
    min=0.1
    for sarake = aCellAddress.StartColumn to aCellAddress.EndColumn
    for rivi = aCellAddress.StartRow to aCellAddress.EndRow
    ocell = osheet.getcellbyposition(sarake , rivi)
    arvo = ocell.value
    if arvo>(max min)/2 then
    R = 255
    B = 85
    G = 255
    else
    if arvo

    Äänestä

  • ... kirjoitti:

    Sub Soluntausta
    SelectedCells = ThisComponent.CurrentSelection
    If SelectedCells.supportsService("com.sun.star.sheet.SheetCellRange") then
    aCellAddress = SelectedCells.getrangeAddress
    osheet = thiscomponent.sheets(aCellAddress.Sheet)
    max=0.4
    min=0.1
    for sarake = aCellAddress.StartColumn to aCellAddress.EndColumn
    for rivi = aCellAddress.StartRow to aCellAddress.EndRow
    ocell = osheet.getcellbyposition(sarake , rivi)
    arvo = ocell.value
    if arvo>(max min)/2 then
    R = 255
    B = 85
    G = 255
    else
    if arvo

    Homma läks toimii niinku piti (värit oli menny mönkään mut pitäisi toimia taas).
    Tuossa on nähtävästi rajoitteena toi alueen suorakaiteisuus mut no hätä.

    Alhaalla on parit toimivat liukuvärit jos joku haluaa käyttää.

    Ihan hyvät pastellivärit (jos nyt ymmärrän mitä ne on)

    normalisointi = (arvo-min)*(1/((max-min)/2))

    if arvomax then R=121 else
    R=roundup(255-(normalisointi-1)*134)

    if arvo(max min)/2 then G=255 else
    G=roundup(255-(1-normalisointi)*168)

    if arvo(max min)/2 then B=121 else
    B=roundup(105-(1-normalisointi)*34)   


    Toiset ei niin minun makuuni olevat täyskirkkaat

    normalisointi = (arvo-min)*(1/((max-min)/2))

    if arvomax then R=0 else             
    R=roundup(255-(normalisointi-1)*255)

    if arvo(max min)/2 then G=255 else
    G=roundup(255-(1-normalisointi)*255)

    B=0

    Kiitti pirusti ... .

    Pitäsköhän viel vähän jatkaa tätä ja tehä tohon makron alkuun kysymys missä se kysyy nuo min ja max arvon ja mitä liukuväriä haluaa käyttää niin tää olisi käyttökelpoinen kaikille. Laittaa jonnekkin paremmin sitten esille? Ei tämä nyt kumminkaan mikään ihan turha väsäys ole, muutkin varmaan miettiny tämmöstä.

    Pystyy varmaan tekee jonkun ponnahdus boksin missä on lootat min ja max arvoille ja liukuvalikko eri liukuväreille.

    Pystyykö ne värit iskee sitte jonkun CASEn sisään tai jotoin muuta vastaavaa?

    Mitä mieltä ... tai joku muu asiasta kiinnostunut? Voin tehä parit liukkarit(sininen-punainen ainakin ja käänteiset tosta sin-pun ja ensimmäisestä(pun-kel-vihr)) ku musta muuhun ei varmaan ole.

    Äänestä

  • RJR kirjoitti:

    Homma läks toimii niinku piti (värit oli menny mönkään mut pitäisi toimia taas).
    Tuossa on nähtävästi rajoitteena toi alueen suorakaiteisuus mut no hätä.

    Alhaalla on parit toimivat liukuvärit jos joku haluaa käyttää.

    Ihan hyvät pastellivärit (jos nyt ymmärrän mitä ne on)

    normalisointi = (arvo-min)*(1/((max-min)/2))

    if arvomax then R=121 else
    R=roundup(255-(normalisointi-1)*134)

    if arvo(max min)/2 then G=255 else
    G=roundup(255-(1-normalisointi)*168)

    if arvo(max min)/2 then B=121 else
    B=roundup(105-(1-normalisointi)*34)   


    Toiset ei niin minun makuuni olevat täyskirkkaat

    normalisointi = (arvo-min)*(1/((max-min)/2))

    if arvomax then R=0 else             
    R=roundup(255-(normalisointi-1)*255)

    if arvo(max min)/2 then G=255 else
    G=roundup(255-(1-normalisointi)*255)

    B=0

    Kiitti pirusti ... .

    Pitäsköhän viel vähän jatkaa tätä ja tehä tohon makron alkuun kysymys missä se kysyy nuo min ja max arvon ja mitä liukuväriä haluaa käyttää niin tää olisi käyttökelpoinen kaikille. Laittaa jonnekkin paremmin sitten esille? Ei tämä nyt kumminkaan mikään ihan turha väsäys ole, muutkin varmaan miettiny tämmöstä.

    Pystyy varmaan tekee jonkun ponnahdus boksin missä on lootat min ja max arvoille ja liukuvalikko eri liukuväreille.

    Pystyykö ne värit iskee sitte jonkun CASEn sisään tai jotoin muuta vastaavaa?

    Mitä mieltä ... tai joku muu asiasta kiinnostunut? Voin tehä parit liukkarit(sininen-punainen ainakin ja käänteiset tosta sin-pun ja ensimmäisestä(pun-kel-vihr)) ku musta muuhun ei varmaan ole.

    Vähä mietin noita käänteisiä värejä niin nehän saa vaan kääntämällä arvon nurinperin.

    if arvomin and arvo

    Äänestä

  • RJR kirjoitti:

    Homma läks toimii niinku piti (värit oli menny mönkään mut pitäisi toimia taas).
    Tuossa on nähtävästi rajoitteena toi alueen suorakaiteisuus mut no hätä.

    Alhaalla on parit toimivat liukuvärit jos joku haluaa käyttää.

    Ihan hyvät pastellivärit (jos nyt ymmärrän mitä ne on)

    normalisointi = (arvo-min)*(1/((max-min)/2))

    if arvomax then R=121 else
    R=roundup(255-(normalisointi-1)*134)

    if arvo(max min)/2 then G=255 else
    G=roundup(255-(1-normalisointi)*168)

    if arvo(max min)/2 then B=121 else
    B=roundup(105-(1-normalisointi)*34)   


    Toiset ei niin minun makuuni olevat täyskirkkaat

    normalisointi = (arvo-min)*(1/((max-min)/2))

    if arvomax then R=0 else             
    R=roundup(255-(normalisointi-1)*255)

    if arvo(max min)/2 then G=255 else
    G=roundup(255-(1-normalisointi)*255)

    B=0

    Kiitti pirusti ... .

    Pitäsköhän viel vähän jatkaa tätä ja tehä tohon makron alkuun kysymys missä se kysyy nuo min ja max arvon ja mitä liukuväriä haluaa käyttää niin tää olisi käyttökelpoinen kaikille. Laittaa jonnekkin paremmin sitten esille? Ei tämä nyt kumminkaan mikään ihan turha väsäys ole, muutkin varmaan miettiny tämmöstä.

    Pystyy varmaan tekee jonkun ponnahdus boksin missä on lootat min ja max arvoille ja liukuvalikko eri liukuväreille.

    Pystyykö ne värit iskee sitte jonkun CASEn sisään tai jotoin muuta vastaavaa?

    Mitä mieltä ... tai joku muu asiasta kiinnostunut? Voin tehä parit liukkarit(sininen-punainen ainakin ja käänteiset tosta sin-pun ja ensimmäisestä(pun-kel-vihr)) ku musta muuhun ei varmaan ole.

    Pikku korjaus: B=roundup(121-(1-normalisointi)*34)
    Vahingossa jäi vanhoja arvoja ja min arvon kohdalle tuli pieni "värihyppy".

    Äänestä

Kommentoi aloitusta


RJR kirjoitti:

Terve!

Nyt olisi paha pähkinä miten saa solun taustaväriä muokattua täydellisemmin mitä ehdollinen muotoilu antaa tehdä. Ehdollisen muotoilun kanssa saa muistaakseni kolme eri tilaa määrätä mitkä vaikuttavat solun näyttöön.

Nyt olisi tarkoitus määrätä solulle taustaväri liukuvärillä mikä määräytyy solun arvon mukaan.
Solun arvo on aina välillä 0..1

Tämä varmaan onnistuu makrojen avulla mutta allekirjoittanut on suuri käsi näissä niin tarttisin apua.

Liukuvärin joka on punainen min arvon kohdalla, keltainen sen keskellä(min-max) ja punainen sen max arvon kohdalla sain omasta mielestäni tehtyä oikein. Laskin punaiselle R, vihreälle G ja siniselle B arvot solun arvon mukaan.

RGB:n kaavojen syntaksi saattaa olla pilalla mutta ne voi säätää toivottavasti.

Eli en päässyt juuri alkua pitemmälle ja tässä on virityksen alkua:

REM ***** BASIC *****

Sub SolunTaustaVari

cell=getcell...

max=40% // tai 0,4
min=10% // tai 0,1

R=ROUNDUP(IF(cell>(max min)/2;255;IF(cell

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu