【发布时间】:2019-10-08 11:01:50
【问题描述】:
我有来自客户端的 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:='';
但它会以通用格式生成 0.260416666666667。我可以观察到 2 个奇怪的场景:
- 如果我将单元格格式设置为 General,则写入 6:15:00,在这种情况下,格式会自动转换为 Custom,并将格式转换为 General 结果为 0.26041666...
- 如果我用鼠标单击客户端 Excel 的单元格(一般:6:15:00),则 Excel 会将单元格格式转换为自定义格式,随后转换为文本的一般格式也会导致 0.26...李>
所以,我应该找到如何将字符串“06:15:00”写入常规单元格并同时保留常规格式的方法。从录制的 VBA 宏代码中生成 Delphi 代码是不可能的,因为我找不到编写可视 Excel 命令的方法来达到这种状态。
我正在使用 OLE Excel Excel_TLB。
我在 Excel 中找到了给出所需结果的命令序列,这个序列可以记录为宏:
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...
【问题讨论】:
-
添加一个前导撇号,所以输入
'06:15:00,但是这个值将被视为文本。 -
客户端 Excel 中没有前导撇号。客户在集成流程中使用 Excel,并且必须完全符合。
标签: excel delphi formatting delphi-2009