Taulukko ja sen kopiointi

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
10815
Äänestä

Muut lukivat myös

Vastaukset 10

Vanhimmat

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ö?

Äänestä

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ä.

Äänestä
  • 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

    Äänestä

  • 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...

    Äänestä

  • 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....

    Äänestä

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

Äänestä

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.

Äänestä

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?

Äänestä

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.

Äänestä

Kommentoi aloitusta


Veera-Veera kirjoitti:

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

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