Chuyển đổi tập tin xls sang chế độ org?


8

Có thể chuyển đổi chuyển đổi một xlstập tin vào một orgbảng? Tôi tìm thấy bài viết này trên wiki emacs nhưng không thể làm cho nó hoạt động.



@lawlist Như tôi đã đề cập trong câu hỏi Tôi biết về UnXls nhưng không thể làm cho nó hoạt động.
Brian Fitzpatrick

Tôi nghĩ đó là nó - tức là, chủ đề tôi liên kết và wiki Emacs. Tôi không tin bất cứ điều gì khác tồn tại. Tôi có thể sẽ lưu bảng tính dưới dạng một tệp văn bản được phân định bằng tab bằng Microsoft Excel và sau đó làm bất cứ điều gì tôi muốn với mật khẩu dữ liệu.
luật

Câu trả lời:


6

Lưu tệp dưới dạng tệp được phân tách bằng tab (sử dụng Excel hoặc localclệnh được đề cập trong câu trả lời của @ YoungFrog). Sau đó chạy org-table-importtại điểm mà bạn muốn chèn bảng.


Tôi chuyển câu trả lời này sang câu trả lời được chấp nhận. Tất cả các câu trả lời hoạt động nhưng đây là nhanh nhất. Cảm ơn!
Brian Fitzpatrick

org-table-importlà ổn đối với các tệp csv đơn giản, nhưng nó sẽ bị hỏng nếu một ô chứa một dòng mới (đó là trường hợp của tôi).
YoungFrog

6

Vì bạn đang sử dụng Excel, bạn cũng có thể quan tâm đến các công cụ khác để làm việc với dữ liệu thống kê. Đây là cách bạn có thể sử dụng ngôn ngữ lập trình R để nhập tệp XSL vào chế độ 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 |

Đây là ví dụ về tệp XLS mà tôi đã sử dụng http : //ber siêucolitic.edu / browser_check / samples / exex.xls

Bạn sẽ cần cài đặt gói ESS để tương tác với R từ Emacs, cũng như chính ngôn ngữ R. Xem tại đây: http://ess.r-project.org/Manual/ess.html#Installation để được hướng dẫn (hoặc chỉ cần làm M-xpackage-installRETESS). Bạn sẽ cần bật R trong các khối mã Org Babel bằng cách thêm phần này vào tệp init Emacs của bạn:

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

Để cài đặt R, hãy xem tại đây: http://cran.r-project.org/doc/manuals/r-release/R-admin.html#Installation , nhưng những hướng dẫn này dành cho những người muốn xây dựng ngôn ngữ trên của riêng họ. Bạn thường có thể cài đặt nó trên Linux bằng trình quản lý gói của mình, vd. apt-get install Rhoặc yum install Rv.v. Ngoài ra còn có các tệp nhị phân cho các nền tảng khác, ví dụ: Các tệp nhị phân MS Windows có thể được tìm thấy ở đây: http://cran.r-project.org/bin/windows/base/


4

Đây là những gì tôi làm. Không lý tưởng, nhưng loại công trình. Đầu tiên, tôi sử dụng LibreScript Calc để chuyển đổi sang CSV:

localc --convert-to csv --headless filename

Sau đó, tôi sử dụng pcsv.el (trình phân tích cú pháp CSV) để chuyển đổi từ CSV sang Lisp, sau đó chèn kết quả dưới dạng bảng chế độ 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))

Nó hơi dài do cách tôi thực hiện các chức năng. Cái chúng ta cần ở đây là yf/insert-csv-as-table.


1

Tôi cho rằng bạn phải chuyển đổi XLS của mình sang CSV trước.

Tôi muốn tránh nhập một số CSV vào chế độ Org mọi lúc.

Đề xuất của tôi tương tự như @erikstokes với org-bảng-nhập, nhưng trong khối nguồn # + BEGIN_SRC emacs-lisp. Đó là một cách rất hiệu quả để đối phó với Cc Cv Cb (org-babel-exec-buffer).

Bạn cũng có thể bao gồm tên cột trong CSV.

Ví dụ, đây là `tmp.csv 'trong cùng thư mục.

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

Đây là mã nguồn Org-mode 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 |

Có một nội dung đơn giản tốt khi nhập CSV bằng Org-mode Babel: có tiêu đề "Đọc và ghi tệp"

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

Footenote trên nil arg từ `org-table.el ':

  • SEPARATOR chỉ định dấu tách trường trong các dòng. Nó có thể có các giá trị sau:
  • '(4) Sử dụng dấu phẩy làm dấu tách trường
  • '(16) Sử dụng TAB làm dấu tách trường
  • số nguyên Khi một số, sử dụng nhiều khoảng trắng làm dấu tách trường
  • nil Khi nil, lệnh cố gắng thông minh và tìm ra dấu phân cách theo cách sau:
    • khi mỗi dòng chứa một TAB, giả sử vật liệu được phân tách bằng TAB
    • khi mỗi dòng chứa dấu phẩy, giả sử tài liệu CSV
    • mặt khác, giả sử một hoặc nhiều ký tự SPACE làm dấu phân cách.

Tôi cảm ơn bạn đã cho ý kiến ​​của @Sean Allred, vì sự đơn giản hóa và hiệu quả của quy trình.


Làm thế nào là điều này có hiệu quả khác với câu trả lời được chấp nhận ?
Sean Allred

@Sean Allred Tôi cảm ơn bạn đã bình luận của bạn. Bạn nói đúng, đề nghị trước đây của tôi rất phức tạp.
RUserPassingBy

Rất đẹp (và không có R! :)).
hủy bỏ
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.