現在、複数のアプリケーションでこの問題が発生しており、誰かが私のものよりも効率的な解決策を思いついたのではないかと思っています. 基本的に、私の目標は、セル内のコンテンツを HTML 文字列に変換して、すべての書式設定を含めることです。これまでの私の回避策は、文字列内の各文字をループしてフォント サイズ、太さ、およびスタイルを決定することでしたが、大量のデータを一度に変換すると、非常に遅くなる可能性があります。
1 に答える
各文字を順番に処理すると非常に遅くなりますが、極端な場合にのみ必要です。次の方法を使用して、この同じ問題に非常にうまく取り組みました。
関連するプロパティ (太字、斜体など) ごとに、そのプロパティの値の各変更の位置を格納する配列を作成します。次に、HTML を生成するときに、次の変更 (任意のプロパティ) まですべてのテキストを吐き出すことができます。変更が頻繁でない場合、これは明らかに高速です。
ここで、各プロパティの変更箇所にたどり着くために、まず実際に変更があるかどうかをテストします。これは簡単です。たとえば、Font.Bold は、すべてのテキストが太字の場合は true を返し、すべてのテキストが太字の場合は false を返します。非太字、および太字部分と非太字部分の両方がある場合は null (または他の値 - 私は覚えていません)。
したがって、値にまったく変化がなければ、すでに完了です。値が変化した場合は、テキストを 2 分割して 2 つに分割し、最初からやり直します。繰り返しますが、半分はすべて同じで、残りの半分には変更が含まれていることがわかるかもしれないので、前と同じように後半をさらに細分化します。
多くの変更を行うセルはほとんどなく、ほとんどのセルはまったく変更しない傾向があるため、これは最終的に非常に効率的です。または、少なくとも文字単位の方法よりもはるかに効率的です。