質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

Q&A

0回答

5039閲覧

R{openxlsx}のEncodingエラー?

mrkhrhs

総合スコア15

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

0グッド

1クリップ

投稿2016/03/28 06:46

編集2016/03/30 07:18

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」パッケージ

・Javaに依存せずにxlsxを読む

◆Pythonでは: ↓ イメージとしてはこうしたことがしたいです。そのための②でしたが。。。
・PandasでExcelの読み書き

以上が試行錯誤したところです。
恐れ入りますが標題解決策について、お教えいただけますと幸いです。

(Rというよりプログラム自体初心者で、何か不足している情報などありましたら追記いたしますので、
ご教示の程よろしくお願いいたします…!)

###追記
[16.03.29]
下記によれば、
時刻を文字列にすることが(?)「追記:Windowsではinvalid multibyte errorとなり使えないという情報をいただいた。」
という記載。
⇒日時形式のデータがワークブック内にあることが原因?
⇒そもそも2バイト文字の入ったファイルが開けない?

RでExcelのデータを読む方法

でも、openxlsxのnewsでは、
バージョン2.4.0の時点で、

BUG FIXES

  • Encoding fixed and multi-byte characters now supported.

とあるから、多分日本語自体には対応はしているはず。。。(入っているバージョンは3.0.0でした)
github上のopenxlsx/NEWS

openxlsxレファレンスマニュアル

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問