Delphi,导出到 Excel 日期较低的问题 01.01.1900 OleException(800A03EC)

Delphi, problem with export to Excel dates lower 01.01.1900 OleException(800A03EC)

应用程序已导出到 Excel。当数据的日期低于 1​​899 年 12 月 30 日时,它会引发错误 OleException(800A03EC)。我知道 Excel 将日期存储为数字,数字 1 等于日期 01.01.1900。但是,在 Excel 应用程序中,我可以将单元格格式设置为日期并将日期输入到 01.01.1900 以下。例如,日期 01.01.1798 不会导致错误或警告。 对于导出,我们使用范围,例如:

var
  xlApp, xlWorkBook, xlWorkSheet, Range, Data: Variant;
begin
  xlApp := CreateOLEObject('Excel.Application');
  try
    xlApp.Visible := False;
    xlApp.SheetsInNewWorkbook := 1;
    xlApp.Application.WorkBooks.Add;
    xlWorkSheet := xlApp.ActiveSheet;
    Range := xlWorkSheet.Range[xlWorkSheet.Cells[4, 1], xlWorkSheet.Cells[4, 1]];
    Range.NumberFormat := 'dd.mm.yyyy';
    Range.Value := StrToDate('01.01.1753');
    xlApp.Visible := True;
    xlApp.Quit;
  except
    xlApp.Visible := True;
  end;

有没有办法避免此错误并将日期放在单元格中的 01.01.1900 以下?

Excel 不支持早于 01/01/1900 的日期值。如果在 Excel 本身中将单元格格式化为 dd.mm.yyyy 然后输入 01.01.1753,它将存储为文本(您可以通过将其传递给 DATEVALUE 函数来验证这一点,或者尝试加1)。您还可以使用 VBA 宏复制 Delphi 错误 - 声明一个 Date 变量,将其分配给 DateSerial(1753, 1, 1),尝试为其分配一个单元格。