Delphi:如何将时间字符串写入Excel单元格,但保留常规数字格式
我有来自客户端的Excel(它是通过print to Excel函数生成的),奇怪的是Excel在单元格中包含时间字符串“06:15:00”,格式为通用格式。我应该从Delphi创建标识Excel 可能的代码是:Delphi:如何将时间字符串写入Excel单元格,但保留常规数字格式,excel,delphi,formatting,delphi-2009,Excel,Delphi,Formatting,Delphi 2009,我有来自客户端的Excel(它是通过print to Excel函数生成的),奇怪的是Excel在单元格中包含时间字符串“06:15:00”,格式为通用格式。我应该从Delphi创建标识Excel 可能的代码是: FWorksheet.Cells.Item[4, 5].NumberFormat:=''; FWorksheet.Cells.Item[4, 5].NumberFormat:='06:15:00'; FWorksheet.Cells.Item[4, 5].NumberFormat
FWorksheet.Cells.Item[4, 5].NumberFormat:='';
FWorksheet.Cells.Item[4, 5].NumberFormat:='06:15:00';
FWorksheet.Cells.Item[4, 5].NumberFormat:='';
但在通用格式中,结果为0.260416667。我可以观察到两种奇怪的场景:
Range("O4").Select
Selection.NumberFormat = "@"
Range("O4").Select
ActiveCell.FormulaR1C1 = "06:15:00"
Range("O4").Select
Selection.NumberFormat = "General"
Range("O6").Select
但是我在Delphi代码中对这个宏的翻译:
FWorksheet.Cells.Item[4, 5].NumberFormat:='@';
FWorksheet.Cells.Item[4, 5].FormulaR1C1:='06:15:00';
FWorksheet.Cells.Item[4, 5].NumberFormat:='';
仍然产生0.260…使用AnsiChar是解决方案:
FWorksheet.Cells.Item[4, 5].NumberFormat:=AnsiChar('@');
FWorksheet.Cells.Item[4, 5].FormulaR1C1:='06:15:00';
FWorksheet.Cells.Item[4, 5].NumberFormat:='';
回答指出,在此处使用AnsiChar@非常重要,而不是Delphi2009默认提供的UnicodeChar。添加一个前导撇号,因此输入
'06:15:00
,但该值将被视为文本。客户端Excel中没有前导撇号。客户在is集成流程中使用Excel,必须严格遵守。一旦意识到我已经回答了问题,我就删除了最后一条(错误的)评论-使用VBA。OP在评论中说,这种方法在Excel 2016中不起作用-仍然添加了撇号,因此确切的行为可能是特定于版本的。仍有待理解,为什么录制的宏只使用“@”而不转换为Ansi。我猜-Excel和宏都是Unicode,这就是为什么录制纯'@'可能会产生误导的原因。