我使用后期绑定将一个数字作为字符串(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的字符串值最终为非数字?
感谢您的任何建议!编辑为客户指定区域小数分隔符是','。
答案 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"