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

705

    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. 6 kW saunan lämmityksestä kohta 10 euron lisämaksu / kerta

      Kokoomuslainen sähköyhtiöiden hallitsema Energiavirasto ehdottaa 5 kW:n rajaa, jonka ylittämisestä tulee lisämaksu. Tark
      Maailman menoa
      87
      4683
    2. Kun väestö ikääntyy ja veronmaksajat vähenee, mitä sitten vasemmistolaiset?

      Maahanmuutto ei vaan ole ratkaisu väestön ikääntymiseen. Maahanmuutto lykkää ja hidastaa väestön ikääntymistä ja työv
      Maailman menoa
      203
      4608
    3. "Mitä sä nainen tuot sitten pöytään" ?

      Jos mies provaidaa ja suojelee... Pitääkö miesten kysyä tuollaisia?
      Ikävä
      106
      3066
    4. Ekologinen kommunismi tulee voittamaan fossiilikapitalismin

      Kiina on mahtitekijä uusiutuvien energialähteiden kehityksessä, ja Trump osoitus viimeisestä öljyn perään itkemisestä, m
      Maailman menoa
      22
      3057
    5. Minja jytkyttää vas.liiton kannatusta ylöspäin

      Alkaa raavaat duunarimiehetkin palaamaan vasemmistoliiton kannattajiksi. Eduskunnassahan on vain kaksi työntekijöiden p
      Maailman menoa
      96
      2980
    6. Mahonselän jäät - Saaristokunta Lieksa brutaalisti kriisin partaalla!

      Lieksan loppuvuoden hyvän kehityksen jälkeen ei olisi uskonut että palstan ahkerista kommentoijista huolimatta matkailu
      Lieksa
      138
      2268
    7. Oikeistopuolueiden kannatus vain 37,8 %, vasemmiston 43,0 %

      Keskustaan jää 17,4 prosenttia ja loput ovat sitten mitä ovat. Mutta selvästikin Suomen kansa on vasemmalle kallellaan.
      Maailman menoa
      33
      2167
    8. Laitetaan nyt kirjaimet kohdilleen

      kuka rakastaa ja ketä ?
      Ikävä
      89
      2143
    9. Tiedän ettei

      Meistä mitään tule. Toinen oli sinulle tärkeämpi
      Ikävä
      20
      2112
    10. Mies, kerro minulle vielä jotakin aivan uniikkia

      ja ainutlaatuista minkä vain me kaksi voisimme ymmärtää jos olemme sen kokeneet ja eläneet, jotta ihan varmasti tietäisi
      Tunteet
      37
      1909
    Aihe