'ADO'에 해당하는 글 2건

http://mashedon.egloos.com/660045

좋네요


WRITTEN BY
그건일
게임개발자

받은 트랙백이 없고 , 댓글이 없습니다.
secret

소스 :  

xlsreader.zip



csv 파일로 뽑으면 읽기 편리하지만 그러면 xls 을 csv 로 변환하는 과정을 거쳐야 하므로 불편합니다.
엑셀파일을 읽기 위해 ado 를 사용해야하는데 엑셀파일을 읽기위해서는 드라이버가 필요합니다.
(office 가 설치되어있어야 한다는 의미)

의도하지 않았지만 수식의 결과값을 읽어올 수 있습니다. (그래서 csv 변환 과정이 필요 없습니다.)
예: =sum(A1:A4)


//-------------------------------- 
// C++ 코드
//--------------------------------

BAdoExcel excel;

xlsreader.zip


excel.Open("sample.xlsx", "Sheet1");
for(int r=0; r<excel.m_row; r++)
{
for(int c=0; c<excel.m_col; c++)
{
printf_s("%d,%d = %s\n", r, c, excel.GetValue(r, c));
}
}

이런 형식으로 사용합니다.

수식으로 작성된 값도 읽을 수 있으며 여러모로 좋으나 단점이 있습니다.
ADO 가 DB 를 읽는 방식으로 되어있어서 생기는 문제로 추측됩니다.

단점


첫줄은 읽을 수 없음
  첫번째 라인은 컬럼명으로 인식합니다. 그래서 값으로 읽어올 수 없습니다.

두번째 줄의 값이 기준 타입이 됩니다
 1개의 컬럼은 동일의 타입 값만 들어갈 수 있습니다. (DB 에서 그렇쵸)
 그래서 엑셀 역시 그런식으로 추측됩니다.
 만약 A 열에 글자를 쓰게 되면 읽을 수 없게 됩니다.


추가
lua_tinker 관련 코드를 추가합니다.
스크립트에서 사용할 수 있도록 만들어서 제공하기 위해 제작하였습니다.

//------------------------------------------------
// lua_tinker bind code
//------------------------------------------------
lua_State* L = lua_open();
luaopen_base(L);
luaopen_string(L);

lua_tinker::class_add<BAdoExcel>(L, "Excel");
lua_tinker::class_con<BAdoExcel>(L, lua_tinker::constructor<>());
lua_tinker::class_def<BAdoExcel>(L, "Open", &BAdoExcel::Open);
lua_tinker::class_def<BAdoExcel>(L, "Val", &BAdoExcel::GetValue);
lua_tinker::class_mem<BAdoExcel>(L, "row", &BAdoExcel::m_row);
lua_tinker::class_mem<BAdoExcel>(L, "col", &BAdoExcel::m_col);

//------------------------------------------------
// lua code
//------------------------------------------------
e = Excel()
e:Open("sample.xls", "Sheet1");
print("row:" .. e.row);
print("col:" .. e.col);
for r=0, e.row-1, 1 do
for c=0, e.col-1, 1 do
  print("[" .. r .. "][" .. c .. "][" .. e:Val(r,c) .. "]");
end
end
 



WRITTEN BY
그건일
게임개발자

받은 트랙백이 없고 , 댓글  4개가 달렸습니다.
  1. 학교 과제하는데 엑셀 연동이 필요해서 검색하던중 방문했습니다.

    정말 필요한 자료인데요....소스코드 다운로드가 안되네요.....

    kkhawn@gmail.com 이쪽으로 소스코드 보내주시던지 아님 수정좀 해주세요 ㅠㅠ
  2. ㄴ수정했습니다.
    • 감사합니다!!!!ㅠㅠ 학기과제라서 괜찮아요 ㅎㅎ 엑셀파일에 저장된 성적 받아와서 이것저것하는 프로그램 만들꺼거든요 ㅎㅎ 아직 어떻게 쓰는지 잘은 모르겠지만 하다보면 되겠죠? 감사합니다 ㅠㅠ
  3. 코드 부분에서 아래 부분은 어떤 역할을 수행 하나요?
    BAdoAutoInit::BAdoAutoInit()
    {
    CoInitialize(NULL);
    }

    BAdoAutoInit::~BAdoAutoInit()
    {
    CoUninitialize();
    }

    그리고 1행인 컬럼명 들을 불러올 수 있나요?
secret