Установить имя листа Excel текущею дату

Почему такой подход не работает. Мне нужно лист переименовать на текущею дату

Делаю примерно так

var dt: TDateTime
try
  ExcelApp := GetActiveOleObject('Excel.Application');
except
try
  ExcelApp := CreateOleObject('Excel.Application');
except
  ShowMessage('Cannot start Excel/Excel not installed ?');
  Exit;
end;
end;
  ExcelApp.Workbooks.Open('c:\YourFileName.xls');
  dt := Date(); //Тут дата корректная
  ExcelApp.ActiveSheet.Name := DateToStr(dt); //Тут лист переименуется на не корректную дату 31.12.1899

Ответы (1 шт):

Автор решения: dresqd

После преобразования TDateTime в строку, появляются разделители «/» (прим. 28/07/2023) Символ «/» недопустим в названии листа.

Ссылка на официальную страницу Microsoft, в которой описаны правила именования листов

После преобразования даты в строку попробуйте заменить «/» на «_», после чего получится переименовать лист полученной строкой (прим. 28_07_2023).

Попробуйте следующий код.

var 
  dt : TDateTime;
  ExcelApp, WB, WS : Variant;
  editedDT : string;
try
  ExcelApp := GetActiveOleObject('Excel.Application');
except
  try
    ExcelApp := CreateOleObject('Excel.Application');
  except
    ShowMessage('Cannot start Excel/Excel not installed ?');
    Exit; 
  end;
end;
  WB := ExcelApp.Workbooks.Open('c:\YourFileName.xls');
  WS := WB.ActiveSheet;
  dt := Date(); //Тут дата корректная
  editedDT := StringReplace(dt, '/', '_', [rfReplaceAll, rfIgnoreCase]);
  WS.Name := DateToStr(editedDT);
→ Ссылка