本文へスキップ
からだにいいもの

Rのトピックスを中心に『まだ、まだ、知らない、役に立つ情報?』を発信します。

Rで解析:xlsxファイルを操作するなら「openxlsx2」パッケージ

xlsxファイルの操作に便利なパイプコマンドだけでなく、チェインコマンドも利用な「openxlsx2」パッケージの紹介です。エクセル搭載の187種類の図形も利用可能です。

png画像を取り込み、ピクセルアートを作成する例も紹介します。エクセルやOpen Office Calcで編集可能なファイルの作成が可能です。

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

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

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

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

下記、コマンドを実行してください。

# パッケージのインストール
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ファイルの読み込み

xlsxファイルを読み込む「wb_to_df」コマンドの紹介です。

本コマンドでは単純にxlsxファイルからデータを取得するだけでなく、オプションの使用で「非表示列を除外」、「定義した名前のデータ」、「数式」、「セル結合部分を先頭値で埋める」などの条件のデータも取得可能です。これら条件データは「Rで編集後、元のエクセルファイルの体裁で保存」する場合に便利です。

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

なお、コード中の「”Test_Xlsx.xlsx”」は仮のファイル名です。

#######################
### 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.xlsx")

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

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

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

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

xlsx形式の保存とOSで指定している対応ソフトウェアで直接確認

xlsxファイルで保存は2つのコマンドがあります。data.frameやlistを保存する「write_xlsx」コマンド、Workbookオブジェクトから保存する「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 = Test, file = "Test.xlsx")
###

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

ワークブック、シートの情報を取得するコマンド

作成者、シートの名前、並び順、表示状態、選択状況や定義された名前の情報を取得するコマンドの紹介です。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_sheet_namesコマンド
wb_get_sheet_names(wb = wd_object)
###

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

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

### シートの選択状況:wb_get_selectedコマンド
wb_get_selected(wb = wd_object)
###

### 定義された名前の情報を取得:wb_get_named_regionsコマンド
wb_get_named_regions(wb = wd_object)
###

### 定義された名前のを削除:wb_get_named_regionsコマンド
# シートを指定:sheetオプション
# 定義された名前を指定:nameオプション
wb_remove_named_region(wb = wd_object, sheet, name)
###

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

xlsxファイルを読み込むのではなく、Rで新規ワークブックを作成し、ワークシートを追加するコマンドの紹介です。

順番に実行することで、R標準収録の「iris」データを使用して、「テストシートにオリジナルとテーブル書式を設定」、「Sheet 1にピボットテーブル」を作業フォルダにファイル名「Test.xlsx」として保存します。

データを、そのまま、テーブル、ピポットテーブルで書き込むコマンドが収録されています。テーブルのスタイルは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")
####################################

187種類の図形を利用するコマンド

エクセル収録の187種類の図形を利用するコマンドです。「wb_add_drawing」コマンドと「create_shape」コマンドを組み合わせて利用します。187種類の図形は下記コマンドを実行すると作業フォルダに「図形.xlsx」を作成し、エクセルなどでファイル内容をご確認ください。

# 図形:187種類
shapeType <- c("line","lineInv","triangle","rtTriangle","rect",
               "diamond","parallelogram","trapezoid","nonIsoscelesTrapezoid","pentagon",
               "hexagon","heptagon","octagon","decagon","dodecagon","star4","star5","star6",
               "star7","star8","star10","star12","star16","star24","star32","roundRect",
               "round1Rect","round2SameRect","round2DiagRect","snipRoundRect","snip1Rect",
               "snip2SameRect","snip2DiagRect","plaque","ellipse","teardrop","homePlate",
               "chevron","pieWedge","pie","blockArc","donut","noSmoking","rightArrow",
               "leftArrow","upArrow","downArrow","stripedRightArrow","notchedRightArrow",
               "bentUpArrow","leftRightArrow","upDownArrow","leftUpArrow","leftRightUpArrow",
               "quadArrow","leftArrowCallout","rightArrowCallout","upArrowCallout",
               "downArrowCallout","leftRightArrowCallout","upDownArrowCallout",
               "quadArrowCallout","bentArrow","uturnArrow","circularArrow","leftCircularArrow",
               "leftRightCircularArrow","curvedRightArrow","curvedLeftArrow","curvedUpArrow",
               "curvedDownArrow","swooshArrow","cube","can","lightningBolt","heart","sun",
               "moon","smileyFace","irregularSeal1","irregularSeal2","foldedCorner","bevel",
               "frame","halfFrame","corner","diagStripe","chord","arc","leftBracket","rightBracket",
               "leftBrace","rightBrace","bracketPair","bracePair","straightConnector1",
               "bentConnector2","bentConnector3","bentConnector4","bentConnector5","curvedConnector2",
               "curvedConnector3","curvedConnector4","curvedConnector5","callout1","callout2",
               "callout3","accentCallout1","accentCallout2","accentCallout3","borderCallout1",
               "borderCallout2","borderCallout3","accentBorderCallout1","accentBorderCallout2",
               "accentBorderCallout3","wedgeRectCallout","wedgeRoundRectCallout","wedgeEllipseCallout",
               "cloudCallout","cloud","ribbon","ribbon2","ellipseRibbon","ellipseRibbon2",
               "leftRightRibbon","verticalScroll","horizontalScroll","wave","doubleWave","plus",
               "flowChartProcess","flowChartDecision","flowChartInputOutput","flowChartPredefinedProcess",
               "flowChartInternalStorage","flowChartDocument","flowChartMultidocument","flowChartTerminator",
               "flowChartPreparation","flowChartManualInput","flowChartManualOperation","flowChartConnector",
               "flowChartPunchedCard","flowChartPunchedTape","flowChartSummingJunction","flowChartOr",
               "flowChartCollate","flowChartSort","flowChartExtract","flowChartMerge","flowChartOfflineStorage",
               "flowChartOnlineStorage","flowChartMagneticTape","flowChartMagneticDisk","flowChartMagneticDrum",
               "flowChartDisplay","flowChartDelay","flowChartAlternateProcess","flowChartOffpageConnector",
               "actionButtonBlank","actionButtonHome","actionButtonHelp","actionButtonInformation",
               "actionButtonForwardNext","actionButtonBackPrevious","actionButtonEnd","actionButtonBeginning",
               "actionButtonReturn","actionButtonDocument","actionButtonSound","actionButtonMovie",
               "gear6","gear9","funnel","mathPlus","mathMinus","mathMultiply","mathDivide","mathEqual",
               "mathNotEqual","cornerTabs","squareTabs","plaqueTabs","chartX","chartStar","chartPlus")

# 繰り返し処理の準備
RowNO <- 1:187
ColNo <- rep(seq(1, 28, by = 3), time = 10)

# ワークブックを作成
wb_workbook() %>%
  # ワークシートを追加
  wb_add_worksheet(sheet = "テスト") -> wb

for(i in seq(shapeType)){
  #ワークシートに書き込み
  wb %>%
    wb_add_data(sheet = 1, x = shapeType[i],
                dims = paste0("A", i),) %>%
    # ワークシートに図形を描写する:wb_add_drawingコマンド
    wb_add_drawing(xml = 
                     # 図形を描写:create_shapeコマンド
                     create_shape(
                       # 図形を指定
                       shape = shapeType[i],
                       # 図形名を設定
                       name = shapeType[i],
                       # 図形内テキストを設定
                       text = shapeType[i],
                       # テキストの色を設定
                       text_color = wb_color("black"),
                       # 塗りつぶし色を設定
                       fill_color = wb_color("#52BACE"),
                       # 枠線色を設定
                       line_color = wb_color("black")),
                   # 描写位置を指定
                   dims = paste0("C", i, ":D", i)) -> wb
}

# xlsxで保存
wb_save(wb, file = "図形.xlsx")

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

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

なお、多くのコマンドで対象範囲を「dimオプション」で指定します。この場合「enforce = TRUE」とオプションを追記することで「dimオプション」に”D5:J23;B22:D27″などと複数の範囲を指定することが可能です。各範囲は「;」で区切ります。

紹介コマンドを順番に実行することで新規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_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"), 
                      x = "セルを結合", 
                      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パッケージの読み込み
# imagerパッケージがなければインストール
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)

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

スポンサーリンク
Prices and shipping availability may change. Please refer to the product page at time of purchase.
Content displayed on this site is provided by Amazon and may be updated or removed.
Amazon Associate, karada-good earns income through qualifying sales.