본문 바로가기
프로그래밍 관련/파이썬 액셀제어(xlrd)

파이썬 액셀제어 xlrd.개요. 공식문서

by 존버매니아.임베디드 개발자 2021. 11. 10.
반응형

파이썬으로 액셀 제어하는 라이브러리가 종류가 제법 많은 것 같다.

각 라이브러리의 장단점은 일단 잘 모르겠다. 

나는 원래 openpyxl 이라는 라이브러리를 사용하고 있었는데 왜 xlrd 라는걸 쓰게됐냐면

openpyxl을 사용하는데 어느날 파일의 시트이름을 쭉 print 시켜봤는데 수초 이상 시간이 오래걸리는걸 발견하였다.

그래서 openpyxl이 속도가 너무 느린거 같아서 다른걸 찾아보다가 xlrd 를 새로 공부하게 되었다.

xlrd가 특별히 속도가 빠른지 어떤지는 잘 모르겠다. 근데 사용방법이나 이런게 openpyxl이랑 거의 유사하더라.

근데 xlrd는 엑셀 읽기만 가능하고 write를 하려면 xlwt 라고 별도 라이브러리를 따로 써야한다.

 

※ 참고

xlrd는 xlsx를 지원하지 않고, .xls 만 지원된다.
openpyxl은 xls를 지원하지 않는다. .xlsx만 지원

참고로 엑셀 양식 기준으로는 xlsx가 더 최신양식이다.


라이브러리 홈페이지 아래 참조

xlrd — xlrd 2.0.1 documentation


1.설치

pip install xlrd


2.개요

import xlrd

file = xlrd.open_workbook("py_excel_test.xls")

# 파일내 sheet 갯수
print("number of sheet is %d" %file.nsheets)

# 파일내 sheet 들 이름 출력 (리턴 형식이 리스트임)
print(file.sheet_names())

#인덱스로 시트 선택
sheet = file.sheet_by_index(0)

#현재 시트의 이름, row 수, column 수 출력
print("현재 시트 이름 %s , row 수 %d , col 수 %d " %(sheet.name,sheet.nrows,sheet.ncols))

 참고로, row수, column 수는

 그냥 해당 시트에서 한칸이라도 뭔가 쓰여있는거 중에 가장 바깥쪽에 있는걸 기준으로 row,column을

  출력한다.


3. Row 접근, Col 접근,

import xlrd

file = xlrd.open_workbook("py_excel_test.xls")

#인덱스로 시트 선택
sheet = file.sheet_by_index(0)

#row 내용 출력(리턴 형식은 리스트임)
print(sheet.row_values(4))
print(sheet.row_values(5))

#column 내용 출력(리턴 형식은 리스트임)
print(sheet.col_values(4))
print(sheet.col_values(5))
>>> ['', 'Number', 'Memo', 'Data1', 'Data2', 'Data3', 'Data4', 'Data5', 'Out1', '', '']
>>> ['', 1.0, 'memo1', 'data11', 'data21', 'data31', 'data41', 'data51', 'out11', '', '']
>>> ['', '', '', '', 'Data2', 'data21', 'data22', 'data23', 'data24', 'data25', 'data26', 'data27', 'data28', '', '', '', '', '', '', '', '', '', 99.0]
>>> ['', '', '', '', 'Data3', 'data31', 'data32', 'data33', 'data34', 'data35', 'data36', 'data37', 'data38', '', '', '', '', '', '', '', '', '', '']

row_values 와 col_values에서 사용되는 인덱스는 0부터 시작하는 것에 유의하자.


4.특정 셀 접근

import xlrd

file = xlrd.open_workbook("py_excel_test.xls")

#인덱스로 시트 선택
sheet = file.sheet_by_index(0)

# 6행 7열 선택하는 3가지 방법
print(sheet.cell_value(6,7))

print(sheet.row_values(6)[7]) # row_values의 출력형태가 리스트고, 그 리스트의 멤버변수에 접근하는 것임 그래서 (6)[7]
                              # 괄호, 대괄호 헷갈리지 말 것.
print(sheet.col_values(7)[6])

 

반응형