728x90
반응형
프로그램을 하면 엑셀 파일을 파싱하는 작업을 하는 경우가 종종 있다.
java에선 poi를 통해서 하면 되지만.. 파이썬은 처음인지라....
찾아보니 openpyxl 라이브러리를 알게 되었다 사용법도 간단한거 같아 사용했다.
1. 라이브러리 설치
pip install openpyxl
이후는 임포트해서 사용하면 된다.
사용법은 아래와 같다.
from openpyxl import load_workbook
def excel_test(request) :
file = request.FILES['fileInput']
print("upload File", file)
wb = openpyxl.load_workbook(filename=file, data_only=True)
sheet_ranges = wb['Sheet1']
for row in sheet_ranges.rows :
print(row)
파일을 읽고 sheet를 지정해주 읽으면 끝..
근데 나는 xls 파일 문제인지. 엑셀 파일 문제인지...
ExceptionType : <class 'zipfile.BadZipFile'>
Exception : File is not a zip file
이런 오류가 발생했다.. 찾아보니... xls만 아니라 xlsx에서도 문제가 되는거 같았다..
그래서 찾아보니. xls 파일을 읽을려면 xlrd를 사용해보라는 글을 봤다.
xlrd는 환경구축시 기본으로 되어 있는거 같지만 없다면
pip install xlrd
file = request.FILES['fileInput']
book = xlrd.open_workbook(file)
print(book.sheet_names())
이렇게 사용하면 또 오류가 발생한다;;;
Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\envs\excelcalculater\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\ProgramData\Anaconda3\envs\excelcalculater\lib\site-packages\django\core\handlers\base.py", line 179, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "D:\pythonProject\excelcalculater\ExcelCalculate\calculate\views.py", line 18, in calculate
book = xlrd.open_workbook(file)
File "C:\ProgramData\Anaconda3\envs\excelcalculater\lib\site-packages\xlrd\__init__.py", line 110, in open_workbook
filename = os.path.expanduser(filename)
File "C:\ProgramData\Anaconda3\envs\excelcalculater\lib\ntpath.py", line 293, in expanduser
path = os.fspath(path)
TypeError: expected str, bytes or os.PathLike object, not InMemoryUploadedFile
웹상에서 구축을 하다 보니 파일 위치를 정상적으로 찾지 못하는거 같다.
아래의 방법으로 하면 파일을 읽는다.. xlrd의 경우 xlsx파일도 리딩이 가능하다.
file = request.FILES['fileInput']
wb = xlrd.open_workbook(file_contents=file.read())
print(wb.sheet_names())
=======================
wb.sheet_name() # sheet명 읽기 리턴은 리스트형식
wb.sheet_by_name(sheetname) # sheet 이름으로 가지고오기
wb.sheet_by_index(index) # sheet index 번호로 가지고 오기
sheet = wb.sheet_by_name(i)
sheet.nrows #해당 sheet의 row값
sheet.ncols #해당 sheet의 col 값
sheet.row_values(row_index) # sheet row값 읽기
sheet.cell_value(row_index,cell_index) #셀 값 가져오기 row값을 먼저 세팅
python xlrd를 가지고 참고할만한 소스를 아래에서 찾으시면 될듯 하여 공유 드려요~
www.programcreek.com/python/example/52921/xlrd.open_workbook
728x90
반응형
'Dev > Python' 카테고리의 다른 글
Python-library[word2word]-단어번역 (0) | 2020.09.16 |
---|---|
Python 2차원 배열 (0) | 2020.09.04 |
python-ERROR: Failed cleaning build dir for torch (0) | 2020.08.14 |
python Lower & Upper (소문자& 대문자) (0) | 2020.08.11 |
TypeError: can only concatenate str (not "int") to str (0) | 2020.08.10 |