帮助将数字从Delphi 2010作为字符串发送到Excel 2007

时间:2009-11-11 16:40:41

标签: delphi automation excel-2007 delphi-2010

我使用后期绑定将一个数字作为字符串(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的字符串值最终为非数字?

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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;

请记住,我将逗号作为小数点分隔符。

答案 2 :(得分:0)

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

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

Worksheets("Sheet1").Range("A17").NumberFormat = "General"