solution

MS-EXCEL Builder

Jack4u 2023. 3. 22. 12:49

MS-EXCEL은 아주 다양한 분야에서 사용되고 있으나 다른 시스템과의 호환성 구현에 많은 문제가 발생한다. 이 모듈은 EXCEL없는 환경에서도 복잡한 형태의 EXCEL 파일을 생성할수 있는 솔루션이다.

 

1. C/C++, JAVA 어떤 환경에서도 코딩만으로 형식화된 EXCEL파일 생성

2. VBA나 COM의 도움을 받지 않고 직관적으로 EXCEL FORM을 생성하므로 생성속도가 빠름

3. LINUX, UNIX등 MS-EXCEL이 작동하지 않는 환경에서도 완벽한 EXCEL FILE생성

4. EXCEL 고유 포멧으로 생성하므로 EXCEL에서의 로딩속도 빠름

 

아래 화면은 Excel builder로 excel이 설치되지 않은 UNIX 머신에서 생성한 EXCEL File이다.

예제) 첨부된 파일은 Visual C++ 2010에서 컴파일되었으며 Release 모드로 컴파일 하여야합니다. 해당 소스에 대한 설명은 아래와 같습니다. (아래의 예제는 C++로 제작되었으나 JAVA형식의 모듈도 있습니다.)

 

 

1. Simple class

COxpExcel excel;

excel.Create("d:\test.xlsx");
excel.Close();

 

2. Styling

excel.StylesBegin();

       // 표시형식
excel.StylesNumFmtsBegin(2);
excel.StylesNumFmtsAddFmt("##00.0", 0);
excel.StylesNumFmtsAddFmt("\"₩\"#,##0.00", 1);
excel.StylesNumFmtsEnd();
        // 폰트
excel.StylesFontsBegin(1);
excel.StylesFontsAddFont("맑은 고딕", 11, 0xFF0000, true, true, true);
excel.StylesFontsEnd();
       // 채우기
excel.StylesFillsBegin(2);
excel.StylesFillsAddPattenFill(0x808080);
excel.StylesFillsAddPattenFill(0xFFFFFF);
excel.StylesFillsEnd();
// 테두리
excel.StylesBordersBegin(3);
excel.StylesBordersBorderBegin();
excel.StylesBordersBorderAddBorder(OXP_BORDER_POS_ALL, OXP_BORDER_STYLE_HAIR, 0xFF0000);
excel.StylesBordersBorderEnd();
excel.StylesBordersBorderBegin();
excel.StylesBordersBorderAddBorder(OXP_BORDER_POS_LEFT, OXP_BORDER_STYLE_THICK, -1);
excel.StylesBordersBorderAddBorder(OXP_BORDER_POS_RIGHT, OXP_BORDER_STYLE_THICK, -1);
excel.StylesBordersBorderAddBorder(OXP_BORDER_POS_TOP, OXP_BORDER_STYLE_HAIR, -1);
excel.StylesBordersBorderAddBorder(OXP_BORDER_POS_BOTTOM, OXP_BORDER_STYLE_HAIR, -1);
excel.StylesBordersBorderEnd();
excel.StylesBordersBorderBegin();
//excel.StylesBordersBorderAddBorder(OXP_BORDER_POS_ALL, OXP_BORDER_STYLE_THICK, 0x000000);
excel.StylesBordersBorderAddBorder(OXP_BORDER_POS_ALL, OXP_OLD_LINESTYLE_CONTINUOUS, OXP_OLD_WEIGHT_THICK, 0x000000);
excel.StylesBordersBorderEnd();
excel.StylesBordersEnd();
//정렬
excel.StylesCellStylesBegin(1);
excel.StylesCellStylesAddXf(0,-1,0,0,OXP_ALIGN_VERT_NONE,OXP_ALIGN_HOZ_NONE);
excel.StylesCellStylesEnd();
excel.StylesCellXfsBegin(2);
excel.StylesCellXfsAddXf(0,0,0,0,OXP_ALIGN_VERT_NONE,OXP_ALIGN_HOZ_CENTER,0);
excel.StylesCellXfsAddXf(2,1,0,1,OXP_ALIGN_VERT_NONE,OXP_ALIGN_HOZ_CENTER,0);
excel.StylesCellXfsEnd();
excel.StylesEnd();


3. Worksheet 정의

excel.WorkSheetBegin("Test1", 1, 1, 1, 1);

excel.WorkSheetColumnsBegin();
excel.WorkSheetColumnsAddColumn(4,20, false, true);
excel.WorkSheetColumnsEnd();
excel.WorkSheetDataBegin();
excel.WorkSheetDataRowBegin(1);
excel.WorkSheetDataRowAddColumnLng (2, 1000, 1,NULL, 0, 1);
excel.WorkSheetDataRowEnd();
excel.WorkSheetDataRowBegin(2);
excel.WorkSheetDataRowAddColumnBool (1, true, 1, NULL);
//excel.WorkSheetDataRowAddColumnBool (2, false);
excel.WorkSheetDataRowAddColumnInt (3, 100, 0);
excel.WorkSheetDataRowAddColumnDbl (4, 100.101);
excel.WorkSheetDataRowAddColumnLng (5, 1000);
excel.WorkSheetDataRowAddColumnDate (6, 37572);
excel.WorkSheetDataRowAddColumnStr (7, "TEST");
excel.WorkSheetDataRowAddColumnStr (8, "TEST");
excel.WorkSheetDataRowAddColumnStr (9, "TEST");
excel.WorkSheetDataRowAddColumnStr (10,"TEST2");
excel.WorkSheetDataRowEnd();
excel.WorkSheetDataRowBegin(3);
excel.WorkSheetDataRowAddColumnDbl (3, 0, -1, "D2+D3");
excel.WorkSheetDataRowAddColumnDbl (4, 200.101);
excel.WorkSheetDataRowEnd();
excel.WorkSheetDataEnd();
excel.WorkSheetEnd(false);

4. 도형, 컨트롤 삽입
excel.DrawingsBegin();

excel.DrawingsShapeBegin(L"CHECK1");
excel.DrawingsShapeObjectBegin(OXP_CONTROL_TYPE_CHECKBOX, 1, 1);
excel.DrawingsShapeObjectAddTextVAlign(OXP_ALIGN_VERT_CENTER);
excel.DrawingsShapeObjectAddFormulaLink(1,1);
excel.DrawingsShapeObjectEnd();
excel.DrawingsShapeAddText(L"CHECK1");
excel.DrawingsShapeEnd();
excel.DrawingsShapeBegin(L"DROPDOWN1");
excel.DrawingsShapeObjectBegin(OXP_CONTROL_TYPE_DROPDOWN, 1, 2);
excel.DrawingsShapeObjectAddFormulaRange(L"Test2!A1:A10");
excel.DrawingsShapeObjectAddFormulaLink(1,2);
excel.DrawingsShapeObjectAddDropLines(8);
excel.DrawingsShapeObjectAddSelection(2);
excel.DrawingsShapeObjectEnd();
excel.DrawingsShapeEnd();
excel.DrawingsShapeBegin(L"DROPDOWN2");
excel.DrawingsShapeObjectBegin(OXP_CONTROL_TYPE_DROPDOWN, 1, 3);
excel.DrawingsShapeObjectAddAttribute(0,1,7,1,5,16);
excel.DrawingsShapeObjectAddFormulaLink(1,3);
excel.DrawingsShapeObjectAddDropLines(4);
excel.DrawingsShapeObjectAddSelection(2);
excel.DrawingsShapeObjectAddListItem(L"삽입1");
excel.DrawingsShapeObjectAddListItem(L"삽입2");
excel.DrawingsShapeObjectAddListItem(L"삽입3");
excel.DrawingsShapeObjectAddListItem(L"삽입4");
excel.DrawingsShapeObjectAddListItem(L"삽입5");
excel.DrawingsShapeObjectAddListItem(L"삽입6");
excel.DrawingsShapeObjectAddListItem(L"삽입7");
excel.DrawingsShapeObjectEnd();
excel.DrawingsShapeEnd();
excel.DrawingsShapeBegin(L"SPINNER1");
excel.DrawingsShapeObjectBegin(OXP_CONTROL_TYPE_SPINNER, 1, 4);
excel.DrawingsShapeObjectAddAttribute(10,10,100,10,10,16);
excel.DrawingsShapeObjectAddFormulaLink(2,4);
excel.DrawingsShapeObjectEnd();
excel.DrawingsShapeEnd();
excel.DrawingsShapeBegin(L"LISTBOX1");
excel.DrawingsShapeObjectBegin(OXP_CONTROL_TYPE_LISTBOX, 1, 5,true, 2, 0);
excel.DrawingsShapeObjectAddAttribute(0,0,6,1,4,16);
excel.DrawingsShapeObjectAddFormulaRange(L"Test2!A1:A10");
excel.DrawingsShapeObjectAddFormulaLink(1,5);
excel.DrawingsShapeObjectAddSelType(OXP_CONTROL_SELTYPE_SINGLE);
excel.DrawingsShapeObjectAddLCT(OXP_CONTROL_LCT_NORMAL);
excel.DrawingsShapeObjectEnd();
excel.DrawingsShapeEnd();
excel.DrawingsShapeBegin(L"GROUPBOX1");
excel.DrawingsShapeObjectBegin(OXP_CONTROL_TYPE_GROUPBOX, 1, 6,true, 0, 1);
excel.DrawingsShapeObjectEnd();
excel.DrawingsShapeEnd();
excel.DrawingsShapeBegin(L"RADIO1");
excel.DrawingsShapeObjectBegin(OXP_CONTROL_TYPE_RADIO, 1, 6);
excel.DrawingsShapeObjectAddTextVAlign(OXP_ALIGN_VERT_CENTER);
excel.DrawingsShapeObjectAddFormulaLink(1,6);
excel.DrawingsShapeObjectEnd();
excel.DrawingsShapeAddText(L"OPTION1");
excel.DrawingsShapeEnd();
excel.DrawingsShapeBegin(L"RADIO2");
excel.DrawingsShapeObjectBegin(OXP_CONTROL_TYPE_RADIO, 1, 7);
excel.DrawingsShapeObjectAddTextVAlign(OXP_ALIGN_VERT_CENTER);
excel.DrawingsShapeObjectAddFormulaLink(1,6);
excel.DrawingsShapeObjectEnd();
excel.DrawingsShapeAddText(L"OPTION2");
excel.DrawingsShapeEnd();

excel.DrawingsEnd();
 

* 이걸 제작할 당시에는 오픈소스가 없었는데 지금은 널렸네요. 풀소스를 공유하고 싶은데 너무 오래된거라 찾을수가 없네요.