R⇔Excelのデータの入出力についてです。
###前提・実現したいこと
Excel上で作成しているグラフを参照データシート部分だけRで追記して更新したく、
Rで既存のExcelブックを取得して、
R上で処理した結果を既存のシートの指定セルに入力 or 新規ワークシートを作成 をしたいと思っています。
*日次更新のデータをRに持ってきては
グラフ作成&共有用のExcelファイルにCSVをコピペしているのが面倒なので。。。
###発生している問題・エラーメッセージ
①openxlsxパッケージで必要なシートだけdata.frameとして取得
⇒仮想ワークブックを作成して既存のファイルにsaveWorkbookすると、
新しいワークブックとして上書きされてしまう(編集したシートしか残らず、他のシートがなくなる)
⇒こちらの方法はそもそも不適切。
ということで②へ
②同openxlsxパッケージのloadWorkbookで仮想ワークブックとして既存ファイルを読み込む
⇒エンコーディングエラー?
┗openxlsxではfileEncoding引数の指定ができない
※パス名に日本語が含まれていたので
ファイルをデスクトップに置いてみたのですが、
結局同じエラーが出ました
③readxlパッケージで読む
⇒excel_sheetsでは該当シート名は見つかるのになぜか[Error: Couldn't find]と言われる。
※こちらはそもそも読めてないのでそもそもの目的が達成できるかも不明
###ソースコード
R
1>library("openxlsx") 2>library("tcltk") 3 4#ファイルパスの取得(tcltkで指定) 5>XLPath <- paste0(as.character(tkgetOpenFile(title = "エクセルファイルを選択", 6 filetypes = '{"エクセルファイル" {".xlsx" ".xls"}}', 7 initialfile = c("*.xlsx")))) 8 9 10#①直接データフレームを取得して新たに仮想ワークブックを作って元のファイルに上書き 11#動作的には正しく出来ているけど目的と違う 12 13>XLData <- read.xlsx(XLPath, sheet = "sheetname", startRow = 2) 14>class(XLData) 15[1] "data.frame" #取得はできた 16 17#仮想ワークブックの作成(この辺りはどうでもよさそう) 18>WD <- createWorkbook(creator = "hoge") 19>addWorksheet(wb = WD, sheetName = "New_sheet", gridLines = TRUE) 20>writeData(wb = WD, sheet = "New_sheet", x = XLData, startCol = 1, startRow = 2) 21>freezePane(wb = WD, sheet = "New_sheet", 22 firstRow = FALSE, firstCol = FALSE, 23 firstActiveRow = 3, firstActiveCol = 2) 24>setColWidths(wb = WD, sheet = "New_sheet", 25 cols = 4, widths = "auto") 26>openXL(WD) 27>saveWorkbook(wb = repWD, XLPath, overwrite = TRUE) 28 29⇒で、丸々新しいファイルが出来上がる。。。 30 31 32#②の場合 33 34>loadWorkbook(file=XLPath) #元々のワークブックを仮想ワークブックとしてそのまま取得しようとして… 35 36#以下、エラー 37Error in substring(x[ind], so, eo) : 38 invalid multibyte string at '<ef>シ<ad><ef>シウ <ef>シー繧エ繧キ繝<83>繧ッ"/>' 39 40 41#③の場合 42>require(readxl) 43>excel_sheets(XLPath) 44>read_excel(XLPath,sheet = "sheetname") 45 46Error: Couldn't find 'xl/worksheets/sheet5.xml' in '\\・・・・ 47*元々のファイルのシートはSheet5でした 48 sheet引数を5にしても変わらず。 49
###補足情報(言語/FW/ツール等のバージョンなど)
◆環境
・R-3.2.2 64bit
・Rstudio 0.99.879
・windows7
・Default text encoding CP932
◆参照
・Rで解析:セル体裁!大きなデータも大丈夫!エクセル操作の「openxlsx」パッケージ
◆Pythonでは: ↓ イメージとしてはこうしたことがしたいです。そのための②でしたが。。。
・PandasでExcelの読み書き
以上が試行錯誤したところです。
恐れ入りますが標題解決策について、お教えいただけますと幸いです。
(Rというよりプログラム自体初心者で、何か不足している情報などありましたら追記いたしますので、
ご教示の程よろしくお願いいたします…!)
###追記
[16.03.29]
下記によれば、
時刻を文字列にすることが(?)「追記:Windowsではinvalid multibyte errorとなり使えないという情報をいただいた。」
という記載。
⇒日時形式のデータがワークブック内にあることが原因?
⇒そもそも2バイト文字の入ったファイルが開けない?
でも、openxlsxのnewsでは、
バージョン2.4.0の時点で、
BUG FIXES
- Encoding fixed and multi-byte characters now supported.
とあるから、多分日本語自体には対応はしているはず。。。(入っているバージョンは3.0.0でした)
github上のopenxlsx/NEWS
あなたの回答
tips
プレビュー