アプリ版:「スタンプのみでお礼する」機能のリリースについて

プログラムの勉強を始めたばかりのものです。
Visual Studio Community 2017 を使用して C# で Windows Form Application を勉強中です。

複数のリッチテキスト形式のファイルをForm1_Load時に読み込んで
書式情報込みでList<string>に格納しておき、指定した要素だけRichTextBoxに表示したかったり
また、SaveAllボタンを押すとList<string>に格納された全ての書式情報込みのリッチテキストデータを
複数のリッチテキスト形式のファイルに一括書き出したりしたいのですが、どうすれば良いでしょうか?

自分で検索して調べてみた感じでは「richTextBox1.LoadFile」「richTextBox1.SaveFile」のように
richTextBox1を介した方法ばかりが出てきます。

RichTextBoxに表示されたテキストデータを、書式情報込みでstring変数に代入するには
string s = richTextBox1.Rtf; で可能なのは分かったのですが‥

こちらについて、何かアドバイスを頂けるとありがたいです。
よろしくお願いします。m(_ _)m

A 回答 (1件)

以下のような実装をすればできそうです。



■読み込み時
1.WordのCOMオブジェクトでRTF(リッチテキスト)ファイルを読み込む。
2.項目ごとに抜き出す。
3.WordのCOMオブジェクト上で編集用の新規RTFファイルを作成する。
4.3の新規ファイルに2で抜き出した項目を貼り付ける。
5.4をRTF形式でMemoryStreamに保存する。
6.5をList<Stream>に格納する。

■RitchTextBox表示時
1.List<Stream>の要素をRitchTextBoxのLoadFileメソッドに与える。

■RitchTextBox編集終了時
1.RitchTextBoxのSaveFileメソッドでMemoryStreamに保存する。
2.1のMemoryStreamをList<Stream>に格納する。

■保存時
1.List<Stream>の内容をWordのCOMオブジェクトに読み込む。
2.1のCOMオブジェクトから編集後の項目を抜き出す。
3.読み込み時の1で使用したWordのCOMオブジェクトに2で抜き出した項目を貼り付ける。
4.3のCOMオブジェクトに読み込まれているRTFファイルを保存する。

■参考情報:C#からMS-Word操作
https://mutatsu.wordpress.com/2013/07/05/cからms-word操作/

ただ、そもそもとして疑問があります。
何故RTF形式でこのような編集をしようとしているのでしょうか。
RTFに限らずですがOffice関係のファイル形式は厳格でヘッダーからフッターまで完全に存在しないとパースエラーとなります。
こういったファイル形式は自前でパーサーやレンダラーを用意するか、今回私が示したように目的の部分だけ切り出して他のファイルに張り付けてそれらしい中間ファイルを作って誤魔化す必要が出てきます。

一方でHTMLのようなルーズなファイル形式を使えば目的の部分だけ切り出して編集ができ中間ファイルを必要としません。
(一方で切り出し方次第ではCSS等が適用されず表示化けを起こしたりします。)

何を作りたくてこのような事をしているのかを教えていただければより深いアドバイスができると思います。
#私はこの内容であればWordの機能で完結していない?という疑問を感じました。
    • good
    • 0
この回答へのお礼

izayoimizukiさん
ご回答ありがとうございます!

なるほど、MS-Word操作系でドキュメントを扱うというのには頭が周りませんでした。
こちら教えて頂いたサイトと流れとを確認しながら、検討してみたいと思います。

>ただ、そもそもとして疑問があります。
>何故RTF形式でこのような編集をしようとしているのでしょうか。

プログラム自体勉強を始めたばかりなので、WindowsFormで何ができるかさえもまだ全然把握できていません。
最初はFormアプリでButtonとTextBoxを使っていくつかシンプルなツールを作ってみたのですが、今作っている簡易テキストエディタではTextBoxでは物足りなくなってきました。
それでRichTextBoxを試してみたところ、太字・下線・文字色変更などの最低限の文字スタイル変更ができて、文字編集に対する細かいステップでのUndoとRedoも標準で入っていて「TextBoxよりこっちがいいな」と思い、RichTextBoxを使い始めたのですが、複数のリッチテキスト形式のデータを読み書きしたい場面で詰まった‥という流れになります。

例えば先日質問させて頂いたのがこちらのページでして、添付画像があるのですが‥
https://oshiete.goo.ne.jp/qa/10025417.html
このように左にListBoxがあり、リストから選択したアイテムに紐付いたテキスト情報を右側のTextBoxに表示する「タブ切り替え可能な簡易テキストエディタ」を作成しました。
こちらはうまくいったのですが、先ほど書いたように最低限の書式を持たせたりするために、TextBoxをRichTextBoxに差し替えたものを今作成しています。

目的としてはC#を勉強しつつ自分のオリジナルツールを作りたい感じなので、すでに他に良いツールがあったとしても自作しようとしていますが、まだ始めたばかりという感じになります。

お礼日時:2017/11/04 17:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています