python 처리 excel 표

3300 단어 python
1. 사용 가능 한 제3자 라 이브 러 리
python 에서 엑셀 표를 처리 하고 자주 사용 하 는 라 이브 러 리 는 xlrd (엑셀 읽 기) 표, xlwt (엑셀 쓰기) 표, openpyxl (엑셀 표 읽 기 가능) 등 이 있 습 니 다.xlrd 는 데이터 가 비교적 큰 엑셀 표를 읽 을 때 openpyxl 보다 효율 이 높 기 때문에 저 는 스 크 립 트 를 쓸 때 xlrd 와 xlwt 라 이브 러 리 를 사 용 했 습 니 다.소개 및 다운로드 주 소 는 다음 과 같다. http://www.python-excel.org/ 이 라 이브 러 리 파일 들 은 기 존의 엑셀 표 내용 을 수정 하 는 기능 을 제공 하지 않 았 다.일반적으로 원 엑셀 의 내용 을 읽 고 처리 한 후에 새로운 엑셀 파일 을 쓸 수 밖 에 없다.
2. 흔히 볼 수 있 는 문제
python 을 사용 하여 엑셀 표를 처리 할 때 두 가지 까다 로 운 문 제 를 발견 했다. 유 니 코드 인 코딩 과 엑셀 에 기 록 된 시간 이다.
python 의 기본 문자 인 코딩 이 유 니 코드 이기 때문에 엑셀 에서 읽 은 중국 어 를 인쇄 하거나 중국어 이름 의 엑셀 표 나 sheet 을 읽 을 때 프로그램 오류 유 니 코드 인 코딩 오류: 'ascii' codec can 't encode characters in position 0 - 2: ordinal not in range (128) 를 알려 줍 니 다.이것 은 windows 에서 중국 어 는 gb 2312 인 코딩 방식 을 사 용 했 기 때문에 python 은 이 를 유 니 코드 와 ascii 로 디 코딩 하 는 것 이 정확 하지 않 아서 발생 한 오류 입 니 다.VAR. encode ('gb 2312') 를 사용 하면 중국어 인쇄 문 제 를 해결 할 수 있 습 니 다.(이상 하 게 도 결 과 를 출력 할 수 있 지만 중국어 가 아 닌 인 코딩 으로 표 시 됩 니 다.) 중국어 파일 이름 의 엑셀 표 에서 데 이 터 를 읽 으 려 면 파일 이름 앞 에 'u' 를 추가 하여 이 중국어 파일 이름 을 유 니 코드 로 인 코딩 할 수 있 습 니 다.
excel 에 서 는 시간 과 날짜 모두 부동 소수점 으로 표시 합 니 다.이 를 통 해 알 수 있 듯 이 '2013 년 3 월 20 일' 이 있 는 셀 이 '일반적인' 형식 으로 표시 한 후에 내용 이 '41353' 으로 바 뀌 었 다.셀 형식 이 날짜 로 바 뀌 었 을 때 내용 은 '2013 년 3 월 20 일' 로 바 뀌 었 다.xlrd 를 사용 하여 엑셀 의 날짜 와 시간 을 읽 은 후, 예 를 들 어 부동 소수점 을 얻 을 수 있 습 니 다.따라서 excel 에 기 록 된 날짜 와 시간 이 부동 소수점 일 때 도 괜 찮 습 니 다. 표 의 표시 방식 을 날짜 와 시간 으로 바 꾸 면 정상 적 인 표현 방식 을 얻 을 수 있 습 니 다.excel 에서 부동 소수점 1 로 1899 년 12 월 31 일 을 표시 합 니 다.
상용 함수
다음은 주로 xlrd, xlwt, datetime 에서 날짜 와 관련 된 함 수 를 소개 합 니 다.
import xlrd
import xlwt
from datetime

def testXlrd(filename):
    book=xlrd.open_workbook(filename)
    sh=book.sheet_by_index(0)
    print "Worksheet name(s): ",book.sheet_names()[0]
    print 'book.nsheets',book.nsheets
    print 'sh.name:',sh.name,'sh.nrows:',sh.nrows,'sh.ncols:',sh.ncols
    print 'A1:',sh.cell_value(rowx=0,colx=1)
    #  A3      
    print 'A2:',sh.cell_value(0,2).encode('gb2312')

def testXlwt(filename):
    book=xlwt.Workbook()
    sheet1=book.add_sheet('hello')
    book.add_sheet('word')
    sheet1.write(0,0,'hello')
    sheet1.write(0,1,'world')
    row1 = sheet1.row(1)
    row1.write(0,'A2')
    row1.write(1,'B2')
    
    sheet1.col(0).width = 10000
    
    sheet2 = book.get_sheet(1)
    sheet2.row(0).write(0,'Sheet 2 A1')
    sheet2.row(0).write(1,'Sheet 2 B1')
    sheet2.flush_row_data()
    
    sheet2.write(1,0,'Sheet 2 A3')
    sheet2.col(0).width = 5000
    sheet2.col(0).hidden = True
    
    book.save(filename)

if __name__=='__main__':
    testXlrd(u'  。xls')
    testXlwt('helloWord.xls')
    base=datetime.date(1899,12,31).toordinal()
    tmp=datetime.date(2013,07,16).toordinal()
    print datetime.date.fromordinal(tmp+base-1).weekday()

좋은 웹페이지 즐겨찾기