212  Openxlsx:Excelへの出力2

library(tidyverse)
library(openxlsx)

それでは、もととなるエクセルファイルは、template.xlsxという名前のファイルでです。

このエクセルファイルの

B3:H7 B10:H14 B17:H21

この範囲にデータを書き込んでみましょう。

dat1 <- tibble(
  a=rnorm(4),
  b=rnorm(4),
  c=rnorm(4),
  d=rnorm(4),
  e=rnorm(4),
  f=rnorm(4),
  g=rnorm(4)
)

dat2 <- tibble(
  a=rgamma(4,1,1),
  b=rgamma(4,1,1),
  c=rgamma(4,1,1),
  d=rgamma(4,1,1),
  e=rgamma(4,1,1),
  f=rgamma(4,1,1),
  g=rgamma(4,1,1)
)

dat3 <- tibble(
  a=rpois(4,4),
  b=rpois(4,4),
  c=rpois(4,4),
  d=rpois(4,4),
  e=rpois(4,4),
  f=rpois(4,4),
  g=rpois(4,4)
)

dat1
# A tibble: 4 × 7
       a      b      c       d      e      f      g
   <dbl>  <dbl>  <dbl>   <dbl>  <dbl>  <dbl>  <dbl>
1  0.542  2.30  -0.865 -1.21   -0.262  0.629  0.482
2  0.156  1.49   1.77   0.875  -1.06  -1.28  -1.59 
3  2.24  -0.601 -0.550 -1.68    0.153 -0.140 -0.667
4 -0.555  2.50   2.06  -0.0820  0.109  1.83  -0.120
dat2
# A tibble: 4 × 7
        a     b      c     d     e      f     g
    <dbl> <dbl>  <dbl> <dbl> <dbl>  <dbl> <dbl>
1 0.634   0.995 1.13   0.885 1.05  0.245  0.990
2 0.00720 0.218 0.612  0.101 0.146 0.192  1.28 
3 1.13    0.358 0.0592 0.499 2.58  0.0282 4.54 
4 0.644   0.515 1.27   0.155 1.33  0.869  1.33 
dat3
# A tibble: 4 × 7
      a     b     c     d     e     f     g
  <int> <int> <int> <int> <int> <int> <int>
1     3     6     6     6     5     2     3
2     2     2     6     4     6     2     4
3     2     4     4     2     2     3     4
4     5     5     2     6     5     4     3

こんなデータとなります。

それで、まずは、tempate.xlsxをRに読み込みます

wb <- openxlsx::loadWorkbook("template.xlsx")

dat1を読み込んだwbのB3:H7の範囲に書き込みます

openxlsx::writeData(
  wb = wb,
  sheet = "res",
  x = dat1,
  startCol = 2,
  startRow = 3
)

dat2を読み込んだwbのB10:H14の範囲に書き込みます

openxlsx::writeData(
  wb = wb,
  sheet = "res",
  x = dat1,
  startCol =  2,
  startRow = 10
)

dat3を読み込んだwbのB17:H21の範囲に書き込みます

openxlsx::writeData(
  wb = wb,
  sheet = "res",
  x = dat3,
  startCol =  2,
  startRow = 17
)

保存します

openxlsx::saveWorkbook(wb,"out2.xlsx",overwrite=TRUE)

いかがでしょうか?template.xlsxの内容にデータを付け足すことができていますね?

この方法を利用すれば、エクセルファイルのデザインをすべてプログラム的に書くようなことをしなくてすむので効率的です。

ただし、この方法、元となるエクセルファイル次第ではうまく読み込めないこともあるため、できればラッキーくらいの気持ちでよいかもしれません。

(実務で利用する場合は、個人的には、RからPythonのエクセルファイルを加工するライブラリを呼び出して、それで

という形で対応することが多いです。