Oldal: 1 / 1

csv fájl megnyitása, abból adat ámásolása calc-ba macroval

HozzászólásElküldve: 2018. december 21., péntek 13:31
Szerző: Ermi
Üdv!
Napok óta rágódom az alábbi problámán, mert valamit nem jól csinálok.
Adott egy calc fájl. Macroval megnyitok egy csv fájlt (a fájl elérési utvonala a calc fálj cellájában található). Eddig tökéletesen működik a progim.
Azonban a csv fájlból nem tudom ármásolni az adott calc munkafözetbe az adatot. Vagy a csv fájlból a csv fájlba másol, vagy a calc-ból a cal-ba.

Kód: Egész kijelölése   KinyitásÖsszecsukás
Sub Csv_export2  'megnyit egy csv fájlt, megfelelő formázással -link a munkalapon

Dim Doc As Object        'macros-s fájl
Dim csv_adat As Object  'csv fájl
Dim FileProperties(1) As New com.sun.star.beans.PropertyValue
Dim Url As String
Dim Sheet As Object      'macro-s munkalap
Dim Doc_csv As Object    'csv-s munkalap

Doc = ThisComponent                 'megnyitott dokumentm


Sheet = Doc.Sheets.getByName("Munkalap1")
Link_cell = Sheet.getCellRangeByName("E1")  'megnyitandó fájl elérési utjának cellája
Target  = Link_cell.string   ' Link_cell értéke szövegformátum
TargetURL = convertToURL(Target)
REM csv beállítása
FileProperties(0).Name = "FilterName"
FileProperties(0).Value ="Text - txt - csv (StarCalc)"
FileProperties(1).Name = "FilterOptions"
FileProperties(1).value  = "59,34,13,1,1/2/2/5/3/5/4/2/5/1/6/2/7/2/8/2/9/2/10/2"  'mezőelválasztó(59,44,9),szöveghatároló (34,39),karakterkészlet,első sor száma, oszlopok kódszáma

Doc_csv = StarDesktop.loadComponentFromURL(TargetURL, "_blank", 0, FileProperties())  'fájl
csv_adat= Doc_csv.sheets.getByName("Munkalap1")  'csv munkalap paraméterezése


REM csv-be dolgozok
Cell_2 = csv_adat.getCellRangeByName("D5")
print Cell_2.string


oRangeAddress = csv_adat.getCellRangeByName("C3").getRangeAddress()  'csv fájl munkalap: csv_adat
oCellAddress  = Sheet.getCellRangeByName("A4").getCellAddress()  'makro-s doksi: Sheet
csv_adat.copyRange(oCellAddress, oRangeAddress)

'Doc_csv.close(true)    ' csv dokumentum bezárása

End sub


Van valakinek ötlete, mi hiányzik?

Re: csv fájl megnyitása, abból adat ámásolása calc-ba macrov

HozzászólásElküldve: 2018. december 21., péntek 14:10
Szerző: Zizi64
Van valakinek ötlete, mi hiányzik?
OpenOffice 3.1 a Windows 10-n


Egyrészt egy-egy mintafájl kellene mind a forrásdokumentum .csv fájlból mind pedig a céldokumentum .ods fájljából, Tudsz ilyeneket ide feltölteni?

Másrészt nem tudom elhinni, hogy azt a réges-régi verziót használod. Az vele a baj, hogy ha olyasmit javaslunk, amit csak az újabbak tudnak, a régi meg még nem, akkor nem vagy kisegítve; ha pedig az a verzió ezen a területen esetleg hibás volt, akkor pedig senki nem fogja már abban a verzióban a hibát kijavítani.

Re: csv fájl megnyitása, abból adat ámásolása calc-ba macrov

HozzászólásElküldve: 2018. december 21., péntek 19:24
Szerző: Zizi64
Ha a cellatulajdonságokat (formázásokat) is akarod másolni (ez erősen ellenjavallt!!!) akkor a vágólapon keresztül történő másolást tudom ajánlani. De a formázások, cellatulajdonságok még inkább a stílusok intenzív használatát.


Ha viszont elegendő a cellatartalmat másolni, akkor a
Kód: Egész kijelölése   KinyitásÖsszecsukás
oTarget.setDataArray( oSource.getDataArray )
API függvények használatát javaslom. Itt van egy példa az angol fórumról:
https://forum.openoffice.org/en/forum/v ... hp?t=55228

API: Application Programming Interface

A te megoldásodnak a hatóköre valószínűleg be van korlátozva egy dokumentumon belülre. De ezt nem tudom pontosan. Azt se, hogy csak a régi programverzió miatt, vagy a mostaniakban is. Ezt csak akkor próbálom ki, ha már töltöttél fel mintadokumentumokat.

Re: csv fájl megnyitása, abból adat ámásolása calc-ba macrov

HozzászólásElküldve: 2018. december 22., szombat 15:09
Szerző: Ermi
a macros fájl és csv adatállományt csatolom

Re: csv fájl megnyitása, abból adat ámásolása calc-ba macrov

HozzászólásElküldve: 2018. december 22., szombat 18:26
Szerző: Zizi64
Letöltöttem, próbálom a fájljaidat. LibreOffice 6.1.4-ben próbálom.

Az első hiba talán már meg is van. A .csv fájlod megnyílik a makró hatására, de az egyetlen munkalap a megnyílt .ods fájlban nem "Munkalap1" nevű, hanem a .csv fájl nevét hordozza. Emiatt természetesen a cellákat sem képes megtalálni a makród. Célszerűbb lenne talán nem a nevével, hanem a számával hivatkozni a munkalapra, mert könnyen lehet, hogy az általad használt verzióban ez még másképp működik.

Re: csv fájl megnyitása, abból adat ámásolása calc-ba macrov

HozzászólásElküldve: 2018. december 22., szombat 19:39
Szerző: Zizi64
...azt aztán végképp nem értem, hogy a .csv fájlban mit is keresel a D5 cellában..

Végül is a kódodból nem derül ki számomra, hogy vajon az egész .csv táblát akarod-e beemelni az .ods fájlba, vagy abból csak egy-két adatot...

Re: csv fájl megnyitása, abból adat ámásolása calc-ba macrov

HozzászólásElküldve: 2018. december 22., szombat 20:21
Szerző: Zizi64
Továbbá, ha egy adott táblázatkezelő dokumentum adott munkalapjának adott cellájától lekéred a címét, akkor az az objektum már nm fogja tartalmatni a dokumentum URL-jét, emiatt landol nálad ugyanabban a dokumentumban a másolt adat.:
Kód: Egész kijelölése   KinyitásÖsszecsukás
oRangeAddress = csv_adat.getCellRangeByName("C3").getRangeAddress()  'csv fájl munkalap: csv_adat
xray oRangeAddress
oCellAddress  = Sheet.getCellRangeByName("A4").getCellAddress()  'makro-s doksi: Sheet
xray oCellAddress


Ezt az Xray object inspection kiterjesztéssel ellenőrizheted. Ha sokat kell programoznod az Open/LibreOffice-t, akkor mindenképpen telepíts egy objektum-vizsgálót a létezők közül: Xray, MRI. Ezeket a közösség tagjai készítették.