Установить имя листа 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);