Công cụ dòng lệnh để xem các tập tin xls


27

Có công cụ dòng lệnh nào để xem / mở tệp excel (.xls) không?

Vì vậy, câu trả lời hoạt động rất tốt trừ khi các bảng tính không có tên tùy chỉnh.

Khi tôi cố gắng mở tệp, tôi nhận được:

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.

Tuy nhiên, nếu tôi mở tệp và đổi tên trang tính thành 'kiểm tra' hoặc một cái gì đó nó hoạt động tốt. Tôi cần điều chỉnh gì để nó có thể xử lý các tên mặc định? (Trang 1, v.v.)

Tập tin tôi đang cố mở hiện tại chỉ có 1 tờ, có tên là Sheet1.

Câu trả lời:


22

Vâng, đó là một chút hacky mặc dù. Hãy bắt đầu bằng cách cài đặt hai gói:

sudo apt-get install python-excelerator w3m

Từ đó, chúng tôi sử dụng một tập lệnh đi kèm python-exceleratorđể chuyển đổi tài liệu thành tệp HTML. Sau đó chúng tôi chuyển nó vào một trình duyệt dòng lệnh ( w3m) và hiển thị nó.

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

Bạn có thể tạo một hàm bash hoặc bí danh với điều đó nếu bạn không muốn tiếp tục gõ nó. Nó sẽ cung cấp cho bạn đầu ra như thế này:

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

Rất pretteh. Rõ ràng điều này sẽ không hỗ trợ bất kỳ loại macro, chỉnh sửa hoặc tương tác nào. Đây hoàn toàn là một người xem. Bạn cũng có thể làm việc trong việc tước bỏ các dấu ngoặc kép bao bọc mọi thứ. Tôi không đặc biệt bận tâm đến họ vào thời điểm này.

Nếu bạn không cần nó ở dạng bảng, bạn có thể chỉ cần có một cái gì đó như thế này:

py_xls2csv spreadsheet.xls 2>&1 | less

Bạn có thể đi xa hơn thế và hiển thị nó theo cách đẹp hơn một chút:

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

Điều đó mang lại cho bạn những điều sau đây:

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

Để chuyển nó thành tệp văn bản thuần túy: links -dump /tmp/tempspreadsheet.html ..... Ngoài ra: như vậy, nó in các ký tự Unicode ở \u0950định dạng ... Có thể có một số cách để xử lý đầu ra để tạo ra ký tự Unicode ... Nếu ai đó biết " "cách đơn giản, tôi muốn thấy nó ...
Peter.O

@fred Tôi đã chuyển nó sang w3mbây giờ (vì nó trông đẹp hơn) và có một số tùy chọn bộ ký tự (xem w3m --help). Tôi cũng đã cắt giảm độ dài xuống, bao gồm cả việc cần phải chuyển nó ra thành một tập tin.
Oli

Tuyệt vời! Điều này hoạt động trong hầu hết các trường hợp: xem chỉnh sửa bài đăng chính cho phần 2 của câu hỏi (Dễ dàng định dạng nội dung ở đó hơn trong một nhận xét)
David Oneill

py_xls2csvđược mã hóa cứng để hoạt động với codepage cp1251 .. Tôi đã thấy rằng việc thay thế 3 trường hợp cp1251bằng cách utf-8giải quyết "vấn đề" không hiển thị các ký tự unicode ... Tôi cho rằng nó phụ thuộc vào những gì trong lây lan . Nhưng sử dụng utf-8 làm việc cho tôi ... (Tôi đã không nhận ra điều này cho đến khi tôi đăng câu trả lời của mình, nhưng nó có thể được sử dụng cho các chuyển đổi khác)
Peter.O

Một nhận xét muộn màng ... Tôi vừa thử sử dụng điều này để lập bảng tệp văn bản csv (chuyển đổi thành xls trước) .. và mặc dù việc tạo được htmlduy trì nhiều khoảng trắng, đầu ra được hiển thị hiển thị dưới dạng một khoảng trắng (điển hình của html) .. . tức là .. <td> cows         moo </td>hiển thị dưới dạng cows moo... Có thể có một số điều chỉnh đơn giản cho việc này, nhưng kiến ​​thức html của tôi không vượt quá khả năng đánh vần 'html' .. :)
Peter.O

1

Đây là một phương pháp duy trì các ký tự Unicode.
I E. nó hiển thị , thay vì loại bỏ giá trị Codepoint Unicode\U0906

Tập lệnh sử dụng OpenOffice.orgPyODConverter.py để chuyển đổi một định dạng tài liệu OOo sang định dạng OOo khác. Các loại chuyển đổi dựa trên các phần mở rộng tên tệp:

  • 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
#

Có lẽ có một số cách khác để thoát OOo (nhưng tôi không biết)
Và có lẽ cũng có một số cách để bắt đầu một trường hợp độc lập của OOo, nhưng tôi cũng không biết làm thế nào, vì vậy, nó là như vậy, nó yêu cầu OOo không chạy ...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.