XLSファイルを組織モードに変換しますか?


8

xlsファイルをorgテーブルに変換することは可能ですか?私はemacs wikiでこの記事を見つけましたが、機能させることができませんでした。



@lawlist質問で述べたように、私はUnXlsを知っていますが、動作させることができませんでした。
ブライアンフィッツパトリック

私はそれだと思います-つまり、私がリンクしたスレッドとEmacs wiki。他には何も存在しないと思います。おそらく、スプレッドシートをMicrosoft Excelを使用してタブ区切りのテキストファイルのようなものとして保存し、その後、データのあとがきを使って何でもやりたいと思います。
弁護士、2015年

回答:


6

ファイルをタブ区切りファイルとして保存します(Excelまたはlocalc@YoungFrogの回答に記載されているコマンドを使用)。次にorg-table-import、テーブルを挿入する場所で実行します。


これを承認済みの回答に切り替えました。すべての回答が機能しますが、これが最も迅速です。ありがとう!
ブライアンフィッツパトリック

org-table-import単純なcsvファイルの場合は問題ありませんが、セルに改行が含まれている場合は壊れます(これは私の場合です)。
YoungFrog

6

Excelを使用しているので、統計データを操作する他のツールにも興味があるかもしれません。以下は、Rプログラミング言語を使用してXSLファイルをEmacs Orgモードにインポートする方法です。

* Import XLS File Using R
  Install =gdata= package (you need to only run it once unles you already
  have this package installed).  The code below is meant to get you started
  with just this file and nothing else, but generally, you'd simply run
  =install.packages("gdata")= from ESS session to install the package.
  The reason you can't do it here is that by default =install.packages= will
  try to install into location found in =.libPaths()=, which is likely to
  require super-user permissions.

  #+begin_src R :var tmpdir="/tmp"
    firstpath <- .libPaths()[1]
    .libPaths(c(firstpath, tmpdir))
    install.packages("gdata", lib = tmpdir, repos = "http://cran.rstudio.com/")
    library(gdata)
    read.xls("example.xls")
  #+end_src

  #+RESULTS:
  |         | Created with Microsoft Excel 2003 SP1 |
  |       X |                                     Y |
  | 0.42491 |                               0.15039 |
  | 0.03927 |                               0.54603 |
  |    some |                     rows were skipped |
  | 0.72372 |                               0.78759 |
  | 0.73772 |                               0.97298 |
  | 0.35374 |                               0.38789 |

  Or, open the ESS session by executing =M-x R=, then type into the
  R console (your input starts with `>' symbol, you don't need to type the
  symbol itself).  Answer the prompts by typing `y' or `n'.

  #+begin_example
  > install.packages("gdata")
  Installing package into ‘/usr/lib64/R/library’
  (as ‘lib’ is unspecified)
  Warning in install.packages("gdata") :
  'lib = "/usr/lib64/R/library"' is not writable
  Would you like to use a personal library instead?  (y/n) y
  Would you like to create a personal library
  ~/R/x86_64-redhat-linux-gnu-library/3.2
  to install packages into?  (y/n) y
  --- Please select a CRAN mirror for use in this session ---
  <install log skipped>
  ,** building package indices
  ,** installing vignettes
  ,** testing if installed package can be loaded
  ,* DONE (gdata)

  The downloaded source packages are in
  ‘/tmp/RtmpMiDPfR/downloaded_packages’
  #+end_example

  Load the XLS file and output an Org table:

  #+begin_src R
    library(gdata)
    read.xls("example.xls")
  #+end_src

  #+RESULTS:
  |         | Created with Microsoft Excel 2003 SP1 |
  |       X |                                     Y |
  | 0.42491 |                               0.15039 |
  | 0.03927 |                               0.54603 |
  |    some |                     rows were skipped |
  | 0.72372 |                               0.78759 |
  | 0.73772 |                               0.97298 |
  | 0.35374 |                               0.38789 |

これは私が使用したXLSファイルの例ですhttp://berkeleycollege.edu/browser_check/samples/excel.xls

EmacsからRとやり取りするには、ESSパッケージとR言語自体をインストールする必要があります。ここを見てください:http : //ess.r-project.org/Manual/ess.html#Installationの説明(または単にM-xpackage-installRETESS)。Emacs initファイルにこれを追加して、Org BabelコードブロックでRを有効にする必要があります。

(org-babel-do-load-languages
  'org-babel-load-languages '((R . t)))

Rをインストールするには、http//cran.r-project.org/doc/manuals/r-release/R-admin.html#Installationを参照してください。ただし、これらの手順は、彼ら自身。通常、パッケージマネージャーを使用してLinuxにインストールできます。apt-get install Rまたはyum install Rその他。他のプラットフォーム用のバイナリもあります。例:MS Windowsバイナリは、http//cran.r-project.org/bin/windows/base/にあります。


4

これが私がすることです。理想的ではありませんが、一種の作品です。まず、LibreOffice Calcを使用してCSVに変換します。

localc --convert-to csv --headless filename

次に、pcsv.el(CSVパーサー)を使用してCSVからLispに変換し、その結果をOrgモードテーブルとして挿入します。

(defun yf/lisp-table-to-org-table (table &optional function)
  "Convert a lisp table to `org-mode' syntax, applying FUNCTION to each of its elements.
The elements should not have any more newlines in them after
applying FUNCTION ; the default converts them to spaces. Return
value is a string containg the unaligned `org-mode' table."
  (unless (functionp function)
    (setq function (lambda (x) (replace-regexp-in-string "\n" " " x))))
  (mapconcat (lambda (x)                ; x is a line.
               (concat "| " (mapconcat function x " | ") " |"))
             table "\n"))
(defun yf/csv-to-table (beg end &optional separator)
  "Convert from BEG to END (a region in csv format) to an
`org-mode' table."
  (interactive
   (list
    (region-beginning)
    (region-end)
    (when current-prefix-arg
      (string-to-char (read-from-minibuffer "Separator? ")))))
  (require 'pcsv)
  (insert
   (yf/lisp-table-to-org-table
    (let
        ((pcsv-separator (or separator pcsv-separator)))
      (pcsv-parse-region beg end))))
  (delete-region beg end)
  (org-table-align))
(defun yf/insert-csv-as-table (filename &optional separator)
  "Insert a csv file as a org-mode table."
  (interactive
   (list
    (read-file-name "CSV file: ")
    (when current-prefix-arg
      (string-to-char
       (read-from-minibuffer "Separator? ")))))
  (yf/csv-to-table (point)
                   (progn (forward-char
                           (cadr (insert-file-contents filename)))
                          (point))
                   separator))

関数をどのように因数分解したかにより、少し長くなります。ここで必要なのはyf/insert-csv-as-tableです。


1

最初にXLSをCSVに変換する必要があると思います。

手動で毎回複数のCSVを組織モードにインポートすることは避けたいです。

私の提案は、org-table-importを使用した@erikstokesに似ていますが、#+ BEGIN_SRC emacs-lispソースブロック内にあります。Cc Cv Cb(org-babel-execute-buffer)を扱う非常に効率的な方法です。

CSVに列名を含めることもできます。

たとえば、同じディレクトリにある「tmp.csv」があります。

v1 id,v2 size,v3 width,v4,v5
1,2,3,4,5
2,2,3,4,5
3,2,3,4,5
4,2,3,4,5

以下はOrgモードのEmacs-Lispソースコードです。

#+BEGIN_SRC emacs-lisp :results value :exports both
(with-temp-buffer
 (org-table-import "tmp.csv" nil) ;; MEMO on `nil' arg is in the footnotes.
 (setq LST (org-table-to-lisp))
 ;; comment out or cut below one line if you don't have column names in CSV file.
 (append (list (car LST)) '(hline) (cdr (org-table-to-lisp)))
 )
#+END_SRC

#+NAME: TABLENAME-HERE-FOR-FURTHER-REUSE
#+RESULTS:
| v1 id | v2 size | v3 width | v4 | v5 |
|-------+---------+----------+----+----|
|     1 |       2 |        3 |  4 |  5 |
|     2 |       2 |        3 |  4 |  5 |
|     3 |       2 |        3 |  4 |  5 |
|     4 |       2 |        3 |  4 |  5 |

Org-mode Babelを使用したCSVのインポートに関する優れたシンプルなコンテンツ:「ファイルの読み取りと書き込み」というタイトル

http://orgmode.org/cgit.cgi/org-mode.git/plain/doc/library-of-babel.org

`org-table.el 'のnil argのFootenotes:

  • SEPARATORは、行のフィールド区切り文字を指定します。次の値を持つことができます。
  • '(4)フィールド区切り文字としてコンマを使用します
  • '(16)TABをフィールドセパレータとして使用
  • 整数数値の場合、フィールドセパレータとしてその数のスペースを使用します
  • nil nilの場合、コマンドはスマートになり、次の方法でセパレーターを見つけようとします。
    • 各行にTABが含まれている場合、TABで区切られた内容であると想定します
    • 各行にカンマが含まれている場合は、CSVマテリアルを想定
    • それ以外の場合は、区切り文字として1つ以上のスペース文字を想定します。

@Sean Allredのコメント、プロセスの簡素化と効率化に感謝します。


これは、受け入れられた回答とどのように効果的に異なりますか?
Sean Allred、2015年

@Sean Allredコメントありがとうございます。そうです、私の前の提案は複雑でした。
RUserPassingBy 2015年

とてもいい(そしてRなし!:))。
2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.