Den 12 januari 2013 12:00 skrev Jan Öhman<Jan_Ohman@glocalnet.net>:
Tack för "alla" svar!
Ska ytterligare försöka fokusera på min problematik.
(hoppas det inte blir rörigt)
//Jan
Niklas Johansson skrev 2013-01-11 18:56:
Hej Jan
Jan Öhman skrev 2013-01-11 14:42:
Eftersom jag inte hittat någon "enkel" väg att skapa ett kalkylblad från
annat program,
måste idag denna information importeras från t.ex. en txt / csv-fil.
(söker vidare, hittar jag inte någon metod, måste jag kanske byta till
annat office paket :-( )
Låt oss hoppas att detta inte behövs. Måste dock erkänna att jag inte
riktigt förstår vad
du menar första raden. Men struntar i det nu och går vidare till de andra
frågorna. ;) c
Johnny Rosenberg skrev 2013-01-11 17:25:
Finns ju andra kalkylprogram (exempelvis Gnumeric – helt värdelöst men
ändå ett kalkylprogram), men jag antar att det inte är det du är ute
efter.
_____________________________________________________________________
Jan svarar .:
Mitt mål är att på ett enkelt och stabilt sätt kunna lägga in värden i olika
celler.
Antag att det finns en textfil med någon form av innehåll exempelvis:
123;abc
456;def
789;ghijk
Denna fil har jag inga problem att läsa, bearbeta eller skapa
Önskemålet är att dessa värden skall skrivas in på följande celler i ett
kalkylblad.
123 skall infogas i cell D3
abc skall infogas i cell E3
456 skall infogas i cell D4
def skall infogas i cell E4
789 skall infogas i cell D5
ghijk skall infogas i cell E5
I cell C7 vill jag att ordet "Summa .: " skall stå och
I cell E7 skall summan av D3 + D4 + D5 stå (123 + 456 + 789 = 1368 )
Man kan säga att jag söker någon typ av API (eller SDK) för LibreOffice.
I Basic har du ett sådant API.
Värdena infogas med hjälp av ett kommando "Input D3=123" eller på något
sätt...
ThisComponent.getSheets().getByName("MittBlad").getCellByPosition(3,4).setValue(123)
ThisComponent.getSheets().getByName("MittBlad").getCellByPosition(3,4).setString("abc")
Något ditåt, har inte hållit på med Basic på länge nu.
Givetvis kan man göra det lite enklare för sig, så man slipper skriva
så långa rader:
Dim Sheet As Object, Cell As Object
Sheet=ThisComponent.getSheets().getByName("MittBlad")
Cell=Sheet.getCellByPosition(3,4)
Cell.setString("1234ABCD")
Cell.setValue(653)
Det var intressant att botanisera i de packade XML-filer som skapas av Libre
Office.
Dock vågar jag inte vara inne i dessa och skriva (även om det fungerar),
så har jag inga garantier att mitt import/export modul kommer att fungera
efter nästa uppdatering av Libre Ofice..
_____________________________________________________________________
Inläsning av textfiler görs idag med hjälp av "Arkiv / Öppna".
En "Text import" ruta öppnas, där det finns möjlighet att välja kriterier
för inläsningen.
-----------------------
Fråga 1.
Om jag redan vet filens struktur, vilken teckenuppsättning,
delningsalternativ, kolumntyp osv.
Finns det någon möjlighet att "automatisera" öppning av denna text fil
(utan att utsättas för några frågor)?
Niklas Johansson skrev 2013-01-11 18:56:
Via basic är det definitivt möjligt. Jag använder tyvärr inte Calc
tillräckligt för att veta om det går att lösa med externa länkar eller
liknande. :(
Johnny, har du koll på sånt?
Johnny Rosenberg skrev 2013-01-11 17:25:
Makro.
____________________________
Jan svarar .:
Makro / Basic, (vilket förefaller mig är samma sak)
då är jag där igen...
Basic är ett programspråk.
Ett makro kan man skriva i Basic eller Python med mera.
Har funderat om det är bättre att "damma av" Python kunskaperna, vilken
version av Python ska man använda? (2.. eller 3..)
eller att lära sig Basic...
Kan inte Python själv, mend et kan ju hända att det är enklare att
damma av gamla kunskaper än att skaffa nya. Dessutom är ju Python mer
gångbart i största allmänhet idag än vad Basic är.
Jag har ingen känsla eller ide hur det skulle fungera med makron i detta
sammanhang.
Har testat att skriva något makro för specifika celler, men att hämta
information utifrån...
Varifrån vill du hämta information? Tror det finns stöd för det mesta.
Själv har jag ett kalkylblad där jag kan se kurvor för mina bankkonton
i en viss bank dag för dag, så att jag har koll på om jag har råd att
göra si eller så eller när jag har råd med det ena eller andra.
Informationen hämtar jag genom att logga in på min bank, ta upp
sammanställningssidan där jag kan se alla mina saldon samtidigt.
Ctrl+a Ctrl+c för att flytta all text på hela sidan till urklipp. På
kalkylbladet har sedan en stor fet knapp som jag klickar på. Mitt
makro tar då in hela urklipp i en strängvariabel som text (allt annat
bortfiltrerat, exempelvis eventuella bilder), söker i texten efter
rätt kontonummer, söker upp rätt saldo och skriver till sist alla
saldon i rätt celler. Funkar klockrent varje gång. Blir mycket lite
jobb för mig: Öppna banksidan, Ctrl+a Ctrl+c, klicka på kalkylbladet,
klicka på den stora feta knappen, klart…
Har funderat på om det går att antingen låta makrot logga in på sidan,
men det verkar inte gå. Det är ju det där med lösenord och sådant. Har
även funderat på att logga in via terminalen (i Ubuntu) med den
textbaserade webbläsaren Lynx via ett skript och lägga in saldona i
urklipp den vägen, men det jag kör nu är tillräckligt enkelt för att
jag inte ska tycka det värt allt arbete att göra det ytterligare en
liten aning enklare…
Något tips hur man ska tänka?
Hur skulle man kunna lösa det med "Basic" / "Makro"
De makron man skapar, är dessa unika för ett specifikt kalkylblad eller blir
dessa aktiva för alla kalkylblad?
Det beror på var du lägger makrot. Upp till dig, med andra ord…
Frågorna bara väller fram...
___________________________
Jan Öhman skrev 2013-01-11 14:42:
-----------------------
Fråga 2.
Om jag har skapat en mall i Calc, med formler, villkorlig formatering och
ev diagram i olika celler.
Finns det idag något sätt att importera / överföra värden från en textfil
till denna mall?
(utan att rasera mallen)
-----------------------
En begränsning jag hittat och störs av är det begränsade utbudet av
"kolumntyp".
(Jag saknar t.ex. valuta).
Detta går att hantera i flera steg. dvs. först välja text, sedan läsa in
filen för att till sist markera kolumnen och konvertera den till valuta.
Att kolumntypen är "standard" säger mig inget, samt jag vet inte heller
vad det innebär.
Johnny Rosenberg skrev 2013-01-11 17:25:
Har också funderat på vad Standard är.
Angående detta, upptäckte jag nyligen, när ett antal artiklar skulle
analyseras.
De flesta beställningsnummer var endast siffror, men det fanns
beställningsnummer som hade en bokstav i sig.
tex. 1234, 1234a, 1234e eller 1234e4
När denna information lästes in fick jag ett "mystiskt" resultat.
1234 - inga problem
1235a - inget problem
Men
1234e blev 1234 (altså samma som ovan) och
1234e4 blev 12340000 ...
Johnny Rosenberg skrev 2013-01-11 17:25:
Känns logiskt, ja. Beroende på format, då förstås.
Med andra ord, resultatet av inläsningen blev inte som jag önskat.
(pga inläsningen hade tolkat beställningsnumren som siffror)
Niklas Johansson skrev 2013-01-11 18:56:
Testa att skriv in värdet 1234e4 i en cell i Calc och se vad som händer.
;)
Bokstaven e tillsammans med siffror tolkas som "exponentiell". Vill du
att det alltid ska representeras som 1234e4 så bör du importera med
kolumntypen text.
Johnny Rosenberg skrev 2013-01-11 17:25:
Se till att cellen är formaterad som text (@) innan värdet hamnar där.
____________________________
Jan svarar .:
Samma problem uppstår vid kopiering som inläsning av text / siffror.
Inte för mig igår när jag testade…
Problemet löser man med "dubbelsnuttar" runt text, men måste då "kryssa" i
tecknet som omger strängar.
och då faller "automatiken", någon måste göra rätt val. (fel val kan skapa
problem utan att man upptäcker det i tid).
Vad menas med "formaterad som text (@)?
Markera alla celler som ska formateras som text → Högerklick →
Formatera celler → Tal → Välj Text eller skriv @ i fältet
”Formatbeskrivning”.
Hur skapas ett makro vid inläsning av en fil?
Va?
Det är du som skapar makrot…
Man kan i och för sig exportera makrot som textfil som man sedan kan
läsa tillbaka igen, men allvarligt talat, vad menar du?
_________________________
Jan Öhman skrev 2013-01-11 14:42:
-----------------------
Fråga 3.
Går det att få kolumntyp "text" som "standard"?
Niklas Johansson skrev 2013-01-11 18:56:
Csv-formatet har stöd för att ange textavgränsare, dvs. ifall filen har
formatet
test;försök
13;"13"
och textavgränsaren är satt till " så kommer posten försök att tolkas som
text.
Kanske inte riktigt det du ville höra men utan att ta till makron så vet
jag inte
riktigt vad jag ska föreslå. Du kan i och för sig testa att registrera
textfilen som
en databas och se om du får något annat resultat.
Om du gör det så räcker det med att byta ut textfilen för att börja tolka
den nya
datan.
/Niklas
--
Ber om ursäkt ifall det blev ett rörigt svar. Har lite för mycket att göra
för tillfället
så det blir lätt rörigt (och även fel ibland). Hoppas någon annan kan ge
dig bättre
svar.
____________________________
Jan svarar .:
Som sagt jag tackar för de svar ni gett!
Jag har en samling information om Makros för OpenOffice av i huvudsak Andrew
Pitonyak
http://www.pitonyak.org/AndrewMacro.odt
och
http://www.pitonyak.org/oo.php
(som jag fått av Johnny för OpenOffice)
Gäller dessa fortfarande?
eller ska jag söka efter nyare material för LibreOffice?
//Jan
Det är säkert jag som är korkad, men jag fattar fortfarande inte vad
du vill göra. Kan du ge ett exempel på ett scenario?
Exempelvis:
Indata: CSV-fil, vilka kolumner? Är det citattecken runt text? Datum?
Vilket tecken skiljer ett fält från ett annat? Tab, semikolon, komma,
vad?
Existerande data: Ett kalkylblad kanske?
Vad vill du göra med dina indata? Läsa hela filen och lägga den direkt
efter redan existerande data i kalkylbladet? Kanske bara läsa en viss
del av indatafilen, exempelvis efter ett visst datum? Eller bara
markera text och kopiera till urklipp och låta makrot behandla urklipp
på lämpligt sätt?
Heter indatafilen alltid likadant, så att man kan låta makrot bara
hämta filen varje gång, så att man slipper öppna den manuellt i en
textredigerare?
Kan indata vara olika saker varje gång? Exempelvis en textfil ibland,
data på någon webbsida ibland, manuellt knappande ibland? Vill du
kunna mata in data via en dialogruta?
Jag får helt enkelt inget grepp om vad du vill göra. Ena stunden
pratar du om att importera data och då blir det problem med formaten,
i nästa stund vill du knappa in data via kommandon (vilket ju är
krångligare än att bara skriva in dem direkt i kalkylbladet), eller om
det är ett makro som ska knappa in dem, eller så är det bara jag som
är lite trög…
Johnny Rosenberg