Excel MyExcel

엑셀 Automation을 사용하여 네이티브 C++에서 엑셀에 접근해서 값을 읽고 저장 해보자.

C++에서 엑셀을 조작할 수 있는 클래스를 만들어 보았다. 엑셀을 제어하는 기본적인 이론은 excel_test.html을 참고한다.

아래는 MyClass 헤더의 일부이다.

class MyExcel

{

public:

    MyExcel();

    ~MyExcel();

 

    bool    Load( const char* szFileName );

    bool    Save();

    bool    SaveAs( const char* szFileName );

    StringBoolTable& GetTable()

    {

        return m_table;

    }

 

protected:

    StringBoolTable    m_table;

    std::string        m_szFileName;

};

Load( )로 엑셀 파일을 로딩후, Save( )나  SaveAs( )로 저장한다. m_table은 엑셀에서 로딩한 데이터를 보관하고 있다. StringBoolTable은 m_table에서 수정이 가해지면  bDirty 플래그를 true로 셋팅한다.

실제 사용예는 아래와 같다.

int _tmain(int argc, _TCHAR* argv[])

{

    //TestExcel();

 

    MyExcel excel;

    if( excel.Load( GetFullPath( "test.xlsx" ).c_str() ) )

    {

        StringBoolTable& table = excel.GetTable();

        table.IncRow();

        //입력값이 -1이면 마지막 행에 입력, 엑셀 방식으로 저장을 위해 -1씩 더해줌

        table.Set( -1, 4-1, "엑셀 테스트", true );

    }

 

    excel.SaveAs( GetFullPath( "test_1.csv" ).c_str() );

    excel.SaveAs( GetFullPath( "test_2.xls" ).c_str() );

    excel.SaveAs( GetFullPath( "test_3.xlsx" ).c_str() );

    return 0;

}

table.IncRow( )는 마지막 행의 값을 증가 시킨다.

값을 수정 할려면 table.Set( ) 메쏘드를 이용해서 값을 넣는다.

table.Set( )에서 엑셀 행과 열의 숫자보다 -1씩 더해서 입력한다. 엑셀은 1부터 시작하지만, C++은 0부터 시작하기 때문이다.  입력값이 -1이면, 마지막 행의 값을 사용한다.

현재 지원되는 확장자는 3가지만 지원  하도록 만들었다.

프로젝트 : Excel_MyExcel.zip