Taulukko ja sen kopiointi

Veera-Veera

Moi

Yritin lueskella aikaisempia viestejä, mutta en löytänyt vastausta ongelmaani.

Minulla on siis työkirjassa(A) laskentataulukoita jotka toimivat ihan hienosti.
Nyt minun pitäisi saada kopioitua eräästä toisesta työkirjasta(B) laskentataulukko tähän työkirjaan (A) automaattisesti, vaikka kun avaan sen. Ei olisi ongelma vaikka työkirjaani (A) liitettäisiin kokonaisuudessaan tuo toinen työkirja(B) kun avaan sen. Nauhoitin kokeeksi makroja ja ne tuntuivat aluksi toimivan, mutta jossain vaiheessa työkirjaan (A) tulostui ihan väärän työkirjan laskentataulukoita. Jotenkin varmaan pitäisi pystyä määrittelemään tarkka osoite mistä työkirjan (B) taulukko tuodaan.

Taisi olla hieman sekavaa ja termeistäkään en mene takuuseen.

Joulun odotusta kaikille

10

602

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • kertoi jo...

      jos sellainen riittää niin siitä toisesta tiedostosta kopioi VÄLILEHTI (hiiren oikealla välilehden päällä ja valitse kopioi välilehti tms...) ja liitä siihen työkirjaan (tiedostoon9 jossa on se A.

      Nyt sinulla on tiedosto jossa välilehdet A ja B ... Eikö? Mutta silloin työkirjaan B tehdyt muutokset ei näy, vaan sinulla olisi se B siinä samassa A:n kanssa. Riittääkö?

    • Veera-Veera

      Ongelma on siinä, että tuo kopiointi työkirjasta B.sta A.han pitäisi tapahtua automaattisesti ja mielellään painiketta käyttäen. Olen siis nauhoittanut makron joka tekee juuri näin, mutta kun availen muita välilehtiä, niin A.han alkaa kopioitumaan tietoa näiltä välilehdiltä.

      • No_oooOOOooo

        Makron saa lisättyä toolbariin seuraavasti:

        tools->macros->organize macros

        valitset macron ja sitten assing ja toolbars. Tähän joko luot uuden toolbarin tai käytät jo olemassaolevaa. Valitse add ja etsi haluamasi makro ja lisää se toolbariin. Nyt makro toimii yhdellä hiiren klikkauksella.

        Sulla oli jo olemassa oleva makro, mut tässäpä eräs vaihtoehto:

        sub copymacro

        dim args(0) As New com.sun.star.beans.PropertyValue
        args(0).Name = "Hidden"
        args(0).Value = FALSE

        dim args3(5) As New com.sun.star.beans.PropertyValue
        args3(0).Name = "Flags"
        args3(0).Value = "A"
        'Flags:
        'A - all
        'or
        'S - string
        'V - value
        'D - date, time
        'F - formulas
        'N - notes
        'T - formats
        args3(1).Name = "FormulaCommand"
        args3(1).Value = 0
        args3(2).Name = "SkipEmptyCells"
        args3(2).Value = false
        args3(3).Name = "Transpose"
        args3(3).Value = false
        args3(4).Name = "AsLink"
        args3(4).Value = false
        args3(5).Name = "MoveMode"
        args3(5).Value = 4

        dim osheet,url2,doc,doc2,osheet2,oDispatch,oframe1,oframe2
        dim copyrange,pasterange

        oDispatch = createUnoService( "com.sun.star.frame.DispatchHelper" )
        doc=thiscomponent
        oframe1=ThisComponent.CurrentController.Frame
        'sheets(0) refers to active sheet
        osheet = doc.sheets(0)

        url2=convertToUrl("C:\oma\oma.ods")
        doc2=StarDeskTop.loadComponentFromUrl (url2, "_blank", 0, args())
        oframe2=ThisComponent.CurrentController.Frame
        'sheets(0) refers to active sheet
        osheet2=doc2.sheets(0)

        copyrange=osheet2.getCellRangeByName("A1:B10")
        pasterange=osheet.getCellRangeByName("A1:B10")
        doc2.CurrentController.Select(CopyRange)
        oDispatch.executeDispatch(oframe2, ".uno:Copy", "", 0, Array())
        doc.CurrentController.Select(PasteRange)
        oDispatch.executeDispatch(oframe1, ".uno:InsertContents", "", 0, args3())

        doc2.Close(true)
        end sub


      • No_oooOOOoo
        No_oooOOOooo kirjoitti:

        Makron saa lisättyä toolbariin seuraavasti:

        tools->macros->organize macros

        valitset macron ja sitten assing ja toolbars. Tähän joko luot uuden toolbarin tai käytät jo olemassaolevaa. Valitse add ja etsi haluamasi makro ja lisää se toolbariin. Nyt makro toimii yhdellä hiiren klikkauksella.

        Sulla oli jo olemassa oleva makro, mut tässäpä eräs vaihtoehto:

        sub copymacro

        dim args(0) As New com.sun.star.beans.PropertyValue
        args(0).Name = "Hidden"
        args(0).Value = FALSE

        dim args3(5) As New com.sun.star.beans.PropertyValue
        args3(0).Name = "Flags"
        args3(0).Value = "A"
        'Flags:
        'A - all
        'or
        'S - string
        'V - value
        'D - date, time
        'F - formulas
        'N - notes
        'T - formats
        args3(1).Name = "FormulaCommand"
        args3(1).Value = 0
        args3(2).Name = "SkipEmptyCells"
        args3(2).Value = false
        args3(3).Name = "Transpose"
        args3(3).Value = false
        args3(4).Name = "AsLink"
        args3(4).Value = false
        args3(5).Name = "MoveMode"
        args3(5).Value = 4

        dim osheet,url2,doc,doc2,osheet2,oDispatch,oframe1,oframe2
        dim copyrange,pasterange

        oDispatch = createUnoService( "com.sun.star.frame.DispatchHelper" )
        doc=thiscomponent
        oframe1=ThisComponent.CurrentController.Frame
        'sheets(0) refers to active sheet
        osheet = doc.sheets(0)

        url2=convertToUrl("C:\oma\oma.ods")
        doc2=StarDeskTop.loadComponentFromUrl (url2, "_blank", 0, args())
        oframe2=ThisComponent.CurrentController.Frame
        'sheets(0) refers to active sheet
        osheet2=doc2.sheets(0)

        copyrange=osheet2.getCellRangeByName("A1:B10")
        pasterange=osheet.getCellRangeByName("A1:B10")
        doc2.CurrentController.Select(CopyRange)
        oDispatch.executeDispatch(oframe2, ".uno:Copy", "", 0, Array())
        doc.CurrentController.Select(PasteRange)
        oDispatch.executeDispatch(oframe1, ".uno:InsertContents", "", 0, args3())

        doc2.Close(true)
        end sub

        Lisäystä...

        Tuo edellinen taitaapi olla väärinpäin sinun tarkoitukseen... Elikkäs jos sulla on B auki ja haluat siitä kopioida A:han niin muuta tuosta copyrange pasterangeksi. Url2:teen laita A:n osoite.

        Nyt toi aukaiseen A:n ja kopio B:stä siihen taulukon (A1:B10).

        Ärsh... sekaisin täs menee... pitää alkaa kattoon fudista...


      • No_oooOOOooo
        No_oooOOOoo kirjoitti:

        Lisäystä...

        Tuo edellinen taitaapi olla väärinpäin sinun tarkoitukseen... Elikkäs jos sulla on B auki ja haluat siitä kopioida A:han niin muuta tuosta copyrange pasterangeksi. Url2:teen laita A:n osoite.

        Nyt toi aukaiseen A:n ja kopio B:stä siihen taulukon (A1:B10).

        Ärsh... sekaisin täs menee... pitää alkaa kattoon fudista...

        Ja vielä lisää vaikka toi ei erroria pukannut. Itsekin copypastailin aikaisemmista makroistani, mut...

        oframe1=thiscomponent.CurrentController.Frame
        korvataan:
        oframe1=doc.CurrentController.Frame

        ja samoin
        oframe2=thiscomponent.CurrentController.Frame
        korvataan
        oframe2=doc2.CurrentController.Frame

        Nyt siihen fudikseen....


    • ...oooOOOooo...

      No nyt löyty OO osaaja.
      Rupes koodia pukkaamaan.
      Ihme jos ei ala hommat luistamaan.
      HYVÄ....

    • OpenOffice.org/LibreOffice Calcissa on Lisää - Kytke ulkoiseen tietolähteeseen ... -toiminto, joka voisi olla tässä avuksi, tietyin ehdoin.
      Minulle tuntemattomasta syystä kyseinen toiminto ei näyttäisi tunnistavan toisen laskenta-asiakirjan taulukkolehteä, mutta kylläkin nimetyn alueen (ja ilmeisesti Base-tietokannan TAULUN).

      Jos siis B-asiakirja (lähde) on muokattavissasi, niin valitsemalla lähteestä alue, vaikkapa koko taulukkolehti, ja nimeämällä se Lisää - Nimet -valinnasta (ei siis taulukkovalitsimesta), saat muodostettua sopivan lähteen tietojen kopioinnille. Tallennus pakollinen ja sulkeminen toivottavaa.

      Nyt voit A-asiakirjassa avata (tai tarvittaessa lisätä) tyhjän taulukkolehden ja suorittaa Lisää - Kytke ulkoiseen tietolähteeseen -toiminnon hakemalla kyseisen B-asiakirjan ja valitsemalla siitä äsken nimetyn alueen (mahdollisesti yksi taulukkolehti). Jättämällä Päivitysväli ruudun tyhjäksi A-asiakirja päivittyy vain avattaessa. Tallenna A-asiakirja ja sulje se. Kun avaat uudestaan A-asiakirjan, linkkien päivityskysely on riesana, mutta ehkä ei liiaksi?

      Pikatestasin Ubuntun LibreOfficessa ja näytti alustavasti toimivan ja huomioi B-taulukon muutokset uudelleen avattaessa (jos hyväksyi linkkien päivityksen). Tämä toiminto ei ole ihan uusi, joten sen pitäisi toimia "kaikissa" Calc-versioissa.

      Toimiva nauhoitettu makro vaatisi tarkistusta, miten sen toiminta muuttuu, jos on eri taulukkolehdellä kuin alunperin ja siihen vaikuttanee myös, miten makron käynnistys on toteutettu.

    • Hienoa oO osaamista!

      Hei,

      Tuo on oikeen toimiva basic siirrettäessä taulukkodataa, mutta minulla on seuraava ongelma:
      - Sama copypaste makro pitäisi saada toimimaan .txt -tiedostojen kanssa.
      -Siis Calcissa olevalla makrolla pitäisi pystyä avaamaan tiedostosijainnissa C:/TESTI oleva .txt tiedosto, kopioimaan kaikki sisältö ja pasteamaan se aktiivisena olevaan calcin soluun. Muut on tähän asti toimineet, mutta tuota en ole vielä keksinyt. Osaisiko joku auttaa?

    • osaanauttaa
    • Makrojen käyttö on inhottavaa, varsinkin jos saman saa tehtyä Calcin funktioilla. Tekstintiedoston tuonti yhteen soluun vaatisi hieman kopiointia Writerista, johon tekstitiedosto avautuu, mutta ...

      Olsikohan tässä tilanne oikeanlainen?
      http://www.saunalahti.fi/rjaaskel/1/Menu/OOo/Tekstiohje.gif
      Pinkit nuolet ja ympyröinnit koskevat noiden ohjausobjektien laadintaa ja sen huomiointia, että suunnittelutila pitää kytkeä ensin pois, kun sulkee työkalupalkin.

      Suomenkielisessä OOo/LiBO Calcissa (Ubuntussa ja Vistassa lievästi testattuna), toimiva makro olisi tässä:


      Sub TekstitiedostoSoluun
      Rem tuo Tiedostonvalinnan tekstitiedoston kohdistettuun soluun Calcissa
      Rem käynnistyy painikkeella
      Rem Laati: RIJ
      oAsKir1 = ThisComponent
      'oLehti1=oAsKir1.Sheets.getByName("Taulukko1")
      oLehti1 = oAsKir1.CurrentController.getActiveSheet
      'oForms = oAsKir1.CurrentController.ActiveSheet.DrawPage.Forms
      oForms = oLehti1.DrawPage.Forms
      vForm=oForms.getByName("Lomake")
      sTn = vForm.getByName("Tiedoston valinta 1").Text
      Rem vähäinen virhetesti: hiljainen poistuminen, jos tiedostoa ei löydy
      If NOT FileExists(sTn) then Exit Sub
      Rem avataan tekstitiedosto numerolle iTiednro, joka on seuraava vapaa numero
      iTiednro = Freefile
      Open sTn For Input As #iTiednro
      While Not Eof(iTiednro)
      Line Input #iTiednro, sRivi
      If sRivi "" then
      sTeksti = sTeksti & Srivi & Chr(32)
      End If
      Wend
      Close #iTiednro
      Rem toimii vain, jos yksi solu valittuna
      oSolu = ThisComponent.CurrentSelection
      oSolu.String = sTeksti
      'Print sTeksti
      End Sub

      On lukuisia tapoja saada makro tuottamaan virheilmoitus. Se ei myöskään tunnista tiedostomuotoa, mutta muutaman rivin .txt-tiedosto tuntuisi tulevan. Olettaisin, että yli 64 KiB:n tiedostot eivät toimi. Rivinvaihto korvautuu välilyönnillä, joka on haitta tai hyöty, riippuu ...
      Jos käytät vieraskielistä Calcia, joudut tekemään nimeämistä joko koodiin tai ohjausobjekteihin.

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Poliisi tutkii murhaa Paltamossa

      Poliisi tutkii Kainuussa sijaitsevassa Paltamon kunnassa epäiltyä henkirikosta, joka on tapahtunut viime viikon perjanta
      Paltamo
      44
      5299
    2. Jos me voitais puhua

      Jos me voitais puhua tästä, mä sanoisin, että se on vaan tunne ja se menee ohi. Sun ei tarvitse jännittää mua. Mä kyllä
      Ihastuminen
      24
      3460
    3. Jenna meni seksilakkoon

      "Olen oppinut ja elän itse siinä uskossa, että feministiset arvot omaava mies on tosi marginaali. Todennäköisyys, että t
      Maailman menoa
      299
      2870
    4. Jere, 23, ja Aliisa, 20, aloittavat aamunsa Subutexilla tai rauhoittavilla: "Vaikka mä käytän..."

      Jere, 23, ja Aliisa, 20, ovat pariskunta, joka aloittaa aamunsa Subutexilla tai rauhoittavilla. Jere on ollut koko aikui
      Maailman menoa
      58
      2686
    5. Mikä sinua ja

      kaivattuasi yhdistää ?
      Ikävä
      173
      2365
    6. On ikävä sua

      Koko ajan
      Ikävä
      25
      2157
    7. Aku Hirviniemi tekee paluun televisioon Aiemmin hyllytetty ohjelma nähdään nyt tv:ssä.

      Hmmm.....Miksi? Onko asiaton käytös nyt yht´äkkiä painettu villaisella ja unohdettu? Kaiken sitä nykyään saakin anteeksi
      Kotimaiset julkkisjuorut
      127
      1899
    8. Vielä kerran.

      Muista että olet ihan itse aloittanut tämän. En ei silti sinua syyllistä tai muutenkaan koskaan tule mainitsemaan tästä
      Ikävä
      366
      1865
    9. Vain yksi elämä

      Jonka haluaisin jakaa sinun kanssasi. Universumi heitti noppaa ja teki huonon pilan, antoi minun tavata sinut ja rakastu
      Ikävä
      88
      1771
    10. M nainen tiedätkö mitä

      Rovaniemellä sataa nyt lunta, just nyt kun lähden pohjoiseen. Älä ota mitään paineita tästä mun ihastumisesta sinuun, ti
      Ikävä
      16
      1401
    Aihe