Bash Script skal skrivee til excel ark
Hej Forum
Jeg har fået en lille opgave som jeg har et par spørgsmål til
Jeg har en MySQL database med nogle parametre i der logger hvert minut.
Der ønskes en rapport over de sidste 24 timer.
Denne rapport ligger i en excel skabelon hvor det er feltet H19 som jeg skal skrive min værdi til.
Min tanke er følgende:
Script starter og forespørger MySQL om parametre - Disse indlæses i variabler i mit bashscript som indsætter denne værdi i H19
Herefter converterer den excelarket til pdf via Libreoffice og leverer den færdige rapport til en netværkslokation.
Mit sopørgsmål er så - hvordan får jeg bsh til at skrive i den bestemte kolonne!
PFT
P
Jeg har fået en lille opgave som jeg har et par spørgsmål til
Jeg har en MySQL database med nogle parametre i der logger hvert minut.
Der ønskes en rapport over de sidste 24 timer.
Denne rapport ligger i en excel skabelon hvor det er feltet H19 som jeg skal skrive min værdi til.
Min tanke er følgende:
Script starter og forespørger MySQL om parametre - Disse indlæses i variabler i mit bashscript som indsætter denne værdi i H19
Herefter converterer den excelarket til pdf via Libreoffice og leverer den færdige rapport til en netværkslokation.
Mit sopørgsmål er så - hvordan får jeg bsh til at skrive i den bestemte kolonne!
PFT
P
Kommentarer5
En txt fil (fx input.txt)
En tekst fil, fx input.txt eller input.csv med indholdet ...:
,,,,,,,
,,,,,,,
,,,,,,,
,,,,,,,
,,,,,,,
,,,,,,,
,,,,,,,
,,,,,,,
,,,,,,,
,,,,,,,
,,,,,,,
,,,,,,,
,,,,,,,
,,,,,,,
,,,,,,,
,,,,,,,
,,,,,,,
,,,,,,,
,,,,,,,1234
... vil kommasepareret skrive '1234' til celle H19 i et regneark (xlsx i dette eksempel). Det kan nemt exporteres fra LibreOffice Calc (i modsætning fra Excel) som kommasepareret (fx som input.csv).
Et bash kunne se sådan ud (bemærk at hvis du kommasepareret åbner input.txt eller input.csv direkte i Calc, så står der også '1234' i celle H19):
#!/bin/bash
awk 'BEGIN{ OFS=","; print ""};
NR > 1{print $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $15, $17, $18 $19;}' input.txt > output.xlsx
Du kan muligvis forkorte bash, hvis det udelukkende er celle H19 du vil skrive til:
#!/bin/bash
awk 'BEGIN{ OFS=","; print ""};
NR > 1{print $1, $19;}' input.csv > output.xlsx
Skriver du noget i print "", tilføjes kolonne overskrifter og skriver du noget i NR > 1{}, skrives det som række overskrifter. Hvis du vil have bash til at tilføje række overskrifter, skal du korrigere så værdien bliver stående i H19.
Eksempelvis kommer værdien til at stå i J19 i følgende:
#!/bin/bash
awk 'BEGIN{ OFS=","; print "Tekst1,Tekst2,Tekst3,Tekst4,Tekst5,Tekst6,Tekst7,Tekst8"};
NR > 1{print "Tekst1", "Tekst2", $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $15, $17, $18 $19;}' input.csv > output.xlsx
----------
For at skrive til H19 i Excel og Windows med fx et kommasepareret (eller andet separator tegn) input.txt, først oprette det i notepad. Så åbne Excel og importere input.txt fra DATA > Fra tekst og følge guiden.
Hej Frogmaster.
Tak for et
Tak for et svar - jeg må fordybe mig lidt og teste frem og tilbage.
Problemet som jeg ser det er at det er kun enkelte felter i Excel arket som skal udfykdes.
Reelt set henter man 2 variabler og trækker dem fra hinanden og indsætter resultatet i H4 ( eller enden defineret felt.
Selve excel skabelonen er fastlåst med farver logo og en masse fast tekst - derfdor er det kun i besatemte felter der skal indsættes data
Hej PequeDet er nødvendigt
Det er nødvendigt at fordybe sig, teste løs og finde andre mulige løsninger.
Jeg vil godt give et eksempel på et kommasepareret input.csv og et bash der ikke udskifter mellemrum med kommaer ($1 osv ...). Det sætter to værdier ind i regnearket. Det første 6666666 i B3 og 1234 i D26.
Farver og formateringer i arket kan ikke lade sig gøre så vidt jeg ved. Ikke med denne metode, men muligvis vha VBA eller macro programmering i regnearket. Så skal du have fat i en programmør. Det er jeg ikke.
"Vægttabel,Med personlig foretrukken idealvægt angivelse",,,
,,,,
,666666666,,
,,,,
,,,,
"Model 1",,,
"Når regnearket bruger denne model vurderes en persons vægt i forhold til en såkaldt idealvægt ved hjælp af BMI",,,
"BMI er en forkortelse for Body Mass Index Du skal kun indtaste data i de lysorange felter",,"Dreng"
,,,,
"Begynd med at angive et 0 eller ingenting hvis du er en pige og 1 hvis du er en dreng",,"1"
,,,,
"BMI Din vægt i kg divideret med din højde i cm gange din højde i cm",,,
"Din vægt i kg,Din højde i cm,BMI,Konklusion",,,
,,"Indtast Vægt i kg i celle A14",
"Model 2",,,
"Model 2 beregner idealvægten som et gennemsnit af en persons øvre og nedre idealvægt sat i forhold til køn og højde",,,
"Når regnearket bruger denne model vurderes en persons vægt på følgende måde",,,
"Legemsvægt for mænd er lige så mange kilo som man er centimeter over 100 minus 10% minus 1kg",,,
"Legemsvægt for kvinder er lige så mange kilo som man er centimeter over 100 minus 10% minus 4kg",,,
,,,,
,,,,
,,,,
,,,,
"Din højde i cm Din ideal vægt er,Din vægt i kg Din beregnede vægt i kg er",,,
,,,,
"Min foretrukne vægt er",,,1234
-----------
#!/bin/bash
awk 'BEGIN{ OFS=","; print};
NR > 1{print ;}' input.csv > output.xlsx
Skrive til excel ark
Hvis det kun er kommaseparerede filer (.csv) kan du godt nøjes med bash, men det lyder som om dit Excel ark indeholder formler etc.
Jeg har selv lidt erfaring med at skrive Excel filer ved hjælp af Groovy (http://groovy-lang.org/).
Her er et eksempel der skriver et tal til et felt i et Excel ark:
@Grapes([
@Grab('org.apache.poi:poi:3.10.1'),
@Grab('org.apache.poi:poi-ooxml:3.10.1')
])
import org.apache.poi.xssf.usermodel.XSSFWorkbook
import static org.apache.poi.ss.usermodel.Cell.*
import org.apache.poi.hssf.util.CellReference
import org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator
def input = new FileInputStream("Tester.xlsx")
def workbook = new XSSFWorkbook(input)
def field = workbook.getSheetAt(0).getRow(19).getCell(7)
field.setCellValue(42)
XSSFFormulaEvaluator.evaluateAllFormulaCells(workbook)
FileOutputStream fileOut = new FileOutputStream("wb.xlsx")
workbook.write(fileOut)
fileOut.close()
Fra Python kan du bruge dette bibliotek:
http://xlsxwriter.readthedocs.io/
Jeg tror ikke du kan
Hvis det kun er kommaseparerede filer (.csv) kan du godt nøjes med bash, men det lyder som om dit Excel ark indeholder formler etc.
Ja, jeg tror også man skal ud noget andet end bash. Jeg tror heller ikke man kan skrive til et regneark. Der er mere tale om at oprette et regneark, og derfor bliver indhold overskrevet.
Man kan godt skrive formler i et regneark fra et CSV. Jeg har rette i kommentaren, fordi det var lidt sjusket. Her er et bedre eksempel med to simple formler. Jeg kan alligevel ikke få scriptet til at skrive flere rækker i arket. Det skal ske fra CSV:
input.csv
Denne linje skal være tom
,"Tekst2 er fra CSV",,,
,,"Der er en formel i C4",,
4,5,=a4+b4,"Tekst3 er fra CSV",
"Tekst4 er fra CSV",,,5678
,,"Sum af D1+D5 =",=d1+d5
Bash
#!/bin/bash
WAIT=1
FROG ()
{
echo "This is a funky function."
}
MASTER ()
{
i=0
REPEATS=1
echo
echo "The fun begins..."
echo
sleep $WAIT
while [ $i -lt $REPEATS ]
do
awk 'BEGIN{ OFS=","; print "Denne tekst er fra bash,,,1234"};
NR > 1{print ;}' input.csv > output.xlsx
let "i+=1"
done
}
FROG
MASTER
#exit $?
#$SHELL