10

単純なデータベースを Excel シートと同期するツールを作成しています。データベースのテーブルの各項目は、ワークシートの 1 行に対応します。C# と Excel interop com インターフェイスを使用して Excel シートをツールに読み込み、同期後にアイテムの値 (つまり、Excel シートの列の 1 つ) を比較して、それらが等しいことを確認しました。

昨日、比較が正しくないケースを見つけました。

"'<MedalTitle>' Medal - <MedalDescription>"
"<MedalTitle>' Medal - <MedalDescription>"

2 番目は、私が Excel から読み込んだもので、ご覧のとおり、最初のアポストロフィがスキップされています。セルを単なるテキストとして扱うように Excel に指示する方法はありますか (いいえ、セルの書式を設定するだけでは役に立ちません)。

次のように、VBA でセルの値 ( 'hello' )をコピーしようとしました。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
   Target.Offset(1, 0).Value = Target.Worksheet.Range("b2").Value
   Target.Offset(2, 0).Value = Target.Worksheet.Range("b2").Formula
   Target.Offset(3, 0).Formula = Target.Worksheet.Range("b2").Formula
   Target.Offset(4, 0).Formula = Target.Worksheet.Range("b2").Value
End Sub

その結果、ターゲット セルの値は常にhello'でした。

仕方が無いなら醜い事をするしかない

if (dbitem.value[0] == ''' )
{
   // stuff
}
else
{
   // regular comparison
}
4

4 に答える 4

10

残念ながら、アポストロフィ'は、セルの最初の文字として表示される場合、Excel の特殊文字です。残りの文字列をテキストとして扱うように Excel に指示し、セルに次のようなものを入力できるよう'34.2にします。これにより、数値ではなく文字列として扱われます (書式設定など)。

あなたが提案したことと同様のことをすることをお勧めしますが、Excel に入力する場所を除いて、最初の文字を確認し、'既に存在する場合は余分に追加します。

または、すべての値の前にアポストロフィを追加することもできます-それらをすべてテキストとして使用したい場合。そうすれば、余分な最初の文字チェックは必要ありません。

于 2009-08-26T10:27:53.210 に答える
4

そのセルに対応するオブジェクトのPrefixCharacterプロパティを見てくださいRange

ヘルプから:

TransitionNavigKeysプロパティが の場合False、このプレフィックス文字は、テキスト ラベルの場合は '、または空白になります。TransitionNavigKeysプロパティがの場合 True、この文字は、左寄せラベルの場合は '、右寄せラベルの場合は "、中央揃えラベルの場合は ^、繰り返しラベルの場合は \、または空白になります。

このTransitionNavigKeys部分は Lotus 1-2-3 の互換性に関連しているため、おそらくFalse

次の記事に基づく回答:

http://excel.tips.net/Pages/T003332_Searching_for_Leading_Apostrophes.html

(警告: 少し迷惑なポップアップが表示される場合があります)


PrefixCharacter編集:実際には、これは読み取り専用であるため、おそらく役に立たないでしょう:(

edit2: 私は初めて正しかった。PrefixCharacterセルに追加された値が ' で始まる場合にのみ入力されるため、PrefixCharacterプラスValueを読み戻して連結するだけです。TransitionNavigKeysである限りFalse、それは

于 2009-08-27T01:46:57.017 に答える
1

targetcell.Value代わりに試してください。.Formulaは数式バーに表示される数式.Valueで、セルの評価値です。

したがって、.Formula元のコードでも使用したと思います。それを変更するとうまくいくはずです。

編集:わかりました、うまくいきませんでした(恥ずかしい)。

Excel は開始の一重引用符を特別に扱います..特別なので、あいまいなセル/範囲のプロパティでさえアクセスできません。私が見つけた唯一の回避策は、基本的にあなたが最初に考えたものと同じです。ここに行きます:

If VarType(cell) = 8 And Not cell.HasFormula Then
 GetFormulaI = "'" & cell.Formula
Else
 GetFormulaI = cell.Formula
End If
于 2009-08-26T09:35:15.547 に答える
0

クエリのテキスト フィールド ( '''' + dbField ) の前に一重引用符を追加して、一重引用符が埋め込まれたフィールドに対してクエリが返すようにすることもできます。

"''stuff in single quotes'"

これを Excel セルに配置すると、次のように変換されます。

"'stuff in single quotes'"

引用符で囲まれていない文字については、次のようになります。

"'stuff that wasn't in quotes"

これを Excel セルに配置すると、次のように変換されます。

"stuff that wasn't in quotes"

試してみる価値。:-)

于 2009-08-27T02:49:43.640 に答える