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

737

    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. Mitä hyvää rikkaiden hyysääminen Suomelle tuonut?

      Minäpä vastaan: ei yhtikäs mitään, vaan pelkkää vahinkoa. Demareiden ansiosta Suomen valtio oli käytännössä vielä 1980-
      Maailman menoa
      25
      7515
    2. Grahn-Laasonen: "Kansalainen joutuu pettymään, jos demareita äänestää"

      Ministeri viittaa tuoreeseen Helsingin Sanomien juttuun, jossa demarijohtajan keinoja Suomen suunnan muuttamiseksi esite
      Maailman menoa
      98
      6176
    3. Tytti Tuppurainen häpäisi Suomen epäisänmaallisella lausunnollaan USA:n ulkoministerille Rubiolle.

      https://www.is.fi/politiikka/art-2000011816267.html Miksi Tytti Tuppurainen päästetään antamaan typeriä lausuntoja noin
      Maailman menoa
      119
      4276
    4. Mitä haluaisit sanoa tänään hänelle?

      Rakastamallesi ihmiselle.
      Ikävä
      155
      4224
    5. Pystyisitkö olla

      Kanssani kaiken sotkun jälkeen? Ainakaan tunteet ei ole loppuneet
      Ikävä
      163
      1971
    6. Purra ehdottaa vaan Tanskan mallia, joka on erittäin hyvä malli

      Purra ehdotti helmikuussa Suomeen Tanskan mallia, jossa maahanmuuttajilta vaaditaan työntekoa sosiaalitukien saamiseksi.
      Maailman menoa
      51
      1893
    7. Paras muistosi

      kaivatustasi?
      Ikävä
      63
      1852
    8. Miksi miehen on hankala ymmärtää

      Että hänen on tehtävä aloite. Niin sen kuuluu mennä luonnollisesti.
      Ikävä
      146
      1759
    9. Mitä sä musta oikein haluat?!

      Anna olla jo.
      Ikävä
      45
      1564
    10. Hei kuule nainen

      Seuraavan kerran kun nähdään, puhu minulle jooko! Näin toivoo mies
      Ikävä
      40
      1539
    Aihe