Rで解析:コマンドをパイプでつなげてxlsxファイルを操作!!「openxlsx2」パッケージ

Rの解析に役に立つ記事

xlsxファイルの操作に便利な「openxlsx」パッケージをパイプコマンドだけでなく、チェインコマンドも利用可能に改良した「openxlsx2」パッケージの紹介です。png画像を取り込み、ピクセルアートを作成する例も紹介します。エクセルやOpen Office Calcで編集可能なファイルの作成が可能です。

一気にコマンドの処理が可能となったので、思考の中断もなく大変便利になったと思います。そして、本パッケージを上手に利用するコツは「data.frame」などのデータと「Workbook」オブジェクトの使い分けを意識することかなと考えます。

また、シートへのデータ書き込み方法は、「そのまま」、「テーブル形式」、「ピポットテーブル形式」で可能なコマンドが収録されています。

パッケージバージョンは1.0.0。実行コマンドはR version 4.3.1で確認しています。

スポンサーリンク
スポンサーリンク

パッケージのインストールと読み込み

下記、コマンドを実行してください。そうしないと、紹介コマンドが確認できません。

# パッケージのインストール
install.packages("openxlsx2")

# openxlsx2パッケージの読み込み
library("openxlsx2")

参考_パイプコマンドで処理

非常に簡潔に記述することが可能です。各コマンドは実行コマンドで紹介しています。

# tidyverseパッケージの読み込み
# tidyverseパッケージがなければインストール
if(!require("tidyverse", quietly = TRUE)){
  install.packages("tidyverse");require("tidyverse")
}

# ワークブックの作成
wb_workbook() %>%
  # ワークシートを追加
  wb_add_worksheet(sheet = "テスト") %>%
  # ワークシートにデータを書き込む
  wb_add_data(sheet = 1, x = iris, with_filter = TRUE) %>%
  # ワークシートにテーブルでデータを書き込む
  # ワークシート名でも指定が可能
  wb_add_data_table(sheet = "テスト", x = iris, start_col = 7, 
                    table_style = "TableStyleLight12") %>%
  # ピボットテーブルを追加
  wb_add_pivot_table(sheet =  next_sheet(),
                     x = wb_data(., sheet = 1, dims = "G1:K151"),
                     dims = "A4",
                     filter = "Species",
                     rows = "Petal.Width",
                     data = "Petal.Length",
                     fun = "AVERAGE") %>%
  # 確認
  wb_open()
###

実行コマンド

詳細はコメント、パッケージのヘルプを確認してください。

xlsxファイルの読み込み

xlsxファイルの読み込みは「wb_to_df」コマンドを使用します。本コマンドでは単純にxlsxファイルからデータを取得するだけでなく、オプションの使用で「非表示列を除外」、「定義した名前のデータ」、「数式」、「セル結合部分を先頭値で埋める」などの条件でデータを取得可能です。

また、xlsxファイルをWorkbookオブジェクトで読み込む場合は「wb_load」コマンドを使用します。

#######################
### xlsxファイルの読み込み
#######################
### データフレームとして読み込む:wb_to_dfコマンド
# xlsxファイルを指定:fileオプション

## 行に関するオプション
# 読み込み開始行を指定:start_rowオプション
# 指定行の読み込み:rowsオプション
# 行名を表示:row_namesオプション;TRUE/FALSE
# 空白行の読み込み設定:skip_empty_rowsオプション;TRUE/FALSE
# 非表示行の読み込み設定:skip_hidden_rowsオプション;TRUE/FALSE

## 列に関するオプション
# 読み込み開始列を指定:start_colオプション
# 指定列の読み込み:colsオプション
# 列名を表示:col_namesオプション;TRUE/FALSE
# 空白列の読み込み設定:skip_empty_colsオプション;TRUE/FALSE
# 非表示列の読み込み設定:skip_hidden_colsオプション;TRUE/FALSE

## その他読み込みオプション
# 読み込むシートを指定:sheetオプション
# 日データの数値化:detect_datesオプション;TRUE/FALSE
# 文字型欠損値の指定:na.stringオプション;文字で指定
# 数字型欠損値の指定:na.numbersオプション;数字で指定
# セル結合データを指定:fill_merged_cellsオプション;TRUEで同じデータ
# 読み込み範囲を指定:dimsオプション
# 数式を取得:show_formulaオプション;TRUE/FALSE
# FALSEでデータをcharacter classで取得:convertオプション
# 列のデータ形式を指定:typesオプション;"列名" = 形式を以下数値で指定
# 0:character,1:numeric,2:date,3:datetime,4:logical;取得全データの指定が必要
# 定義した名前でデータを取得:named_regionオプション
# データの属性を取得する:keep_attributes;TRUE/FALSE
###
# 単純に読み込み
wb_to_df(file = Test_Xlsx)

# 非表示列を除外;version 1.0は機能しない?
#wb_to_df(Test_Xlsx, skip_hidden_cols = TRUE)

# 定義した名前のデータを取得:named_regionオプション
wb_to_df(file = Test_Xlsx, named_region = "からだにいいもの")

# 数式を取得:show_formulaオプション
wb_to_df(file = Test_Xlsx, show_formula = TRUE)

# セル結合部分を先頭値で埋めるて取得:fill_merged_cellsオプション
wb_to_df(file = Test_Xlsx, fill_merged_cells = TRUE)
###

### xlsxファイルをWorkbookオブジェクトとして読み込む:wb_loadコマンド
# xlsxファイルを指定:fileオプション
# シートを指定:sheetオプション
###
wb_load(file = Test_Xlsx, sheet, data_only = FALSE)
###
#######################

xlsx形式の保存とプレビュー

data.frameやlistからのxlsxファイルの保存は「write_xlsx」コマンド。Workbookオブジェクトからのxlsxファイルの保存は「wb_save」コマンド。保存せずにエクセルやOpen Office Calcでのプレビューは「wb_open」コマンドです。

#######################
### xlsxファイルを出力:write_xlsxコマンド
#######################
# データを指定:xオプション
# 指定データはdata.frameだけでなくlistの指定が可能です
# 保存ファイル名を指定:fileオプション
##
write_xlsx(x = iris, file = "テスト.xlsx")
###

#######################
### Workbookオブジェクトをxlsxで保存:wb_saveコマンド
#######################
# ファイル名を指定:fileオプション
###
wb_save(wb = wd_object, file = "Test.xlsx")
###

#######################
### Workbookオブジェクトのプレビュー:wb_openコマンド
#######################
# Workbookオブジェクトを指定:xオプション
# ファイル名を指定:fileオプション
##
wb_open(wb = wd_object)
###

ワークブックの情報取得のコマンド

各種情報取得のコマンドです。wbオプションにはwbWorkbookオブジェクトを設定します。

#######################
### ワークブックの情報取得のコマンド
### wbオプションにはwbWorkbookオブジェクトを設定します
#######################
### ベースフォントを取得:wb_get_base_fontコマンド
wb_get_base_font(wb = wd_object)
###

### 作成者を取得:wb_get_creatorsコマンド
wb_get_creators(wb = wd_object)
###

### シートの順番:wb_get_orderコマンド
wb_get_order(wb = wd_object)
###

### シート名を取得:wb_get_sheet_namesコマンド
wb_get_sheet_names(wb = wd_object)
###

### 選択状況を取得:wb_get_selectedコマンド
wb_get_selected(wb = wd_object)
###

### シート表示状態を取得:wb_get_sheet_visibilityコマンド
wb_get_sheet_visibility(wb = wd_object)
###

### 定義された名前の場所などを取得:wb_get_named_regionsコマンド
wb_get_named_regions(lwb = wd_object)
###
#######################

ワークブックへワークシートを作成しxlsxで保存する

外部からxlsxを読み込むのではなく、Rで新規にワークブックを作成し、ワークシートを追加するコマンドグループです。順番に実行することで新規xlsxファイルを保存できるように、各コマンドの結果はNew_wbに保存しています。

データを、そのまま、テーブル、ピポットテーブルで書き込むコマンドが収録されています。テーブルのスタイルは60種類あります。スタイルは次のセクションをご覧ください。

#######################
### ワークブックへワークシートを作成しxlsxで保存する
#######################
### ワークブックの作成:wb_workbookコマンド
# 作成者の設定:creatorオプション
# タイトルプロパティの設定:titleオプション
# 件名の設定:subjectオプション
# 分類プロパティの設定:categoryオプション
# 作成日時の設定:datetime_createdオプション
# テーマを指定:themeオプション;以下が設定可能
# "Atlas","Badge","Berlin","Celestial","Crop","Depth",
# "Droplet","Facet","Feathered","Gallery","Headlines","Integral",
# "Ion","Ion Boardroom","Madison","Main Event","Mesh","Office Theme",
# "Old Office Theme","Organic","Parallax","Parcel","Retrospect","Savon","Slice",
# "Vapor Trail","View","Wisp","Wood Type"
###
New_wb <- wb_workbook(creator = NULL, title = NULL,
                      subject = NULL, category = NULL,
                      datetime_created = Sys.time(),
                      theme = NULL)
###

### ワークシートの追加:wb_add_worksheetコマンド
# ワークブックを指定:wbオプション
# 作成シート名:sheetオプション
# 目盛り線の表示:grid_linesオプション;TRUE/FALSE
# タブ色:tab_colourオプション;初期値:NULL
# ズーム設定:zoomオプション;10:400の範囲
# シートの表示設定:visibleオプション;以下が設定可能
# "true","false","hidden","visible","veryhidden"
### 下記ヘッダー,フッターで使用可能なショートコード###
#&[Page]:ページ番号,&[Pages]:ページ数,
#&[Date]:現在の日付,&[Time]:現在の時刻,
#&[Path]:ファイルのパス,&[File]:ファイル名,
#&[Tab]:シート名
###
# ヘッダー設定:headerオプション;c(左側,中央部,右側)
# フッター設定:footerオプション;c(左側,中央部,右側)
# 偶数ページのヘッダー設定:even_headerオプション;c(左側,中央部,右側)
# 偶数ページのフッター設定:even_footerオプション;c(左側,中央部,右側)
# 先頭ぺージヘッダー設定:first_headerオプション;c(左側,中央部,右側)
# 先頭ぺージフッター設定:first_footerオプション;c(左側,中央部,右側)
# 表示設定:visibleオプション;TRUE/FALSE:シートが一つの時はFALSE不可
# 印刷の縦横方向:orientationオプション;"portrait"/"landscape"
# 印刷解像度の指定:hdpi,vdpiオプション
# 印刷サイズ:paperSizeオプション;
### 下記参照
# 8:A3,9:A4,11:A5,12:B4,13:B5,
# 67:A3横,55:A4横,61:A5横,その他サイズは?wb_page_setup()で確認
###
New_wb <- wb_add_worksheet(wb = New_wb, sheet = "テスト",
                           grid_lines = TRUE, row_col_headers = TRUE,
                           tab_color = NULL, zoom = 100,
                           header = NULL, footer = NULL,
                           odd_header = NULL, odd_footer = NULL,
                           even_header = NULL, even_footer = NULL,
                           first_header = NULL, first_footer = NULL,
                           visible = "true", #has_drawing = FALSE,
                           paper_size = getOption("openxlsx2.paperSize", default = 9),
                           orientation = getOption("openxlsx2.orientation", default = "portrait"),
                           hdpi = getOption("openxlsx2.hdpi", default = getOption("openxlsx2.dpi", default = 300)),
                           vdpi = getOption("openxlsx2.vdpi", default = getOption("openxlsx2.dpi", default = 300)))
###

### ワークシートにデータを書き込む:wb_add_dataコマンド
# ワークブックを指定:wbオプション
# 書き込み対象シート名:sheetオプション;名前/インデックス番号
# 書き込みデータ:xオプション
# 書き込み開始列を指定:start_colオプション
# 書き込み開始行を指定:start_rowオプション
# 書き込みを範囲で指定:dimオプション;初期値:wb_dims(start_row, start_col)
# もしくは"A1","A1:B2","A:B"で指定
# データ範囲に名前を付ける:nameオプション
# フィルタを設定:with_filterオプション;TRUE/FALSE
###
New_wb <- wb_add_data(wb = New_wb, sheet = 1, x = iris,
                      start_col = 1, start_row = 1,
                      dims = wb_dims(1, 1),
                      name = NULL, with_filter = TRUE) 
###

### ワークシートにデータをテーブルで書き込む:wb_add_data_tableコマンド
# ワークブックを指定:wbオプション
# 書き込み対象シート名:sheetオプション;名前/インデックス番号
# 書き込みデータ:xオプション
# 書き込み開始行を指定:start_rowオプション
# 書き込み開始列を指定:start_colオプション
# 書き込みを範囲で指定:dimオプション;初期値:wb_dims(start_row, start_col)
# フィルタを設定:with_filterオプション;TRUE/FALSE
# テーブル名を設定:table_nameオプション
# テーブルテーマを指定:table_styleオプション;記事内テーブルテーマを参照
###
New_wb <- wb_add_data_table(wb = New_wb, sheet = 1, x = iris,
                            start_col = 7, start_row = 1,
                            dims = wb_dims(1, 7),
                            with_filter = TRUE,
                            table_style = "TableStyleLight12")
###

### ワークシートにデータをピボットテーブルで書き込む:wb_add_pivot_tableコマンド
# ワークブックを指定:wbオプション
# 書き込み対象シート名:sheetオプション;初期値はシートを追加で書き込む,next_sheet()
# 書き込みデータ:xオプション;wb_data classで指定する
# wb_dataコマンド;wbオプション;ワークブッククラスを指定, sheetオプション, dimsオプション;データ範囲
# 書き込み位置を指定:dimsオプション
# ピボット:フィルタデータを設定:filterオプション;未設定は記述しない
# ピボット:行データを設定:rowsオプション;未設定は記述しない
# ピボット:列データを設定:colsオプション;未設定は記述しない
# ピボット:Σ値データを設定:dataオプション;未設定は記述しない
# ピボット:集計方法を設定:funオプション;以下の設定が可能
# AVERAGE,COUNT,COUNTA,MAX,MIN,PRODUCT,STDEV,STDEVP,SUM,VAR,VARP
New_wb <- wb_add_pivot_table(wb = New_wb, sheet =  next_sheet(),
                             x = wb_data(New_wb, sheet = 1, dims = "G1:K151"),
                             dims = "A4",
                             filter = "Species",
                             rows = "Petal.Width",
                             data = "Petal.Length",
                             fun = "AVERAGE")
###

#######################
### Workbookオブジェクトをxlsxで保存:wb_saveコマンド
#######################
# ファイル名を指定:fileオプション
###
wb_save(wb = New_wb, file = "Test.xlsx")
###

参考_テーブルのスタイル60種類を紹介

下記コマンドを実行すると紹介画像のxlsxファイルを取得できます。

###参考####################################
# テーブルスタイル名60種類
TableStyle <- c("TableStyleLight1","TableStyleLight2","TableStyleLight3","TableStyleLight4",
                "TableStyleLight5","TableStyleLight6","TableStyleLight7","TableStyleLight8",
                "TableStyleLight9","TableStyleLight10","TableStyleLight11","TableStyleLight12",
                "TableStyleLight13","TableStyleLight14","TableStyleLight15","TableStyleLight16",
                "TableStyleLight17","TableStyleLight18","TableStyleLight19","TableStyleLight20",
                "TableStyleLight21","TableStyleMedium1","TableStyleMedium2","TableStyleMedium3",
                "TableStyleMedium4","TableStyleMedium5","TableStyleMedium6","TableStyleMedium7",
                "TableStyleMedium8","TableStyleMedium9","TableStyleMedium10","TableStyleMedium11",
                "TableStyleMedium12","TableStyleMedium13","TableStyleMedium14","TableStyleMedium15",
                "TableStyleMedium16","TableStyleMedium17","TableStyleMedium18","TableStyleMedium19",
                "TableStyleMedium20","TableStyleMedium21","TableStyleMedium22","TableStyleMedium23",
                "TableStyleMedium24","TableStyleMedium25","TableStyleMedium26","TableStyleMedium27",
                "TableStyleMedium28","TableStyleDark1","TableStyleDark2","TableStyleDark3",
                "TableStyleDark4","TableStyleDark5","TableStyleDark6","TableStyleDark7",
                "TableStyleDark8","TableStyleDark9","TableStyleDark10","TableStyleDark11") 

# 繰り返し処理の準備
RowNO <- rep(c(1:10), each = 10)
ColNo <- rep(seq(1, 28, by = 3), time = 10)
iris_data <- as.data.frame(iris[1:2,1])

# Workbook objectの作成
wb_workbook() %>%
  wb_add_worksheet(sheet = "テスト") -> wb

# 繰り返し処理
for(i in seq(TableStyle)){
  #テーブルスタイル名
  colnames(iris_data) <- TableStyle[i]

  #ワークシートに書き込み
  wb %>%
  wb_add_data_table(sheet = 1, as.data.frame(iris_data),
                    dims = wb_dims(ColNo[i], RowNO[i]), 
                    table_style = TableStyle[i]) -> wb
}

# xlsxで保存
wb_save(wb, file = "テーブルスタイル.xlsx")
####################################

ワークシートの体裁を調整するコマンド

ワークシートの体裁を調整するコマンドグループです。罫線、塗色、セル書式、ウィンドウ枠の固定、セルの結合、セルにコメント、データの名前の定義、列幅などの調整の紹介です。

順番に実行することで新規xlsxファイルを保存できるように、各コマンドの結果はNew_wbに保存しています。

#######################
### ワークシートの体裁を調整するコマンド
#######################
### 理解しやすいように新規にワークブックを作成しシートを追加
New_wb <- 
  # ワークブックの作成
  wb_workbook() %>%
  # ワークシートを追加
  wb_add_worksheet(sheet = "テスト") %>%
  # ワークシートにデータを書き込む
  wb_add_data(sheet = "テスト", dims = "B2", x = iris, with_filter = TRUE)
# wb_open(New_wb)
###
  
### 色を設定するためにwbColour objectを作成:wb_colorコマンド
## 以下から適切なオプションを使用する
## 体裁を整える,wb_add_xxxxxxxコマンド内に直接設定も可能です
# R内での色名で指定:nameオプション
# 自動設定:autoオプション;TRUEで適応
# indexed値で指定:indexedオプション
# hex値[ARGB:透明赤緑青;16進数]で指定:hexオプション
# テーマで指定:themeオプション
# 濃淡を指定:tintオプション;-1:1の範囲
###
Test_col <- wb_color(hex = "807fffd4", name = NULL,
                     auto = NULL, indexed = NULL,
                     them = NULL, tint = NULL)
# wb_open(New_wb)
###

### セルに罫線を設定する:wb_add_borderコマンド
# ワークブックを指定:wbオプション
# 書き込み対象シート:sheetオプション;初期値:current_sheet()
# 範囲を指定:dimsオプション;ex:"A1","A1:C2"
# 色を指定:bottom_color,left_color,right_color,top_colorオプション
# 罫線種類を指定:bottom_border,left_border,right_border,top_borderオプション
## 以下から選択が可能
# "thin","thick","slantDashDot","none","mediumDashed",
# "mediumDashDot","medium","hair","double","dotted",
# "dashed", "dashedDotDot", "dashDot"
##
# エリアで指定した場合に内側の罫線を設定:
# 垂直:inner_hgridオプション,水平:inner_vgridオプション
# 垂直色:inner_hcolorオプション,水平色:inner_vgridオプション
###
New_wb <- wb_add_border(wb = New_wb, sheet = "テスト",
                        dims = "B2:F152",
                        bottom_color = Test_col,
                        left_color = wb_color(hex = "FF994489"),
                        right_color = wb_color(hex = "FF133457"),
                        top_color = Test_col,
                        bottom_border = "medium", left_border = "medium",
                        right_border = "medium", top_border = "medium",
                        inner_hgrid = "double", inner_vgrid = "dotted",
                        inner_hcolor = wb_color(name = "violet"),
                        inner_vcolor = wb_color(name = "red"))
# wb_open(New_wb)
### 

### セルに塗色を設定する:wb_add_fillコマンド
## wb_add_borderコマンドと共通は除く
# パターンの種類を指定:patternオプション;
## 以下から選択が可能
# "solid","mediumGray","darkGray","lightGray","darkHorizontal",
# "darkVertical","darkDown","darkUp","darkGrid","darkTrellis",
# "lightHorizontal","lightVertical","lightDown","lightUp", 
# "lightGrid","lightTrellis","gray125","gray0625"
##
# グラデーションで指定:gradient_fillオプション
## 設定例,xmlの記述で指定する
## 記述参考:https://learn.microsoft.com/ja-jp/dotnet/api/documentformat.openxml.spreadsheet.gradientfill?view=openxml-2.8.1
# '<gradientFill degree="90">
# <stop position="0"><color rgb="FF92D050"/></stop>
# <stop position="1"><color rgb="FF0070C0"/></stop>
# </gradientFill>'
##
###
# 単色で塗りつぶし
New_wb <- wb_add_fill(wb = New_wb, sheet = "テスト",
                      dims = "B2:F15", color = wb_color("#52BACE"))
# 中央からグラデーションで塗りつぶし
New_wb <- wb_add_fill(wb = New_wb, sheet = "テスト",
                      dims = "B15:F20",
                      gradient_fill = '<gradientFill type="path" left="0.2" right="0.2" top="0.5" bottom="0.5"> 
                      <stop position="0"><color rgb="757171"/></stop>
                      <stop position="1"><color rgb="4472C4"/></stop>
                      </gradientFill>')
# wb_open(New_wb)
###

### セル書式を設定する:wb_add_cell_styleコマンド
## wb_add_borderコマンドと共通は除く,主要オプションのみ
# 書式を設定する項目を指定する:apply_xxxxxオプション,その他
## 必要に応じてTRUEを指定する?環境によってはTRUEが必要?
# apply_alignment,apply_border,apply_fill,apply_font,
# apply_number_format,apply_protection
##
## 文字関係
# 横位置:horizontalオプション;"left","center","right"
# 縦位置:verticalオプション;"top","center","bottom"
# 折り返して全体を表示:wrap_textオプション;"1"/"0"
# 縮小して全体を表示:shrink_to_fitオプション;TRUE/FALSE
# 文字の回転:text_rotationオプション
# インデント:indentオプション;ver.1.0では動作が不安定?
### 
# 表示形式:num_fmt_idオプション
##基準参考:https://learn.microsoft.com/ja-jp/dotnet/api/documentformat.openxml.spreadsheet.numberingformat?view=openxml-2.8.1
###
New_wb <- wb_add_cell_style(wb = New_wb, sheet = "テスト",
                            dims = "B2:F15", apply_alignment = TRUE,
                            horizontal = "center", vertical = "center",
                            wrap_text = "1", shrink_to_fit = TRUE,
                            text_rotation = "0", indent = 2,
                            apply_number_format = TRUE, num_fmt_id = "10")
# wb_open(New_wb)
###

### セル書式にユーザー定義を設定する:wb_add_numfmtコマンド
#ユーザー定義の指定:numfmtオプション;¥等の特殊文字は前に\\\をつける
###
New_wb <- wb_add_numfmt(wb = New_wb, sheet = "テスト",
                        dims = "B15:F20", numfmt = "\\\¥ #.0")
# wb_open(New_wb)
###

### ウィンドウ枠の固定:wb_freeze_paneコマンド
# 先頭行:first_active_rowオプション
# 先頭列:first_active_colオプション
###
New_wb <- wb_freeze_pane(wb = New_wb, sheet = "テスト",
                         first_active_row = 3,
                         first_active_col = NULL)
# wb_open(New_wb)
###

### セルの結合:wb_merge_cellsコマンド
##セルの結合解除はwb_unmerge_cellsコマンド
# 結合範囲:dimオプション
###
# セルを結合後に文字を追加すると設定が解除されるので注意
# 初めにB1に"セルを結合"を代入
New_wb <- wb_add_data(wb = New_wb, sheet = "テスト",
                      # 日本語等はエンコードをutf8にする
                      x = iconv("セルを結合", from = "shift-jis", to = "utf8"), 
                      dims = "B1") %>%
  # セルの結合
  wb_merge_cells(sheet = "テスト", dims = "B1:F1") 
#wb_open(New_wb) 
###
  
### セルにコメントを付与:wb_add_commentコマンド  
# コメント内容:commentオプション
###
New_wb <- wb_add_comment(wb = New_wb, sheet = "テスト",
                         comment = "セル結合", dims = "B1")
#wb_open(New_wb) 
###

### データの名前の定義:wb_add_named_regionコマンド
# 名前を定義する:nameオプション
###
New_wb <- wb_add_named_region(wb = New_wb, sheet = "テスト",
                              dims = "B3:F10", 
                              name = iconv("からだにいいもの",
                                           from = "shift-jis",
                                           to = "utf8"))
#wb_open(New_wb)
###

### 列幅等の調整:wb_set_col_widthsコマンド
# 列幅:widthsオプション
# 列の表示設定:hiddenオプション;TRUE/FALSE
###
New_wb <- wb_set_col_widths(wb = New_wb, sheet = "テスト",
                            cols = c(2:6), widths = 19)
# wb_open(New_wb)
###
#######################

# 確認
wb_open(New_wb)

ピクセルアートを作成する例

「imager」、「tidyverse」、「png」パッケージを利用します。下記を実行すると以下のようなエクセルファイルを作成できます。「png」パッケージに収録のpngファイルで確認しています。jpeg画像は画像チャネルのコマンド部分を変更する必要があります。

###ピクセルアート例#####
# imagerパッケージの読み込み
# timagerパッケージがなければインストール
if(!require("imager", quietly = TRUE)){
  install.packages("imager");require("imager")
}
# tidyverseパッケージの読み込み
# tidyverseパッケージがなければインストール
if(!require("tidyverse", quietly = TRUE)){
  install.packages("tidyverse");require("tidyverse")
}
# pngパッケージの読み込み
# pngパッケージがなければインストール
if(!require("png", quietly = TRUE)){
  install.packages("png");require("png")
}

# Rのロゴを読み込み
logo <- load.image(system.file("img", "Rlogo.png", package="png"))

# 画像をリサイズ
#img <- image_scale(logo, "30x30")
img <- resize(logo, 30, 30)

# 画像の幅と高さの情報を取得
img_width <- dim(img)[1]
img_height <- dim(img)[2]

# 画像からhex値を取得する
plot_data <- img %>%
  as.data.frame(wide = "c") %>%
  # jpegの場合はc.1, c.2, c.3と設定する
  mutate(hex = rgb(c.4, c.1, c.2, c.3,
                   maxColorValue = 1)) %>%
  mutate_all(~str_replace(., pattern = "#00000000", 
                          replacement = "#FFFFFFFF"))

# プロット用のdata.frameを作成  
plot_data <- as.data.frame(matrix(plot_data$hex, ncol = img_width,
                                  nrow = img_height, byrow = TRUE)) 

# データの行列を取得
serect_rows <- seq(1, nrow(plot_data), by = 1)
serect_cols <- seq(1, ncol(plot_data), by = 1)

# 新規にxlsxファイルを作成
wb <- wb_workbook() %>% wb_add_worksheet("R_Logo", zoom = 50)

# データを書き込む
for (i in serect_cols) {
  
  col_no <- i
  
  for (get_row in serect_rows) {
    
    col <- paste0(int2col(i), get_row)
    wb <- wb %>% wb_add_fill(dims = col,
                             color = wb_color(hex = plot_data[get_row, col_no]))
  
    }
}

# 列幅を調整
wb <- wb_set_col_widths(wb = wb, sheet = "R_Logo",
                        cols = serect_cols, widths = 2.5)

# プレビュー
wb_open(wb)

少しでも、あなたの解析が楽になりますように!!

タイトルとURLをコピーしました