
プログラムの勉強を始めたばかりのものです。
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
No.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の機能で完結していない?という疑問を感じました。
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#を勉強しつつ自分のオリジナルツールを作りたい感じなので、すでに他に良いツールがあったとしても自作しようとしていますが、まだ始めたばかりという感じになります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/20 14:46
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/21 13:29
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/21 09:28
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- PowerPoint(パワーポイント) エクセルのマクロについて教えてください。 1 2023/01/20 14:36
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/02/21 11:19
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel: ファイル名になぜ、[...
-
CSVファイルの特定行の削除
-
エクセルのファイル:「自分」が...
-
複数のExcelファイルにある同名...
-
彼女の過去の恋愛に嫉妬してし...
-
docxをmht形式で保存したファイ...
-
エクセルの拡張子XLSのファイル...
-
batでファイル名を変更したい(...
-
vbsからのExcelマクロ呼び出し...
-
iCloud for Windowsをアンイン...
-
このファイルは外部のエディタ...
-
WINDOWS CMDからゴミ箱のファ...
-
ファイルが移動してもリンクの...
-
フォルダ内の複数のファイルの...
-
EXCELVBAにて文字列にして「01...
-
CSVファイルの暗号化
-
VBAにおいて、ファイルの移...
-
VBA ファイル一覧を取得して全...
-
5000個のtiffファイルをpdfへ変...
-
Googleドライブについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CSVファイルの特定行の削除
-
彼女の過去の恋愛に嫉妬してし...
-
Excel: ファイル名になぜ、[...
-
エクセルのファイル:「自分」が...
-
ファイルが移動してもリンクの...
-
iCloud for Windowsをアンイン...
-
EXCELVBAにて文字列にして「01...
-
WINDOWS CMDからゴミ箱のファ...
-
vbsからのExcelマクロ呼び出し...
-
[Unity]シーンファイルの中が消...
-
5000個のtiffファイルをpdfへ変...
-
複数のExcelファイルにある同名...
-
このファイルは外部のエディタ...
-
batでファイル名を変更したい(...
-
フォルダ内の複数のファイルの...
-
docxをmht形式で保存したファイ...
-
FTPのgetとputの使いわけ。
-
Googleドライブについて
-
VBA ファイル一覧を取得して全...
-
エクセル保存終了で一時ファイ...
おすすめ情報