[python] Excel 스프레드 시트에 쓰기

저는 Python을 처음 사용합니다. 프로그램의 데이터를 스프레드 시트에 써야합니다. 온라인에서 검색했으며 사용 가능한 많은 패키지 (xlwt, XlsXcessive, openpyxl)가있는 것 같습니다. 다른 사람들은 .csv 파일에 쓰도록 제안합니다 (CSV를 사용하지 않았으며 실제로 무엇인지 이해하지 못합니다).

이 프로그램은 매우 간단합니다. 두 개의 목록 (부동)과 세 개의 변수 (문자열)가 있습니다. 두 목록의 길이를 모르며 아마도 같은 길이가 아닐 것입니다.

아래 그림과 같이 레이아웃을 원합니다.

레이아웃 샘플

분홍색 열에는 첫 번째 목록의 값이 있고 녹색 열에는 두 번째 목록의 값이 있습니다.

가장 좋은 방법은 무엇입니까?

추신 : 저는 Windows 7을 실행하고 있지만이 프로그램을 실행하는 컴퓨터에 반드시 Office가 설치되어 있지는 않습니다.

import xlwt

x=1
y=2
z=3

list1=[2.34,4.346,4.234]

book = xlwt.Workbook(encoding="utf-8")

sheet1 = book.add_sheet("Sheet 1")

sheet1.write(0, 0, "Display")
sheet1.write(1, 0, "Dominance")
sheet1.write(2, 0, "Test")

sheet1.write(0, 1, x)
sheet1.write(1, 1, y)
sheet1.write(2, 1, z)

sheet1.write(4, 0, "Stimulus Time")
sheet1.write(4, 1, "Reaction Time")

i=4

for n in list1:
    i = i+1
    sheet1.write(i, 0, n)



book.save("trial.xls")

나는 당신의 모든 제안을 사용하여 이것을 썼습니다. 작업이 완료되지만 약간 개선 될 수 있습니다.

for 루프 (list1 값)에서 생성 된 셀을 과학적 또는 숫자로 어떻게 포맷합니까?

값을 자르고 싶지 않습니다. 프로그램에 사용 된 실제 값은 소수점 이하 약 10 자리입니다.



답변

import xlwt

def output(filename, sheet, list1, list2, x, y, z):
    book = xlwt.Workbook()
    sh = book.add_sheet(sheet)

    variables = [x, y, z]
    x_desc = 'Display'
    y_desc = 'Dominance'
    z_desc = 'Test'
    desc = [x_desc, y_desc, z_desc]

    col1_name = 'Stimulus Time'
    col2_name = 'Reaction Time'

    #You may need to group the variables together
    #for n, (v_desc, v) in enumerate(zip(desc, variables)):
    for n, v_desc, v in enumerate(zip(desc, variables)):
        sh.write(n, 0, v_desc)
        sh.write(n, 1, v)

    n+=1

    sh.write(n, 0, col1_name)
    sh.write(n, 1, col2_name)

    for m, e1 in enumerate(list1, n+1):
        sh.write(m, 0, e1)

    for m, e2 in enumerate(list2, n+1):
        sh.write(m, 1, e2)

    book.save(filename)

자세한 설명 :
https://github.com/python-excel


답변

pandas의 DataFrame.to_excel 을 사용하십시오 . Pandas를 사용하면 기능이 풍부한 데이터 구조로 데이터를 표현할 수 있으며 Excel 파일에서도 읽을 수 있습니다 .

먼저 데이터를 DataFrame으로 변환 한 다음 Excel 파일에 다음과 같이 저장해야합니다.

In [1]: from pandas import DataFrame
In [2]: l1 = [1,2,3,4]
In [3]: l2 = [1,2,3,4]
In [3]: df = DataFrame({'Stimulus Time': l1, 'Reaction Time': l2})
In [4]: df
Out[4]:
   Reaction Time  Stimulus Time
0              1              1
1              2              2
2              3              3
3              4              4

In [5]: df.to_excel('test.xlsx', sheet_name='sheet1', index=False)

그리고 나오는 Excel 파일은 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

팬더가 불평 할 경우 두 목록의 길이가 같아야합니다. 이 문제를 해결하려면 모든 결 측값을로 바꿉니다 None.


답변

  • xlrd / xlwt (표준) : 파이썬은 표준 라이브러리에이 기능이 없지만 xlrd / xlwt 를 Excel 파일을 읽고 쓰는 “표준”방법 이라고 생각 합니다. 통합 문서를 만들고, 시트를 추가하고, 데이터 / 수식을 작성하고, 셀을 포맷하는 것은 매우 쉽습니다. 이 모든 것을 필요로하면이 라이브러리에서 가장 성공할 수 있습니다. 나는 당신이 대신 openpyxl을 선택할 수 있다고 생각하며 꽤 비슷할 것입니다. 그러나 나는 그것을 사용하지 않았습니다.

    xlwt를 사용하여 셀의 서식을 지정하려면 XFStyle시트에 쓸 때 스타일을 정의 하고 포함하십시오. 다음은 숫자 형식이 많은 예입니다 . 아래 예제 코드를 참조하십시오.

  • Tablib (강력하고 직관적 인) : Tablib 는 테이블 형식의 데이터 작업을위한보다 강력하지만 직관적 인 라이브러리입니다. csv, json 및 yaml과 같은 다른 형식뿐만 아니라 여러 시트로 Excel 통합 문서를 작성할 수 있습니다. 배경색과 같은 서식이 지정된 셀이 필요하지 않은 경우이 라이브러리를 사용하는 것이 좋습니다.

  • csv (easy) : 컴퓨터의 파일은 text 또는 binary 입니다. 텍스트 파일은 줄 바꿈 및 탭과 같은 특수 파일을 포함하여 문자 일 뿐이며 어디서나 쉽게 열 수 있습니다 (예 : 메모장, 웹 브라우저 또는 Office 제품). csv 파일은 특정 방식으로 형식이 지정된 텍스트 파일입니다. 각 줄은 쉼표로 구분 된 값 목록입니다. 파이썬 프로그램은 쉽게 텍스트를 읽고 쓸 수 있으므로 csv 파일은 파이썬 프로그램에서 Excel (또는 다른 파이썬 프로그램)로 데이터를 내보내는 가장 쉽고 빠른 방법입니다.

    Excel 파일은 바이너리이며 파일 형식을 알고있는 특수 라이브러리가 필요합니다. 따라서 파이썬 용 추가 라이브러리 또는 Microsoft Excel, Gnumeric 또는 LibreOffice와 같은 특수 프로그램을 읽고 쓰려면이 라이브러리가 필요합니다.


import xlwt

style = xlwt.XFStyle()
style.num_format_str = '0.00E+00'

...

for i,n in enumerate(list1):
    sheet1.write(i, 0, n, fmt)


답변

파이썬 용 Excel 모듈을 조사한 결과 openpyxl 이 가장 좋습니다.

무료로 제공되는 Python으로 지루한 물건 자동화하기 openpyxl 에 대한 자세한 내용 이 포함 된 장을 읽거나 문서 읽기 사이트를 확인할 수 있습니다. openpyxl을 사용하기 위해 Office 또는 Excel을 설치할 필요가 없습니다.

프로그램은 다음과 같습니다.

import openpyxl
wb = openpyxl.load_workbook('example.xlsx')
sheet = wb.get_sheet_by_name('Sheet1')

stimulusTimes = [1, 2, 3]
reactionTimes = [2.3, 5.1, 7.0]

for i in range(len(stimulusTimes)):
    sheet['A' + str(i + 6)].value = stimulusTimes[i]
    sheet['B' + str(i + 6)].value = reactionTimes[i]

wb.save('example.xlsx')


답변

CSV는 쉼표로 구분 된 값을 나타냅니다. CSV는 텍스트 파일과 유사하며 .CSV 확장자 를 추가하여 간단하게 만들 수 있습니다.

예를 들어 다음 코드를 작성하십시오.

f = open('example.csv','w')
f.write("display,variable x")
f.close()

이 파일을 Excel로 열 수 있습니다.


답변

import xlsxwriter


# Create an new Excel file and add a worksheet.
workbook = xlsxwriter.Workbook('demo.xlsx')
worksheet = workbook.add_worksheet()

# Widen the first column to make the text clearer.
worksheet.set_column('A:A', 20)

# Add a bold format to use to highlight cells.
bold = workbook.add_format({'bold': True})

# Write some simple text.
worksheet.write('A1', 'Hello')

# Text with formatting.
worksheet.write('A2', 'World', bold)

# Write some numbers, with row/column notation.
worksheet.write(2, 0, 123)
worksheet.write(3, 0, 123.456)

# Insert an image.
worksheet.insert_image('B5', 'logo.png')

workbook.close()


답변

다음 라이브러리도 살펴보십시오.

xlwings- 통합 문서 및 차트 조작은 물론 Python에서 스프레드 시트로 데이터를 가져 오거나 내보낼 수 있습니다.

ExcelPython -VBA 대신 Python에서 UDF (사용자 정의 함수) 및 매크로를 작성하기위한 Excel 추가 기능