0

遅延バインディングを使用して、数値を文字列(Cell.Value:= '2,5')としてExcel2007に送信しています。実際のコードは次のようになります。

var CellVal: OLEVariant;
...
CellVal := FloatToStr(2.5);  // Regionally formatted.
Cell.Value := CellVal;

私のExcel97バージョンでは、この値はデフォルトで「一般」としてフォーマットされ、数値として表示されます。Excel 2007を使用しているお客様は、セルが「標準」としてフォーマットされ、Excelはそれを文字列として表示します(右揃えではありません)。地域設定を使用して数値をフォーマットしており、Excelが使用しているように見えることに注意してください。デフォルトの地域設定も同様です。

顧客がセルに2,5と入力するだけで数値として受け入れられ、クリップボードからセルに文字列「2,5」のコピーを作成すると、それも数値として受け入れられます。自動化インターフェイスを介してExcelに送信された文字列値が非数値になる理由を誰かが知っていますか?

提案をありがとう!顧客の地域の小数点を指定するように編集されたのは'、'です。

4

3 に答える 3

3

おそらくあなたがそれに文字列を与えるからです。フロート値を直接渡してみましたか?

于 2009-11-11T16:49:45.903 に答える
3

コメントをフォーマットできないため:

ちょっとしたテストをしたところ、Excelは地域形式の浮動小数点値を文字列として必要とせず、小数点としてドットを必要としています。

procedure TForm1.Button1Click(Sender: TObject);
var
  App: Variant;
  Workbook: Variant;
  Worksheet: Variant;
  DoubleValue: Double;
begin
  App := CreateOleObject('Excel.Application');
  Workbook := App.Workbooks.Add;
  Worksheet := Workbook.ActiveSheet;
  DoubleValue := 1.2;
  Worksheet.Range['A1'].Value := DoubleValue; //DoubleValue is a double, excel recognizes a double
  Worksheet.Range['A2'].Value := '1.2'; //excel recognizes a double
  Worksheet.Range['A3'].Value := '1,2'; //excel recognizes a string
  Worksheet.Range['A4'].Value := FloatToStr(1.2); //excel recognizes a string
  App.Visible := True;
end;

私は小数点記号としてコンマを使用していることに注意してください。

于 2009-11-11T20:38:03.127 に答える
0

動作が異なる理由を説明することはできませんが、Excel2007が入力値をどのように解釈するかにかかっているように見えます。

コードでセルのフォーマットを設定するのはどうですか?

Worksheets("Sheet1").Range("A17").NumberFormat = "General"
于 2009-11-11T16:49:25.863 に答える