1 データ

次のデータフレームのデータを用いて説明する。

d1 <- data.frame(name = c('太郎', '花子'), age = c(18, 19))
d1
##   name age
## 1 太郎  18
## 2 花子  19

2 ワークブックオブジェクトの作成

「asTable = TRUE」のオプションを付けるとExcelの表形式フォーマットを 適用することができる。表スタイルの設定は「tableStyle」オプションで行う。
設定可能な表スタイルの一覧は最後にある【付録】の章を参照のこと。

library(openxlsx)

wb <- buildWorkbook(d1, asTable = TRUE, tableStyle = 'TableStyleLight8')

【注意】
「Sheet 1」と言う名称でワークシートが作成される。 openxlsxパッケージライブラリの仕様でSheetと1の間に半角スペースが入る。

3 ワークブックRオブジェクトの保存

「saveWorkbook」関数で編集したワークブックRオブジェクト(wb)を保存する。

# 新規作成するExcelファイル(ワークブック)のファイルパス
FILE <- 'd1.xlsx'

saveWorkbook(wb, file = FILE, overwrite = TRUE)

次のようなExcelファイル(ワークブック)が作成される。 なお,ファイルが開かれていると「Permission denied」エラーが出て作成できない。

d1.xlsx
d1.xlsx

4 ワークブックを開く

「openXL」関数でExcelファイル(ワークブック)を コマンドラインから開くことができる。

#openXL(FILE)

5 ワークシートの追加

「loadWorkbook」関数を使って既存のExcelファイル(ワークブック) をRワークブックオブジェクトとしてロードし, 「addWorksheet」関数でワークシートを追加する。

wb <- loadWorkbook(FILE)
addWorksheet(wb, sheetName = 'Sheet 2')

6 ワークシートへのデータの書き込み

「writeDate」関数でワークシートに, Rオブジェクト(data.frame/matrix)の内容を書き込む。
なお,表形式フォーマットを利用したい場合は,「writeDataTable」を利用する。

x <- 1:3 # 数列ベクトル

writeData(wb, sheet = 'Sheet 2', x = x)

# 数式を追加する場合
writeFormula(wb, sheet = 'Sheet 2',
             x = "SUM(A1:A3)", 
             startRow = 4,
             startCol = 1)
 
saveWorkbook(wb, file = FILE, overwrite = TRUE)

次のようにExcelファイル(ワークブック)に新しいワークシート「Sheet 2」 が追加される。

d.xlsx
d.xlsx

7 ワークシートの読み込み

「read.xlsx」関数でワークシートのテーブルをRのdata.frameに 読み込むことができる。

# Excelファイルに含まれるシート名を表示
getSheetNames(FILE)
## [1] "Sheet 1" "Sheet 2"
ws1 <- read.xlsx(FILE, sheet = 'Sheet 1')
ws1
##   name age
## 1 太郎  18
## 2 花子  19
ws2 <- read.xlsx(FILE, sheet = 2) # シート番号でも指定できる。
ws2
##   1
## 1 2
## 2 3

8 R画像のExcel挿入

格子線なし(gridLines = FALSE)でワークシートを追加し、 printされた画像を「insertPlot」関数で挿入する。

【注意】 原因不明だが、表挿入したシートに画像は追記できない。逆順の場合は可能。

addWorksheet(wb, sheetName = 'Sheet 3', gridLines = FALSE)

p1 <- barplot(height = d1$age, names.arg = d1$name)

print(p1)
##      [,1]
## [1,]  0.7
## [2,]  1.9
insertPlot(wb, sheet = 'Sheet 3',
           width = 10, height = 10,
           units = "cm")

writeDataTable(wb, sheet = 'Sheet 3', x = d1, 
               tableStyle = 'TableStyleLight8', startCol = 6)

saveWorkbook(wb, file = FILE, overwrite = TRUE)

openXL(FILE)

9 【付録】Excel表フォーマットスタイル一覧

Excel表フォーマットスタイル一覧については, 次のコードにより生成されるExcelファイル「tableStylesGallery.xlsx」を参照のこと。

xlsx <- createWorkbook(paste0("tableStylesGallery.xlsx"))

addWorksheet(xlsx, "Style Samples")

for (i in 1:21)
{
  writeDataTable(xlsx, tableStyle = paste0("TableStyleLight", i), 
                 startRow = 1, startCol = i * 3 - 2, sheet = 1, 
                 x = data.frame(Style = paste0("TableStyleLight", i)))
}

for (i in 1:28)
{
  writeDataTable(xlsx, tableStyle = paste0("TableStyleMedium", i),
                 startRow = 4, startCol = i * 3 - 2, sheet = 1, 
                 x = data.frame(Style = paste0("TableStyleMedium", i)))
}

for (i in 1:11)
{
  writeDataTable(xlsx, tableStyle = paste0("TableStyleDark", i),
                 startRow = 7, startCol = i * 3 - 2, sheet = 1, 
                 x = data.frame(Style = paste0("TableStyleDark", i)))
}

saveWorkbook(xlsx, file = paste0("tableStylesGallery.xlsx"),
             overwrite = TRUE)
tableStylesGallery.xlsx
tableStylesGallery.xlsx

10 演習課題

次のデータを読込みヒストグラムを作成し, グラフをExcelワークシート上に表示させよ。

library(DT)
d <- read.csv('https://stats.dip.jp/01_ds/data/heights100.csv')
datatable(d)