JDK に依存しないopenxlsx
パッケージを用いて xlsx ファイルからの入力と出力を試しました。
記述時の環境は以下の通りです。
- Windows 10 Pro
- R 3.2.5 Windows 64bit版
- openxlsx 3.0.0
- Rtools32.exe
事前準備
RTools をインストールし、 bin フォルダを環境変数 PATH に追加しておく
R のバージョンにあった RTools をインストールします。ダウンロードは以下から。
Building R for Windows
openxlsx パッケージのインストール
通常通り。
install.packages('openxlsx')
library(openxlsx)
使い方
読込
ファイルパスとシート番号を指定して data.frame
として読み込みます。
df <- read.xlsx(path, sheet = 1)
引数は色々あるので、必要に応じて ?read.xlsx
で参照すると良いでしょう。
例えば、1列目と1行目にそれぞれ特殊記号を含むような項目名の付いた正方行列データの場合は以下のようにすると、後の処理が楽になるかもです。
df <- read.xlsx(path, sheet = 1, check.names = F, rowNames = T)
書出
ワークブックオブジェクトを作成し、シートを追加し、その上にデータを設定していくイメージです。
openxlsx
ではセルやヘッダなどのスタイルを指定することもできますが、特に飾ったりしたくない場合は以下のような方法で十分かと思います。
wb <- createWorkbook()
addWorksheet(wb, 'シート名1')
addWorksheet(wb, 'シート名2')
# withFilter = T の時は各列に Excel のフィルタが付きます。
writeData(wb, sheet = 'シート名1', x = df1, withFilter=F)
writeData(wb, sheet = 'シート名2', x = df2, withFilter=F)
# フォント指定をしない場合、Calibri が適用されます。
# "MS Pゴシック"や"MS Pゴシック"を指定すると、xlsx ファイルが壊れました。
modifyBaseFont(wb, fontSize = 11, fontColour = "#000000", fontName = "MS PGothic")
# 上書きを許可しない場合、overwrite = F とする。
saveWorkbook(wb, path, overwrite = T)
感想
思ったより簡単に xlsx を扱うことができました。
今まで xlsx データを扱う際には一度各シートを csv に変換する手間がありましたが、そのまま読み書きできるようになれば、単純になりますね。
大きなサイズの csv を扱う場合にも、 xlsx では内部で圧縮されているので有利な気がします。
課題
フォント指定で日本語フォントを指定する方法がよくわかっていません。ソースコードを UTF-8 で書いてるのが良くないのかもしれません。
参考資料
- 読込みだけなら hadley/readxl が良さそう。
- openxlsx は日時データの扱いに注意が必要とのこと。