Forum » Programiranje » [OpenOffice.Org - Writer] Označitev vrstice tabele in Copy / Paste
[OpenOffice.Org - Writer] Označitev vrstice tabele in Copy / Paste
WarpedGone ::
Obstaja brainfuck in obstaja OpenOffice API. Prvo je hec, drugo je pa žalosten primerek takega heca v praksi. Že četrti dan se zaj***m s stvarjo za katero bi pričakoval da mi bo vzela par ur, največ kak dan, dela. Sej vem, nesposobn sm js, OOo je pa višek tehnološkega napredka, kar ne spremeni dejstva da mi kljub googlanju in ugibanju in buljenju v reference to še vedno ni ratalo naredit.
Preko OLE moram namrečt avtomatizirat OOo Writer. V dokumentu imam tabelo v kateri moram programsko skopirat zadnjo vrstico in zamenjati vrednosti v njenih poljih. Nekako mi je uspelo pogruntat, kako dobit posamezno tabelo v dokumentu, kako dobit zadnjo vrstico, kako dodajat novo vrstico. Uspelo mi je tut stuhtat mehanizem kopiranja celotne vsebine na clipboard in ponovnega pastanja.
Problem pa ostaja:
- kako programsko izbrat celo vrstico tabele da jo bo dispatch uno:copy res skopiral na clipboard
- kako dosečt da se bo vsebina clipboarda spastala kot zadnja vrstica obstoječe tabele
Trenutno mam tole:
Klic mergeRange združi dve polji v zadnji in predzadnji vrstici (sicer bi glede na en forum moral združit vsa polja v zadnji vrstici ampak pustmo to) torej je nekaj celic izbranih. Klic uno:Copy teh izbranih celic NE skopira, ker naslednja dva uno:Paste ukaza v dokument skopirata predhodnjo vsebino clipboarda.
Tole morm sicer speljat v PowerBuilderju, ampak kak primer v javi, vbs, c++ itd bi bil povsem uporaben.
Anyone?
Preko OLE moram namrečt avtomatizirat OOo Writer. V dokumentu imam tabelo v kateri moram programsko skopirat zadnjo vrstico in zamenjati vrednosti v njenih poljih. Nekako mi je uspelo pogruntat, kako dobit posamezno tabelo v dokumentu, kako dobit zadnjo vrstico, kako dodajat novo vrstico. Uspelo mi je tut stuhtat mehanizem kopiranja celotne vsebine na clipboard in ponovnega pastanja.
Problem pa ostaja:
- kako programsko izbrat celo vrstico tabele da jo bo dispatch uno:copy res skopiral na clipboard
- kako dosečt da se bo vsebina clipboarda spastala kot zadnja vrstica obstoječe tabele
Trenutno mam tole:
objTables = i_ole_doc.getTextTables() OLEObject objTables Any l_Separators[] LONG ll_count objTables = i_ole_doc.getTextTables() FOR ll_i = 0 TO objTables.GetCount() - 1 // dobimo tabelo objTable = objTables.getByIndex(ll_i) // dobimo vse vrstice v tej tabeli objRows= objTable.getRows() // dobimo zadnjo vrstico objRow = objRows.getByIndex(objRows.getCount() - 1) // dobimo separatorje v tej vrstici l_Separators = objRow.TableColumnSeparators // ugotovimo število polj v vrstici ll_count = Upperbound(l_Separators) + 1 // v prvi celici zadnje vrstice ustvarimo kurzor objCellCursor = objTable.createCursorByCellName("A" + String(objRows.getCount() - 1)) // izberemo vse celice v tej vrstici objCellCursor.goRight(ll_count, True) // objCellCursor.mergeRange() // označene celice skopiramo na clipboard oDispatcher.executeDispatch(oFrame, ".uno:Copy", "", 0, l_objPropertyValues) // paste oDispatcher.executeDispatch(oFrame, ".uno:Paste", "", 0, l_objPropertyValues) oDispatcher.executeDispatch(oFrame, ".uno:Paste", "", 0, l_objPropertyValues) NEXT
Klic mergeRange združi dve polji v zadnji in predzadnji vrstici (sicer bi glede na en forum moral združit vsa polja v zadnji vrstici ampak pustmo to) torej je nekaj celic izbranih. Klic uno:Copy teh izbranih celic NE skopira, ker naslednja dva uno:Paste ukaza v dokument skopirata predhodnjo vsebino clipboarda.
Tole morm sicer speljat v PowerBuilderju, ampak kak primer v javi, vbs, c++ itd bi bil povsem uporaben.
Anyone?
Zbogom in hvala za vse ribe
WarpedGone ::
OK, mi je ratalo stuhtat. Trik je ViewCursor. Treba je vizualno označit stvari, da jih Copy zagrabi. Tule je koda, če bo kdo kdaj iskal.
OLEObject oVC, objTable, oDispatcher Any l_objPropertyValues[] Any l_Separators[] l_objPropertyValues[1] = i_objServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue") oDispatcher = i_objServiceManager.createInstance("com.sun.star.frame.DispatchHelper") // we need ViewCursor to visualy select content oVC = i_ole_doc.getCurrentController.getViewCursor() // get first table in a document objTable = i_ole_doc.getTextTables().getByIndex(1) // get cell separators from last row l_Separators = objTable.getRows().getByIndex(objTable.getRows().getCount() - 1).TableColumnSeparators // figure out the cell count ll_count = Upperbound(l_Separators) + 1 // step into first cell in last row - via VIEW CURSOR oVC.gotoRange(objTable.getCellByName("A" + String(objTable.getRows().getCount())).createTextCursor(),FALSE) i_ole_doc.CurrentController.Frame.getContainerWindow().Setfocus() // select all cells in this last row oVC.goRight(ll_count, true) // copy to clipboard oDispatcher.executeDispatch(i_ole_doc.CurrentController.Frame, ".uno:Copy", "", 0, l_objPropertyValues) // add one row to the table objTable.getRows().insertByIndex(objTable.getRows().getCount(), 1) // step into first cell in this new last row oVC.gotoRange(objTable.getCellByName("A" + String(objTable.getRows().getCount())).createTextCursor(),FALSE) i_ole_doc.CurrentController.Frame.getContainerWindow().Setfocus() // select all cells in last row oVC.goRight(ll_count, true) // paste from clipboard oDispatcher.executeDispatch(i_ole_doc.CurrentController.Frame, ".uno:Paste", "", 0, l_objPropertyValues)
Zbogom in hvala za vse ribe
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [Java]Client/Server preko socketaOddelek: Programiranje | 1795 (1631) | KernelPanic |
» | [Java] Urejanje baze z JTableOddelek: Programiranje | 1020 (804) | vonNeumann |
» | [Visual C#] TableAdapterOddelek: Programiranje | 1149 (1025) | detroit |
» | Javascript - izračun razlike v datumihOddelek: Programiranje | 1928 (1783) | kogledom |
» | upload datotek in shranjevanje v mdbOddelek: Izdelava spletišč | 1265 (1033) | Looooooka |