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のエクセルファイルを加工するライブラリを呼び出して、それで
- データ加工:R
- エクセル操作:Python
という形で対応することが多いです。