Excel和日期有点混乱。如果你坚持使用中间文件,那么你可能被卡住了。 Excel使用自己的日期格式设置,它们可能会不同于Windows的日期格式设置。因此,即使使用Windows语言环境设置导出,Excel在使用不同的值集时也可能无法按预期运行。
使用自动化,您可以询问Excel的设置。
一般食谱出口日期到Excel
注意在Windows的日期和时间设置中使用的字符。
WindowsYearCharacter: string = 'y'; // Do no localize!
WindowsMonthCharacter: string = 'm'; // Do no localize!
WindowsDayCharacter: string = 'd'; // Do no localize!
WindowsHourCharacter: string = 'h'; // Do no localize!
WindowsMinuteCharacter: string = 'm'; // Do no localize!
请注意,月份和分钟字符都是'米',但日期应该是大写。如果您有一个格式字符串,它需要日期和时间,则这是必需的。当我们输出日期或时间时,我们选择迎合Windows格式的不区分大小写的规格。
使用International集合询问Excel的xlYearCode,xlMonthCode,xlDayCode,xlHourCode和xlMinuteCode格式化字符。
ExcelDayChar := ExcelApplication.International[xlDayCode];
将您的Windows语言环境设置转换为使用Excel字符。
ExcelDateFormat := ConvertWindowsLocalDateStringToExcel(ShortDateFormat);
这使用下面的功能。请再次注意,此功能只能用于或日期格式或时间格式。如果需要结合日期和时间的格式,则根据需要进行调整。
function ConvertWindowsLocalDateStringToExcel(const aString: string): string;
begin
// Year character vervangen :
Result := StringReplace(aString, UpperCase(WindowsYearCharacter), UpperCase(ExcelYearCharacter), [rfReplaceAll]);
Result := StringReplace(Result, LowerCase(WindowsYearCharacter), LowerCase(ExcelYearCharacter), [rfReplaceAll]);
// Month character vervangen :
Result := StringReplace(Result, UpperCase(WindowsMonthCharacter), UpperCase(ExcelMonthCharacter), [rfReplaceAll]);
Result := StringReplace(Result, LowerCase(WindowsMonthCharacter), LowerCase(ExcelMonthCharacter), [rfReplaceAll]);
// Day character vervangen :
Result := StringReplace(Result, UpperCase(WindowsDayCharacter), UpperCase(ExcelDayCharacter), [rfReplaceAll]);
Result := StringReplace(Result, LowerCase(WindowsDayCharacter), LowerCase(ExcelDayCharacter), [rfReplaceAll]);
end;
然后将数据导出到Excel,然后设置列的数字格式(或行,或单元)包含日期使用先前确定的ExcelDateFormat。
aRange.NumberFormat := ExcelDateFormat;
其中aRange是(具有)Excel范围类型的OleVariant。
解决方案1:应用该取决于语言环境格式(即MMM-JJ德国)网格属性。解决方案2:通过vba应用数字格式(将使用英文字母来应用格式) – JMax