質問

私は他のアプリケーションに対する自動Microsoft Excel(2003)を用いオフィス-オートメーション.ものなので交換。問題なのかは置換値が、すべての豊富なフォーマットとして失われてしまうという説明はこちらhttp://support.microsoft.com/kb/177194

を明確にする交換すvalueXとvalueY細胞みようになります:
valueXは

この結果、このように表示されます:
valueYは


また、フォーマットにより細胞内の 交換で救うことができる文字太字のフォーマット この値は置き換えられます。が見られませんでしたがわかりやすく伝えるためのフォーマットしました。(C#)

がこの問題を解決するにはを使わずに、分解能、サイトしますのでご注意ください。▼クライアントまで、フルのC#または一部の回避策Excel

役に立ちましたか?

解決

お問いることができなどのフォーマットに各キャラクタクライアントまで、フルのC#ができるかもしれな使用への対処にご注意願います。お使いいただくことによって物をExcelに晒されており、C#とによinteropが、恐らく私を示すまで何ができるかVBAまでの案内もあります。

まつためにも答え:

  1. どのフォーマットの文字Excel VBAを使用.
  2. 複雑さのリセットのフォーマット交換細胞。
  3. 可能な使い方をExcel VBAに前後です。

どのフォーマットの文字Excel VBAを使用

フォーマットを指定の文字を通じて公開された Range.Characters.Font オブジェクトです。みましょう。たとえば、以下の細胞 A1Sheet1 つのExcelシート:

Testing

からご覧いただけます例では、3、4文字胆に見えます。どうした物件およびその他のフォント性の方す。このVBAの機能として一部の物件で露出を通して Range.CharactersRange.Characters.Font:

Sub IterateCharacters()
Dim rng As Range
Dim lngLen As Long
Dim lngCount As Long
Dim chr As Characters
Set rng = ThisWorkbook.Worksheets("Sheet1").Range("A1")
lngCount = 1
lngLen = Len(rng.Value)

Debug.Print "Count", "Text", "Font", "Color", "Size", "Bold"    

Do While lngCount <= lngLen
    Set chr = rng.Characters(lngCount, 1)
    Debug.Print lngCount, chr.Text, chr.Font.Name, chr.Font.Color, chr.Font.Size, chr.Font.Bold
    lngCount = lngCount + 1
Loop

End Sub

上記のコードを以下の出力:

Count         Text          Font          Color         Size          Bold
 1            T             Arial          0             10           False
 2            e             Arial          0             10           False
 3            s             Arial          0             10           True
 4            t             Arial          0             10           True
 5            i             Arial          0             10           False
 6            n             Arial          0             10           False

複雑さのリセットのフォーマット交換細胞の内容

このトリッキーの一部はこの問題は実際のフォーマットの各文字が前提とはなりますが、もちろん、これはいつでも可能だ。にくだり書いたりすることができる。"を思い出し"のフォーマットに各キャラクターの再申請はライブラリリファレンスを参照しんだ後に置き換えます。

では最も簡単な場合のシナリオは、置換文字列は常に同じ長さとして渡航先の文字列になります。の場合 valueX は単に置き換えてよい valueY, では常に同じ長さの固定フォーマットは非常に簡単です。単にフォーマットの前に置き換え方法は、再申請フォーマットの同じ設定としました。

少し難しくは交換の場合 一つ 値です。この場合、相殺するために必要な交換フォーマットによる違いの長さの間の交換および先の文字列とい の置換文字列になります。

の最近エレベーターがブームなシナリオでは、nの文字列と置き換えられる場合、構文解析による文字を申請フォーマットだかのようにな n * difference 以降に交換できます。

んがより良いアルゴリズムをこのようなことがもう最適別で質問です。


可能な使い方をExcel VBAで、前後の状況

理想的には、いただけるアクセスに必要な物からC#などで対応VBAコードを作成します。がない場合がありますのでラッキーだった。

合させるためのフォーマットプロダクト、"わらびもち"をここで片道だけます。

  1. 設定されたExcelシートを3つのシート: Original,Copy,ReplacedValues
  2. 走り、あるいはC#のコードされたのを確認した Copy の複製 Original.
  3. 実際のC#コードに置き換え細胞の内容は、ペーストの値を置換文字列の ReplacedValues ワークシート.いうことを推奨す簡単なる範囲のアドレス(例: B2 はカラムA、オリジナルが異なりますのでご注意くださいカラムシビアアクシデントの交換が異なりますのでご注意くださいカラムC
  4. 実行後、あるいはC#のコード書きる方法を繰り返し処理を実行してすべての記載範囲 ReplacedValues.
  5. 各範囲ことができるでしょう参考に独自の価値 Copy (恐らく私のネーミングスキームはちょっと混乱の更新値 Original.
  6. は何かという独自のフォーマットにした Copy.利用の違い文字列の長さのオフセットとご応募フォーマットのオリジナル(このはがきを書き込むファンシーコードファイルデータをすべて行う。

あれより良い方法をお過程かかっているように思いがあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top