เครื่องมือ Commandline สำหรับการดูไฟล์ xls


27

มีเครื่องมือบรรทัดคำสั่งสำหรับการดู / เปิดไฟล์ excel (.xls) หรือไม่

ดังนั้นคำตอบจึงใช้งานได้ดีเว้นแต่แผ่นงานจะไม่มีชื่อที่กำหนดเอง

เมื่อฉันพยายามเปิดไฟล์ฉันจะได้รับ:

Traceback (most recent call last):
  File "/usr/bin/py_xls2csv", line 17, in <module>
    for sheet_name, values in parse_xls(arg, 'cp1251'): # parse_xls(arg) -- default encoding
  File "/usr/lib/python2.5/site-packages/pyExcelerator/ImportXLS.py", line 334, in parse_xls
    raise Exception, 'No workbook stream in file.'
Exception: No workbook stream in file.

อย่างไรก็ตามถ้าฉันเปิดไฟล์และเปลี่ยนชื่อแผ่นงานเป็น 'ทดสอบ' หรือบางสิ่งก็ใช้งานได้ดี ฉันต้องปรับแต่งอะไรเพื่อให้สามารถจัดการชื่อเริ่มต้นได้ (Sheet1 ฯลฯ )

ไฟล์ที่ฉันพยายามจะเปิดปัจจุบันมีเพียง 1 แผ่นชื่อ Sheet1

คำตอบ:


22

ใช่ว่ามันเป็นเรื่องแฮ็คเล็กน้อย เริ่มต้นด้วยการติดตั้งสองแพ็คเกจ:

sudo apt-get install python-excelerator w3m

จากนั้นเราใช้สคริปต์ที่มาพร้อมกับpython-exceleratorการแปลงเอกสารเป็นไฟล์ HTML จากนั้นเราจะส่งข้อมูลนั้นไปยังเบราว์เซอร์บรรทัดคำสั่ง ( w3m) แล้วแสดงผล

py_xls2html spreadsheet.xls 2>/dev/null | sed 's/"//g' | w3m -dump -T 'text/html'

คุณสามารถสร้างฟังก์ชั่นทุบตีหรือนามแฝงได้หากคุณไม่ต้องการพิมพ์ต่อไป ควรให้ผลลัพธ์ดังนี้:

Sheet = Sheet1
┏━━━━┯━━━┯━━━━━┯━━━━━━━━━━━━┓
┃this│is │a    │spreadsheet ┃
┠────┼───┼─────┼────────────┨
┃it  │is │very │nice        ┃
┠────┼───┼─────┼────────────┨
┃this│has│three│rows        ┃
┗━━━━┷━━━┷━━━━━┷━━━━━━━━━━━━┛
Sheet = Sheet2 Sheet = Sheet3

ก่อนหน้านี้มาก เห็นได้ชัดว่านี่จะไม่สนับสนุนแมโครประเภทใดประเภทหนึ่งการแก้ไขหรือการโต้ตอบใด ๆ นี่คือผู้ชมอย่างหมดจด นอกจากนี้คุณยังสามารถลอกเครื่องหมายคำพูดที่ห่อสิ่งต่างๆ ฉันไม่ได้ใส่ใจพวกเขาโดยเฉพาะในตอนนี้

หากคุณไม่ต้องการให้เป็นแบบตารางคุณสามารถมีสิ่งนี้:

py_xls2csv spreadsheet.xls 2>&1 | less

คุณสามารถไปได้ไกลกว่านั้นและแสดงด้วยวิธีที่ดีกว่า:

py_xls2csv spreadsheet.xls 2>&1 | grep '^"' | sed 's/"//g' | column -s, -t | less -#2 -N -S

ที่ให้คุณดังต่อไปนี้:

  1 this   is    a       spreadsheet
  2 it     is    very    nice
  3 this   has   three   rows

หากต้องการดัมพ์ไปยังไฟล์ข้อความธรรมดา: links -dump /tmp/tempspreadsheet.html ..... นอกจากนี้: ตามที่เป็นมันพิมพ์อักขระ Unicode ใน\u0950รูปแบบ ... อาจมีวิธีการประมวลผลเอาต์พุตเพื่อสร้างอักขระ Unicode ... หากมีคนรู้จัก " วิธีง่ายๆ "ฉันต้องการเห็นมัน ...
Peter.O

@ เฟรดฉันเปลี่ยนไปใช้w3mตอนนี้ (เพราะมันดูดีกว่า) และนั่นมีตัวเลือกชุดอักขระ (ดูw3m --help) ฉันยังลดความยาวลงรวมถึงการ nuking ความต้องการที่จะไพพ์มันออกเป็นไฟล์
Oli

! น่ากลัว วิธีนี้ใช้ได้ผลในกรณีส่วนใหญ่: ดูแก้ไขการโพสต์หลักสำหรับส่วนที่ 2 ของคำถาม (ง่ายกว่าที่จะจัดรูปแบบสิ่งที่มีในความคิดเห็น)
David Oneill

py_xls2csvเป็นรหัสยากที่จะทำงานกับcodepage cp1251 .. ฉันพบว่าการแทนที่ 3 อินสแตนซ์ของcp1251ด้วยการutf-8แก้ไข 'ปัญหา' ของการไม่แสดงอักขระ unicode ... ฉันคิดว่ามันขึ้นอยู่กับสิ่งที่อยู่ใน spreadsheed แต่การใช้utf-8ทำงานให้ฉัน ... (ฉันไม่ได้ตระหนักถึงสิ่งนี้จนกระทั่งหลังจากที่ฉันโพสต์คำตอบของฉัน แต่มันอาจจะใช้สำหรับการแปลงอื่น ๆ )
Peter.O

ความคิดเห็นที่ล่าช้า ... ฉันเพิ่งลองใช้สิ่งนี้เพื่อจัดระเบียบไฟล์ข้อความ csv (แปลงเป็น xls ก่อน) .. และแม้ว่าตัวสร้างถูกhtmlเก็บรักษาไว้หลายช่องว่างเอาต์พุตที่แสดงผลจะแสดงเป็นพื้นที่เดียว (ทั่วไปของ html) .. . ie .. <td> cows         moo </td>แสดงเป็นcows moo... อาจมีการบิดง่ายๆสำหรับสิ่งนี้ แต่ความรู้ html ของฉันไม่ได้ไปไกลเกินกว่าที่จะสามารถสะกด 'html' .. :)
Peter.O

1

นี่คือวิธีการรักษาอักขระ Unicode
กล่าวคือ มันแสดงมากกว่า dislaying ค่า Unicode Codepoint\U0906

สคริปต์ใช้OpenOffice.orgและPyODConverter.pyเพื่อแปลงรูปแบบเอกสาร OOo หนึ่งเป็นรูปแบบ OOo อื่น ๆ ประเภทการแปลงจะขึ้นอยู่กับส่วนขยายชื่อไฟล์:

  • pdf html odt doc txt ods xls csv odp ppt swf

#
oextn="html" # output type
ifile="My_OOo_File"   ;echo ifile="$ifile"
ofile="$ifile.$oextn" ;echo ofile="$ofile"
[[ -f "$ofile" ]] && { rm "$ofile"; }
[[ -f "$ofile" ]] && { echo "A pre-existing Output file was NOT removed" ;exit; } 
#
sofport=8100
soffice="$(locate -br "^soffice.bin$")"
soffarg=( '-invisible' '-accept=socket,port='$sofport';urp;' )
soffrex="$soffice ${soffarg[@]}"
#
  soffpid=$(($(pgrep -f -n "$soffice")))
((soffpid!=0)) && { echo "A OpenOffice is already running. PID=$soffpid" ;exit; } 
#
# Start OpenOffice
"$soffice" "${soffarg[@]}" &
soffpid=$(($(pgrep -f -n "$soffrex")))
((soffpid== 0)) && { echo "A OpenOffice has not started yet=$soffpid" ;exit; } 
#
# Start OpenOffice
echo "** Attempting to connect to OpenOffice.org on port $sofport"
x=1; while ((x!=0)) ;do
    /usr/bin/python "$(which DocumentConverter.py)" "$ifile" "$ofile"
    x=$?
done
#
# Start Terminal Browser
w3m   "$ofile" -T 'text/html'
kill -15 $soffpid
#

อาจมีวิธีอื่นในการออกจาก OOo (แต่ฉันไม่รู้)
และอาจมีวิธีการเริ่มต้นอินสแตนซ์อิสระของ OOo ด้วยเช่นกัน แต่ฉันก็ไม่รู้วิธีที่จะทำเช่นนั้น มันต้องการให้ OOo ไม่ทำงาน ...

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