• Opret dig
  • Glemt adgangskode

User account menu

  • Artikler
  • Forside
  • Forum
  • Nyheder
  • Log ind
Hjem
LinuxIN.dk

Snak med

Opret dig!

Af peque | 19.05.2017 10:37

Bash Script skal skrivee til excel ark

Hjælp generelt
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
  • Log ind eller opret dig for at tilføje kommentarer

Kommentarer5

# 1

8 år 1 måned siden

Permalink

Indsendt af frogmaster den 19. maj 2017 kl. 16:38

Permalink

En txt fil (fx input.txt)

#0 Mit sopørgsmål er så - hvordan får jeg bsh til at skrive i den bestemte kolonne!

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.
  • Log ind eller opret dig for at tilføje kommentarer

# 2

8 år 1 måned siden

Permalink

Indsendt af peque den 21. maj 2017 kl. 09:27

In reply to En txt fil (fx input.txt) by frogmaster

Permalink

Hej Frogmaster.
Tak for et

Hej Frogmaster.
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
  • Log ind eller opret dig for at tilføje kommentarer

# 3

8 år 1 måned siden

Permalink

Indsendt af frogmaster den 21. maj 2017 kl. 12:51

Permalink

Hej PequeDet er nødvendigt

Hej Peque

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
  • Log ind eller opret dig for at tilføje kommentarer

# 4

8 år 1 måned siden

Permalink

Indsendt af phoenix den 22. maj 2017 kl. 19:26

Permalink

Skrive til excel ark

Jeg tror ikke du kan skrive til Excel filer fra bash direkte, du skal have fat i et programmeringssprog som f.eks. Java eller Python.
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/
  • Log ind eller opret dig for at tilføje kommentarer

# 5

8 år 1 måned siden

Permalink

Indsendt af frogmaster den 22. maj 2017 kl. 20:02

Permalink

Jeg tror ikke du kan

#4: Jeg tror ikke du kan skrive til Excel filer fra bash direkte, du skal have fat i et programmeringssprog som f.eks. Java eller Python.
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
  • Log ind eller opret dig for at tilføje kommentarer

Svar søges

llumos Unix-operativsystem, 0
Den er go 0
14. februar = I Love Free Software Day 0
Lokal fil-deling - for de dovne. 0
Linux fra begynder til professionel af O'Reilly 0

Seneste aktivitet

Gode anmeldelser Zorin OS 17.3 8
Open Source-eksperimentet 5
En snak om Linux-kompatibel software 7
Nulstilling af adgangskode 6
Virtuel maskine? 2
PCLinuxOS 27
"Intet realistisk alternativ" - mig i r*ven 15
Ingen Mint 5
Linux App Store Flathub når 3 milliarder downloads 2
Digitaliseringsministeriet sætter gang i pilotprojekt om digital suverænitet 3
Mest sikker webbrowser 5
Firefox 2
Privatbeskeder 7
Backup/synkronisering? 3
BigLinux 5
Chatgpt satire 1
Læsning af databasefil i Firefox 2
Vanilla OS 15
Pepsi Challenge 4
Linuxin er nu migreret til Drupal 11 13

© 2025 Linuxin og de respektive skribenter

Oprettet og drevet af nørder siden 2004 !