Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 28. 11. 2008 17:13:26

ms001
Člen
Registrace: 28. 11. 2008
Příspěvků: 5

Vypnutí inteligence

Nevíte prosím někdo, jak vypnout vražednou inteligenci calc? Mám CSV soubor, kde je sloupec kódů z číslic a písmen, a po otevření calcem (OO.o 3.0) tento začne kódy "inteligentně" vyhodnocovat, takže např. z "3I99" (tři velké 'I' devadesát devět) mi vytvoří datum "3.1.1999". Za tohle bych zabíjel (a přijde mi, že je to verzi od verze horší).

Díky za každou dobrou radu.

Offline

#2 28. 11. 2008 17:15:45

ms001
Člen
Registrace: 28. 11. 2008
Příspěvků: 5

Re: Vypnutí inteligence

Dodatek: ještě podotýkám, že nelze změnit formát buňky na text; nevím proč, asi kvůli tomu, že jde o CSV, ale volba Formát-Buňky je znefunkčněna (zašedlá).

Offline

#3 28. 11. 2008 17:20:19

ms001
Člen
Registrace: 28. 11. 2008
Příspěvků: 5

Re: Vypnutí inteligence

Dodatek 2 (sorry for that :-)): A pokud soubor uložím jako .ODS a následně změním formát buněk na text, dostanu místo původního "3I99" hodnotu "36163"!!!

Offline

#4 1. 12. 2008 08:05:49

Ondra.kl
Člen
Registrace: 30. 9. 2008
Příspěvků: 933

Re: Vypnutí inteligence

Calc je tabulkový editor, předpokládá se tedy že bude počítat s čísly a ne s texty. To že řetězec 9 - římská 1 - 99 bere jako datum je prý dáno chybou v české lokalizaci, jak jsem někde zaslechl.

Pokud importujete csv soubor a opravdu chcete mít texty jako texty, tak je PŘI IMPORTU potřeba v náhledu označit daný sloupec (nebo celý import) a navolit "typ sloupce" = text namísto "typ sloupce" = standardní. Veškeré hodnoty pak budou importovány jako textové.

V editovaném CSV je volba formát buňky zešedlá proto, že CSV žádné formáty buňky nezná wink

A "3I99" je opravdu 3.1.1999 a tomuto dni opravdu odpovídá hodnota 36163 wink

Offline

#5 1. 12. 2008 11:42:06

ms001
Člen
Registrace: 28. 11. 2008
Příspěvků: 5

Re: Vypnutí inteligence

Ondra.kl napsal(a)

Pokud importujete csv soubor a opravdu chcete mít texty jako texty, tak je PŘI IMPORTU potřeba v náhledu označit daný sloupec (nebo celý import) a navolit "typ sloupce" = text namísto "typ sloupce" = standardní. Veškeré hodnoty pak budou importovány jako textové.

Díky, funguje. Nevěděl jsem, že mohu nastavovat typ pole už při importu.

Offline

#6 24. 11. 2016 17:32:06

Marrtt
Člen
Registrace: 25. 2. 2015
Příspěvků: 115

Re: Vypnutí inteligence

prosím také o radu, jak eliminovat "skrytého inteligenta"
Při vložení řádku pod tabulku Calc automaticky přebírá kompletní formátování horního řádku. Chci to nějakým způsobem zakázat, ale nevím jak. Potřebuju to v makru, kde mi to dost komplikuje život. Variantou by pro mne bylo odstranit makrem formátování (hlavně ohraničení) ze zadaných buněk po vložení řádku (potřebuju v části řádku zkopírovat formát, ale v další části je to nadbytečné).

Děkuji

Offline

#7 25. 11. 2016 10:20:26

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,659

Re: Vypnutí inteligence

Tohle není automaticky. Formáty tam zůstanou jen po předchozích formátech. Takže když používáte stejný list musít data mazat lépe.
     Buď smazat řádky - makrem tak aby se všechny původně naformátované smazaly, nebo smazat alespoň celý úsek od tabulky až k poslednímu. Také to jde makrem, ale chyba bude v tom, že nějaký předchozí proces naformátoval celý sloupec. Když je použito makro ke kopírování tak obsahuje úsek který by se měl naformátovat správně. Je ale možné, že jde o vložení celého html listu a ten hodí formát hodně daleko - možná až do konce sloupce.
     Pak je řešením smazat všechny řádky pod tabulkou, nebo jen úsek částí sloupců. Takže lze například vložit celý list, ale do pracovního listu nakopírovat jen aktivní tabulku bez zbytku přeformátovaných buněk - následně vložený list smazat.


     Makra pro formátování existují. Takže lze například i celý zbytek listu přeformátovat. Ale parametrů pro formát buňky je mnoho. Od pozadí, typu písma, barvy, ..až třeba k ohraničení buňky které Vám vadí nejvíce. Většinou lze zadávát pomocí -1 implicitní nastavení, ale stejně je asi lepší tohle nahrát jako uno a spouštět například hned po startu nějakého makra, nebo lépe na konci importu. Psaný kód je opravdu dlouhý. Při nahrávání stačí zadat formát buněk celkově jako výchozí popřípadě zmazat barvu ráměčků.


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#8 29. 11. 2016 13:34:16

Marrtt
Člen
Registrace: 25. 2. 2015
Příspěvků: 115

Re: Vypnutí inteligence

Zkoušel jsem to i ručně na prázdném novém listu nového souboru Calcu - takže nezasažené nějakým předchozím formátováním. Jakmile vkládám něco pod naformátovaný řádek, formát se automaticky kopíruje (pozadí, ohraničení, barva a font písma - prostě vše kromě sloučení buněk). Otestujte si to stejným způsobem - jestli Vám to dělat nebude, musí to být v nějakém uživatelském nastavení. Pro eliminaci v makru potřebuju jen nastavení konkrétního parametru (něco pro skupinu příkazů kolem "Tableborder"), který odstraní ohraničení buněk. Něco jako je třeba " .ShadowLocation.NONE" pro stínování nebo podobně. Zatím to řeším vkládáním ob jeden řádek s vymazáním mezilehlého - pak se formáty nepřebírají. Ale přijde mi to dost šroubované.

Offline

#9 29. 11. 2016 14:24:40

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,659

Re: Vypnutí inteligence

Já jsem to zkoušel jestli to není nějaká chyba LO, AOO - a nic. Po vložení makrem, nebo i ručně se naformátují jen kopírované buňky a pod nimi nic - žádné přeformátování.
     Popiště v jaké verzi LO, nebo AOO se tak děje. Já mám poslední verze a u nich se to neděje. Já jsem se s tím ale ještě nesetkal v podobě kterou popisujete. Vím že to zůstane po smazání obsahu a zachování formátů.


     Makro pro smazání je nejlepší nahrané. Vezměte "zdravý úsek" - stačí 1 buňka do makra. Makro pak spusťte ve správném rozsahu (rozsah je tam dán textem př : A1:G10). Rozsah zadejte makru jako parametr "string" a vložte.
     Parametry můžete nahrát i samostatně. Jen s tím že kopírovaný úsek obsahuje specificky například rámečky, písmo, pozadí a podobně. Ale implicitní formát je bez čehokoliv. Jen byste mohl jednotlivě při vykopírování zaškrtnot v dialogu všechny položky samostatně (nikoliv vše). To je pro to abyste viděl jak ručně upravovat formáty. Implicitní formáty jsou formátovány často na "-1".


     Nicméně mohu Vám poslat makra pro formáty v Basicu, ale k popisované chybě to není adekvátní postup. Jednak se takto neodstraňuje podstata, ale následky a navíc je to dost pracné. Takže makra spíš pro ostatní účely formátování - respektive přímo k programování a ne k opravě.


     Ještě uvedu, že je možné kopírovat například schránkou a přenášet vše, nebo jen určité vlastnosti a určitý obsah s formátem a jiný bez formátu. Já osobně když chci formáty, tak to dělám nadvakrát. Jednou chránkou "vše" a podruhé jen obsahy (plain text) tím se ztratí například klikačky ale nedotčené formáty zůstanou.


     Takže na Vás je oč Vám jde víc - o nápravu chyby, nebo o vzory pro programování? Chybu bych chtěl vidět jako vzor a možná i makro které jste použil.


Příklad makra pro formát Borderů :

Sub Border_Line(ByVal SC as long, ByVal SR as long, ByVal EC as long, ByVal ER as long, ByVal lin as integer, Optional x as integer)
Dim oDoc As Object
Dim oCtrl as Object
Dim oSelRange as Object, oCellRange as Object
Dim oBorder1 as Object, oBorder2 as Object, oBorder3 as Object, oBorder4 as Object
oDoc = ThisComponent
oCtrl = oDoc.getCurrentController()
oSelRange = oCtrl.getActiveSheet().getCellRangeByPosition(SC,SR,EC,ER) 
oCtrl.select( oSelRange )
'-----------------------------------------
oCellRange = oDoc.CurrentSelection(0)
'-----------------------------------------
oBorder1 = CreateUnoStruct("com.sun.star.table.BorderLine2")
oBorder1.Color = iColor
oBorder1.LineWidth = lin
oBorder1.LineStyle = 1  
'-----------------------------------------
oBorder2 = CreateUnoStruct("com.sun.star.table.BorderLine2")
oBorder2.Color = iColor
oBorder2.LineWidth = lin
oBorder2.LineStyle = 1
'-----------------------------------------
oBorder3 = CreateUnoStruct("com.sun.star.table.BorderLine2")
oBorder3.Color = iColor
oBorder3.LineWidth = lin
oBorder3.LineStyle = 1
'-----------------------------------------
oBorder4 = CreateUnoStruct("com.sun.star.table.BorderLine2")
oBorder4.Color = iColor
oBorder4.LineWidth = lin
oBorder4.LineStyle = 1
'-----------------------------------------
Select Case x	
Case = 1	
oCellRange.BottomBorder = oBorder1 
Case = 2
oCellRange.TopBorder = oBorder2	
Case = 3	
oCellRange.LeftBorder = oBorder3 
Case = 4	
oCellRange.RightBorder = oBorder4 
Case = 5
oCellRange.BottomBorder = oBorder1	
oCellRange.TopBorder = oBorder2
Case = 6
oCellRange.BottomBorder = oBorder1	
oCellRange.LeftBorder = oBorder3
Case = 7
oCellRange.BottomBorder = oBorder1	
oCellRange.RightBorder = oBorder4
Case = 8
oCellRange.TopBorder = oBorder2	
oCellRange.LeftBorder = oBorder3
Case = 9
oCellRange.TopBorder = oBorder2	
oCellRange.RightBorder = oBorder4
Case = 10
oCellRange.LeftBorder = oBorder3	
oCellRange.RightBorder = oBorder4
Case = 11	
oCellRange.BottomBorder = oBorder1
oCellRange.TopBorder = oBorder2
oCellRange.LeftBorder = oBorder3
Case = 12
oCellRange.BottomBorder = oBorder1	
oCellRange.TopBorder = oBorder2
oCellRange.RightBorder = oBorder4
Case = 13
oCellRange.BottomBorder = oBorder1
oCellRange.LeftBorder = oBorder3
oCellRange.RightBorder = oBorder4
Case = 14
oCellRange.TopBorder = oBorder2
oCellRange.LeftBorder = oBorder3	
oCellRange.RightBorder = oBorder4
Case Else
oCellRange.BottomBorder = oBorder1
oCellRange.TopBorder = oBorder2
oCellRange.LeftBorder = oBorder3	
oCellRange.RightBorder = oBorder4
Exit Sub
End Select
'-----------------------------------------
oSelRange = oCtrl.getActiveSheet().getCellRangeByPosition(SC,ER,EC,ER) 
oCtrl.select( oSelRange )
End Sub

Podobné jednodoché řešení pro Vaši orientaci :

Sub Cell_Array_Border
   Dim BasicBorder as New com.sun.star.table.BorderLine
   Dim oBorder As Object
   oBorder = ThisComponent.Sheets.getByName( "List1" ).getCellRangeByPosition(1,1,2,2).TableBorder
   BasicBorder.Color = RGB(255, 0, 0)
   BasicBorder.InnerLineWidth = 0
   BasicBorder.OuterLineWidth = 2
   BasicBorder.LineDistance = 0
   oBorder.LeftLine = BasicBorder
   oBorder.TopLine = BasicBorder
   oBorder.RightLine = BasicBorder
   oBorder.BottomLine = BasicBorder
   ThisComponent.Sheets.getByName( "List1" ).getCellRangeByPosition(1,1,2,2).TableBorder = oBorder
End Sub

PS - například iColor nahraďte číslem barvy - například RGB(255,0,0) = červená, RGB(0,255,0) = zelená a podobně modrá RGB(0,0,255) = červená. Implicitní barvu lze zadat jako -1. Pokud potřebujete pracovat s barvami budete potřebovat funkci BarvaPozadí() kterou jsem tady už asi 2x postnul - zjistí číslo barvy písma a pozadí ze zadaného vzoru v buňce.
     Například barva pozadí a podobně :
Cell.CellBackColor = RGB(255,128,64)               
Cell.CharFontName = "ARIAL"                           
Cell.CharHeight = 12                               
Cell.CharColor = RGB(255,0,0)
Cell.CharWeight = com.sun.star.awt.FontWeight.BOLD

Editoval neutr (29. 11. 2016 14:45:03)


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#10 29. 11. 2016 15:01:47

Marrtt
Člen
Registrace: 25. 2. 2015
Příspěvků: 115

Re: Vypnutí inteligence

cit.: Po vložení makrem, nebo i ručně se naformátují jen kopírované buňky a pod nimi nic - žádné přeformátování...

Mám verzi OO 4.3.1. - měla by to být nejnovější.
Nekopíruji buňky - pomocí menu z roletky použiju příkaz "Vložit řádky". Tento příkaz, aplikovaný na řádku (např. ř.10) těsně pod formátovaným řádkem (např. tabulka mezi řádky 5-9) vloží na ř.10 nový řádek s formátováním shodným s ř.9 (kromě sloučení buněk) - Nikam jinam dolů se to neprokopíruje. Chtěl bych ale těsně pod tabulku vkládat řádek neformátovaný.

Offline

#11 29. 11. 2016 15:34:05

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,659

Re: Vypnutí inteligence

Aha rozumím - to je skutečnost kterou jsem pochopil špatně. Formát následující (ale jen jediného následujícího) řádku se zkopíruje když dáte vložit řádek.
     Tohle se udělá vždy protože se předpokládá úprava (rozšíření) naformátovaného úseku - například přidání řádku do tabulky která má nějaký explicitní formát - tak aby se nemusely extra kopírovat formáty.


     Je to řešitelné vložením obsahu do odsazeného řádku a pak místo "vložení řádku" - řádek mezi novým zápisem a původní tabulkou smazat (stejný počet operací). Dalším způsobem by bylo nahrání implicitních formátů a vložený řádek tímto makrem přeformátovat - vložit jinak - jen (implicitní) formáty. To jsem snad popsal dostatečně. Pokud chcete ještě něco jiného napište.


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#12 29. 11. 2016 15:40:48

Marrtt
Člen
Registrace: 25. 2. 2015
Příspěvků: 115

Re: Vypnutí inteligence

Tak už si rozumíme - já považuji za chybu, pokud to uživatel nemůže vypnout v nastavení. Ale smířím se s tím. Implicitní formáty si nastuduju a zatím používám popsané vkládání "ob řádek" s vymazáním mezilehlého.

Díky, hezký den

Offline

Zápatí