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

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

ただいまの
回答率

90.48%

  • Excel

    1599questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

  • R

    325questions

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

R{openxlsx}のEncodingエラー?

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,074

mrkhrhs

score 8

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]と言われる。

※こちらはそもそも読めてないのでそもそもの目的が達成できるかも不明

ソースコード

>library("openxlsx")
>library("tcltk")

#ファイルパスの取得(tcltkで指定)
>XLPath <- paste0(as.character(tkgetOpenFile(title = "エクセルファイルを選択",
                                            filetypes = '{"エクセルファイル" {".xlsx" ".xls"}}',
                                            initialfile = c("*.xlsx"))))


#①直接データフレームを取得して新たに仮想ワークブックを作って元のファイルに上書き
#動作的には正しく出来ているけど目的と違う

>XLData <- read.xlsx(XLPath, sheet = "sheetname", startRow = 2)
>class(XLData)
[1] "data.frame" #取得はできた

#仮想ワークブックの作成(この辺りはどうでもよさそう)
>WD <- createWorkbook(creator = "hoge")
>addWorksheet(wb = WD, sheetName = "New_sheet", gridLines = TRUE)
>writeData(wb = WD, sheet = "New_sheet", x = XLData, startCol = 1, startRow = 2)
>freezePane(wb = WD, sheet = "New_sheet", 
           firstRow = FALSE, firstCol = FALSE,
           firstActiveRow = 3, firstActiveCol = 2)
>setColWidths(wb = WD, sheet = "New_sheet",
             cols = 4, widths = "auto")
>openXL(WD)
>saveWorkbook(wb = repWD, XLPath, overwrite = TRUE)

⇒で、丸々新しいファイルが出来上がる。。。


#②の場合

>loadWorkbook(file=XLPath) #元々のワークブックを仮想ワークブックとしてそのまま取得しようとして…

#以下、エラー
Error in substring(x[ind], so, eo) : 
  invalid multibyte string at '<ef>シ<ad><ef>シウ <ef>シー繧エ繧キ繝<83>繧ッ"/>'


#③の場合
>require(readxl)
>excel_sheets(XLPath)
>read_excel(XLPath,sheet = "sheetname")

Error: Couldn't find 'xl/worksheets/sheet5.xml' in '\\・・・・
*元々のファイルのシートはSheet5でした
 sheet引数を5にしても変わらず。

補足情報(言語/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レファレンスマニュアル

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

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

関連した質問

同じタグがついた質問を見る

  • Excel

    1599questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

  • R

    325questions

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