가능한 해결책 중 하나는 시스템 시간 포맷터 (예 : _tcsftime, strftime, wcsftime)를 사용하여 날짜/시간 구조를 실행중인 시스템의 로켈로 포맷하는 것입니다. 프로그램과 엑셀 모두 동일한 PC에서 실행되기 때문에 로컬 날짜/시간 문자열이 어떻게 보이는지 알지 못해도 제대로 작동합니다.
폴백 솔루션으로 프로그램의 옵션 구성 섹션에 일련의 하드 코드 된 형식 문자열 및/또는 사용자가 직접 입력 한 문자열을 제공해야 할 수도 있습니다. 형식이 실패합니다. OP에서 첫 번째 응답 코멘트 후
추가 정보 : --------------
UI에서 날짜 시간 바이너리 객체의 텍스트 디스플레이 프리젠 테이션에 영향을
로케일 설정 만 . 이러한 datetime-binary-object는 Excel (날짜/시간 형식 셀), C++ (다양한 구조가 api에 따라 다름) 등 다양한 컨텍스트에서 로캘 설정에 관계없이 항상 일관된 방식으로 이진 구조로 저장됩니다. , VisualBasic (변형).
따라서 datetime 이진 구조를 문장이 아닌 Excel로 내보내는 경우 excel-automation이 IDispatch 인터페이스를 사용하므로 항상 "variant"형식을 사용하여 날짜 값을 저장할 수 있습니다. 당신은 완전히 로케일 설정을 잊을 수 있습니다.
의 코드의 추가 코드에 의해 셀을 날짜 변형을 수출하고 포맷합니다 : ---------------- 내가 MFC를 사용하고
그래서 코드는 매우 간단합니다 , winapi youself로 변환해야 할 수도 있습니다.
_Application app;
if (!app.CreateDispatch("Excel.Application"))
{ AfxMessageBox("Cannot start Excel !");
return;
}
app.SetVisible(TRUE);
COleVariant VOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
Workbooks objbooks = app.GetWorkbooks();
_Workbook objbook = objbooks.Add(VOptional);
Worksheets objsheets = objbook.GetWorksheets();
_Worksheet objsheet = objsheets.GetItem(COleVariant((short)1));
// get current date time
COleDateTime timeCurrent = COleDateTime::GetCurrentTime();
// setting date values
Range range;
range = objsheet.GetRange(COleVariant("A2"), COleVariant("B3"));
range.SetValue(COleVariant(timeCurrent));
// range.SetNumberFormat(COleVariant("dd/mm/yyyy"));
range.SetNumberFormat(COleVariant("dddd, mmmm dd, yyyy"));
AfxMessageBox("Done...");
출처
2013-02-25 18:22:52
mfc
감사합니다. 불행히도 두 가지 모두 작동하지 않습니다. 차트 축으로 날짜가 필요합니다. 날짜 - 축 옵션을 사용할 수있게하려면 (이 때문에 모든 일을하고있어, 큰 눈금을 만들고 매월 축을 레이블링 할 수 있다고 말할 수 있습니다.) 단순히 날짜를 문자열로 전달하면 작동하지 않습니다. 나는 = DATEVALUE()를 사용하고 셀을 날짜로 포맷해야합니다. 따라서 Excel NumberFormat을 사용해야합니다. – Naryoril
죄송합니다. 줄 바꿈을 추가하고 싶지만 입력을 누르면 주석이 전송되고 편집 할 수 없다고 말합니다. 두 번째 솔루션은 작동하지 않습니다. 네, 로케일에 따라 숫자 형식을 하드 코딩 할 수 있습니다 (현재 내가 한 일입니다). 그러나 실제 솔루션이 아닙니다. 이 프로그램은 약 20 년이 넘었고 설정은 DB에 저장되므로 고객의 모든 사용자가 공유합니다. Ini 파일도 있지만 프로그램을 네트워크 드라이브에 설치할 수 있으므로 ini 파일도 공유 할 수 있습니다. 그러나 지역은 물론 각 사용자마다 다를 수 있습니다. – Naryoril
날짜 형식의 변형으로 날짜를 전달하면 문제가 해결됩니다. 감사합니다. 불행히도 이것은 일반적인 해결책이 아니므로 표준 형식으로 만 날짜를 표시 할 수 있습니다. 누군가 다른 방식으로 형식을 지정해야하는 경우에도 도움이되지 않습니다. 예 : 엑셀 숫자 형식 문자열 "dddd, mmmm dd, yyyy"에 해당하는 "수요일, 2 월 27 일 수요일"로 지정하려는 경우 – Naryoril