แก้ไข Libreoffice-Files จาก Command Line


7

ฉันต้องการเพิ่มบรรทัดในตารางคำนวณ libreoffice จากบรรทัดคำสั่ง แต่ฉันไม่รู้ว่าอย่างไร
ฉันเพิ่งหาวิธีเริ่ม libreoffice จากบรรทัดคำสั่ง

ตัวอย่างเช่นสิ่งที่เอี่ยมกำลังมองหา: - test.ods-fileก่อนหน้านี้

Name      Text
Hans      Bla
Christian BlaBlub

ฉันเข้า ...

ubuntu> [a command -insert] Alf|test -file=test.ods

ดังนั้นจะเพิ่ม "Alf" และ "test" เป็นบรรทัดถัดไปในตาราง
- test.ods-fileหลัง:

Name      Text
Hans      Bla
Christian BlaBlub
Alf       test

2
โปรแกรมสเปรดชีตที่ใช้เทอร์มินัลที่ดีที่สุดที่ฉันรู้จักคือsc-imแต่ฉันไม่รู้ว่าจะเปิดไฟล์ LibreOffice ได้หรือไม่ คุณอาจต้องส่งออกเป็น CSV หรือบางอย่างก่อน
Nick Weinberg

คำตอบ:


10

.odsเป็นไฟล์เก็บถาวร ดังนั้นคุณจะต้องแตกไฟล์เก็บถาวร

จากเอกสาร :

โครงสร้างไฟล์ XML

เอกสารในรูปแบบไฟล์ OpenDocument จะถูกจัดเก็บเป็นไฟล์บีบอัด zip ที่มีไฟล์ XML ในการดูไฟล์ XML เหล่านี้คุณสามารถเปิดไฟล์ OpenDocument ด้วยโปรแกรม unzip ไฟล์และไดเรกทอรีต่อไปนี้มีอยู่ในไฟล์ OpenDocument:

  • เนื้อหาข้อความของเอกสารอยู่ใน content.xml

ดังนั้นจึงไม่ง่ายเหมือน

[a command -insert] Alf|test -file=test.ods

เนื่องจากคุณต้องแทรกส่วน XML


ป้อนคำอธิบายรูปภาพที่นี่

$ cd ~/tmp/
$ unzip ../test.ods 
Archive:  test.ods
 extracting: mimetype                
 extracting: Thumbnails/thumbnail.png  
  inflating: settings.xml            
  inflating: content.xml             
  inflating: meta.xml                
  inflating: styles.xml              
  inflating: manifest.rdf            
   creating: Configurations2/images/Bitmaps/
   creating: Configurations2/toolpanel/
   creating: Configurations2/progressbar/
  inflating: Configurations2/accelerator/current.xml  
   creating: Configurations2/floater/
   creating: Configurations2/statusbar/
   creating: Configurations2/toolbar/
   creating: Configurations2/popupmenu/
   creating: Configurations2/menubar/
  inflating: META-INF/manifest.xml   

เมื่อคุณดู content.xml และคุณต้องการเพิ่มแถวใหม่ด้านล่างแถวสุดท้ายคุณจะต้องเพิ่มสิ่งนี้ ...

<table:table-row table:style-name="ro1">
<table:table-cell office:value-type="string" calcext:value-type="string"><text:p>a2a2a2</text:p>
</table:table-cell><table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>b2b2b2</text:p>
</table:table-cell></table:table-row>

ก่อน

<table:named-expressions/>

จากนั้นซิปไฟล์อีกครั้ง ( zip -r ../test2.ods .จากไดเรกทอรีด้วยไฟล์)

ผลลัพธ์:

ป้อนคำอธิบายรูปภาพที่นี่


ในการแก้ไขไฟล์จากบรรทัดคำสั่งฉันใช้คำสั่งนี้ ฉันใส่ตัวอย่างใน ~ / Downloads และทำ tmp / ในนั้นเพื่อทดสอบ คำสั่งทั้งหมดที่ใช้สำหรับสิ่งนี้:

cd ~/Downloads/tmp/
unzip ../test.ods 
sed 's#</table:table><table:named-expressions/>#<table:table-row table:style-name="ro1"><table:table-cell office:value-type="string" calcext:value-type="string"><text:p>a3a3a3</text:p></table:table-cell><table:table-cell office:value-type="string" calcext:value-type="string"><text:p>b3b3b3</text:p></table:table-cell></table:table-row>&#' content.xml > content2.xml 
mv content2.xml content.xml
zip -r ../test2.ods .

สิ่งที่คุณต้องทำคือแทนที่กลุ่มข้อความด้วยตัวคุณเอง


เวอร์ชั่นใหม่ของมารยาทของ Terdon (ใช้ตัวแปรเพื่อให้อ่านง่ายขึ้น):

$ from="</table:table><table:named-expressions/>"
$ to="<table:table-row table:style-name="ro1"><table:table-cell office:value-type="string" calcext:value-type="string"><text:p>a3a3a3</text:p></table:table-cell><table:tab‌​le-cell office:value-type="string" calcext:value-type="string"><text:p>b3b3b3</text:p></table:table-cell></table:ta‌​ble-row>"
$ sed "s#$from#$to$from#" content.xml

"#" เป็นตัวคั่น หากคุณมี "#" ในข้อความให้ใช้อย่างอื่น


ดังนั้นไม่ควรเขียนเชลล์สคริปต์เพื่อทำสิ่งนี้โดยอัตโนมัติ?
wb9688

ใช่มันไม่ได้เป็นความท้าทาย;)
Rinzwind

@Rinzwind "คุณจะต้องเพิ่มบางสิ่งเช่นนี้ ... " ก่อนหน้า "ที่" ต้องใช้คำสั่งแทรกบางอย่างในไฟล์ flat (รูปแบบ XML) คำตอบที่ยอดเยี่ยมของคุณสามารถขยายด้วยคำสั่ง bash / กลุ่มคำสั่งนี้ได้หรือไม่?
WinEunuuchs2Unix

ขอบคุณมากคำอธิบายที่ดีมาก ฉันจะพยายามจัดการกับมัน
Chris Sagined

@ WinEunuuchs2Unix ทำไม คำสั่ง "sed" นั้นเพียงพอ> :)
Rinzwind
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.