C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: エクセルの文字ごとの色取得


(過去ログ 133 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■78716 / inTopicNo.1)  エクセルの文字ごとの色取得
  
□投稿者/ Muu (1回)-(2016/02/12(Fri) 10:37:03)

分類:[C#] 

2016/02/12(Fri) 10:40:51 編集(投稿者)
2016/02/12(Fri) 10:38:23 編集(投稿者)

Windows7 32/64bit Office2007〜 Vs2015 C#
お世話になります。

エクセルのセルに設定された文字列の取得で、文字毎の色まで取り込みたいです。

Excel.Range rng = ws.Range(ws.Cells[1, 1], ws.Cells[1, 1]);
string str = rng.Value.ToString();
for (int i = 0; i < str.Length; i++)
{
Debug.Print(rng.Characters(i, 1).Font.Color.ToString());
}
上記のように実施してみたのですが、700文字程度で取り込みに1分程度
かかってしまいます。

最終的にはRichTextBoxに表示できればよいのですが。

処理速度を上げる方法は無いでしょうか。

よろしくお願いしますm(__)m

引用返信 編集キー/
■78720 / inTopicNo.2)  Re[1]: エクセルの文字ごとの色取得
□投稿者/ 魔界の仮面弁士 (639回)-(2016/02/12(Fri) 11:43:22)
No78716 (Muu さん) に返信
> 最終的にはRichTextBoxに表示できればよいのですが。
> 処理速度を上げる方法は無いでしょうか。

こういう方法は如何でしょう。


#region Excel の内容を RichTextBox にコピー
// 中継用に Word を起動
dynamic wApp = Activator.CreateInstance(Type.GetTypeFromProgID("Word.Application"));
dynamic docs = wApp.Documents;
dynamic doc = docs.Add();
dynamic rngWord = doc.Range();

// クリップボードにコピー
Clipboard.Clear();
rngExcel.Copy(); // Excel.Range オブジェクト

// RTF:true だと色情報が転送されないので、RTF:false にする
rngWord.PasteExcelTable(LinkedToExcel: false, WordFormatting: false, RTF: false);
rngWord.Copy();

// RichTextBox に貼り付け
richTextBox1.Paste(DataFormats.GetFormat(DataFormats.Rtf));

// Word の解放
Marshal.ReleaseComObject(rngWord);
Marshal.ReleaseComObject(doc);
Marshal.ReleaseComObject(docs);
object oApp = wApp;
wApp.Quit(SaveChanges: false);
Marshal.FinalReleaseComObject(oApp);
#endregion
引用返信 編集キー/
■78721 / inTopicNo.3)  Re[2]: エクセルの文字ごとの色取得
□投稿者/ Muu (1回)-(2016/02/12(Fri) 12:15:23)
2016/02/12(Fri) 12:15:35 編集(投稿者)

魔界の仮面弁士 様
お世話になります。

正直、返信はないだろうなぁ〜と思っていただけに
迅速且つ、すごいアイデアだなと驚嘆しております。

教えていただいた部分を組み込んだところ、該当処理が14秒に
短縮されました。

多数のセルを取り扱う必要があるので、改善効果は非常に高いです。

これで理想の作業フローを実現できそうです。

本当にありがとうございましたm(__)m
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -