Xls फाइल देखने के लिए कमांडलाइन टूल


27

क्या एक्सेल (.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.

हालाँकि, अगर मैं फ़ाइल खोलता हूँ और शीट का नाम बदलकर 'परीक्षण' या कुछ ठीक करता हूँ। मुझे क्या करने की आवश्यकता है ताकि यह डिफ़ॉल्ट नामों को संभाल सके? (शीट 1, आदि)

वर्तमान में मैं जिस फाइल को खोलने की कोशिश कर रहा हूं, उसमें केवल 1 शीट है, जिसका नाम शीट 1 है।

जवाबों:


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 ..... इसके अलावा: जैसे-है, यह \u0950प्रारूप में यूनिकोड वर्णों को प्रिंट करता है ... हो सकता है कि यूनिकोड वर्ण का उत्पादन करने के लिए आउटपुट को संसाधित करने का कोई तरीका हो ... यदि कोई व्यक्ति जानता है " आसान तरीका है, मैं इसे देखना चाहूंगा ...
पीटर।

@ यदि मैंने इसे अब स्विच कर दिया है w3m(क्योंकि यह केवल अच्छा लग रहा है) और इसमें कुछ चारसेट विकल्प हैं (देखें w3m --help)। मैंने लंबाई को भी कम कर दिया है, जिसमें एक फ़ाइल को पाइप करने की आवश्यकता को शामिल करना भी शामिल है।
ओली

बहुत बढ़िया! यह ज्यादातर मामलों में काम करता है: प्रश्न के भाग 2 के लिए मुख्य पोस्ट को संपादित करें देखें (यह एक टिप्पणी की तुलना में वहां सामान को प्रारूपित करना आसान है)
डेविड वनिल

py_xls2csvकोडपेज के साथ काम करने के लिए हार्ड-कोडेड है cp1251.. मैंने पाया है कि 3 उदाहरणों को प्रतिस्थापित करते हुए यूनिकोड वर्णों को प्रदर्शित नहीं करने की 'समस्या' cp1251को utf-8हल करता है ... मुझे लगता है कि यह स्प्रेडशीट में क्या है, इस पर निर्भर करता है। लेकिन utf-8 का उपयोग करना मेरे लिए काम किया ... (जब तक मैंने अपना उत्तर पोस्ट नहीं किया, तब तक मुझे इसका एहसास नहीं हुआ, लेकिन इसका उपयोग अन्य रूपांतरणों के लिए हो सकता है)
पीटर।

एक टिप्पणी टिप्पणी ... मैंने इसे एक सीएसवी पाठ फ़ाइल (पहले xls में परिवर्तित) को सारणीबद्ध करने के लिए उपयोग करने की कोशिश की .. और यद्यपि उत्पन्न htmlकई स्थानों को बनाए रखा है, प्रदान की गई आउटपुट उन्हें एक ही स्थान (html के विशिष्ट) के रूप में प्रदर्शित करता है। । यानी .. के <td> cows         moo </td>रूप में प्रदर्शित करता है cows moo... इसके लिए शायद कुछ सरल ट्वीक है, लेकिन मेरा html ज्ञान 'html' को वर्तनी में सक्षम करने से बहुत आगे नहीं जाता है .. :)
पीटर।

1

यहाँ एक विधि है जो यूनिकोड वर्णों को बनाए रखती है।
अर्थात। यह यूनिकोड कोडपॉइंट मान को अक्षम करने के बजाय प्रदर्शित करता है\U0906

स्क्रिप्ट OOo दस्तावेज़ स्वरूप को अन्य OOo प्रारूप में परिवर्तित करने के लिए OpenOffice.org और PyODConverter.py का उपयोग करता है । रूपांतरण प्रकार फ़ाइल नाम एक्सटेंशन पर आधारित हैं:

  • pdf html odt doc txt ods xls csv odp पीपीटी 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 नहीं चल रहा है ...

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.