xls
ファイルをorg
テーブルに変換することは可能ですか?私はemacs wikiでこの記事を見つけましたが、機能させることができませんでした。
xls
ファイルをorg
テーブルに変換することは可能ですか?私はemacs wikiでこの記事を見つけましたが、機能させることができませんでした。
回答:
ファイルをタブ区切りファイルとして保存します(Excelまたはlocalc
@YoungFrogの回答に記載されているコマンドを使用)。次にorg-table-import
、テーブルを挿入する場所で実行します。
org-table-import
単純なcsvファイルの場合は問題ありませんが、セルに改行が含まれている場合は壊れます(これは私の場合です)。
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-install
RETESS
)。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/にあります。
これが私がすることです。理想的ではありませんが、一種の作品です。まず、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
です。
最初に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:
@Sean Allredのコメント、プロセスの簡素化と効率化に感謝します。