0

我使用后期绑定将数字作为字符串 (Cell.Value := '2,5') 发送到 Excel 2007。实际代码更像:

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

在我的 Excel 97 版本中,默认情况下,该值将被格式化为“常规”,并将被视为一个数字。使用 Excel 2007 的客户最终将单元格格式设置为“标准”,Excel 似乎将其视为字符串(未正确对齐。)请注意,我正在使用区域设置来格式化数字,而 Excel 似乎正在使用默认区域设置也是如此。

如果客户只是在一个单元格中输入 2,5,它会接受它作为一个数字,如果他将剪贴板中的字符串“2,5”复制到一个单元格中,它也会被接受为一个数字。有谁知道为什么通过自动化接口发送到 Excel 的字符串值最终以非数字形式出现?

感谢您的任何建议!编辑为客户指定区域小数分隔符为“,”。

4

3 回答 3

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 回答
3

可能是因为你给它一个字符串。您是否尝试过直接将浮点值传递给它?

于 2009-11-11T16:49:45.903 回答
0

无法解释为什么行为不同,但这似乎取决于 Excel 2007 如何解释传入的值。

如何在代码中设置单元格的格式?

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