2013-08-01 2 views
10

기존 통합 문서를 열 수 있지만 해당 통합 문서 내에서 기존 워크 시트를 열 수있는 방법이 없습니다. 이 일을 할 수있는 방법이 있습니까?xlsxwriter : 내 통합 문서에 기존 워크 시트를 여는 방법이 있습니까?

+2

[xlsxwriter] (https://pypi.python.org/pypi/XlsxWriter) 라이브러리는 Excel 파일을 작성하기위한 것으로서 읽을 수 없습니다. – alecxe

+1

이 http://stackoverflow.com/questions/18849535/how-to-write-update-data-into-cells-of-existing-xlsx-workbook-using-xlsxwriter-i – shellbye

답변

15

xlsxwriter으로 기존 xlsx 파일에 추가 할 수 없습니다.

기존의 엑셀 파일을 읽고 쓸 수있는 openpyxl 모듈이 있지만, 그렇게하는 방법은 모든 정보를 어떻게 든 저장하는 (데이터베이스 또는 배열), 엑셀 파일을 읽는 것과 관련이 있습니다. workbook.close()으로 전화를 걸면 모든 정보를 xlsx 파일에 씁니다.

마찬가지로, xlsx 문서에 "추가"하는 방법을 사용할 수 있습니다. 저는 최근에 xlsx 파일을 추가해야했습니다. 왜냐하면 GPS 데이터가 메인 워크 시트에 들어오는 여러 가지 테스트가 있었기 때문에 xlsx 파일을 추가해야했기 때문에 테스트가 시작될 때마다 새 시트를 추가해야했습니다. 내가 openpyxl없이이 문제를 얻을 수있는 유일한 방법은 ... xlrd와 엑셀 파일을 읽고 다음 행과 열을 통해 실행하는 것이 었습니다

cells = [] 
for row in range(sheet.nrows): 
    cells.append([]) 
    for col in range(sheet.ncols): 
     cells[row].append(workbook.cell(row, col).value) 

당신은하지만, 배열이 필요하지 않습니다. 예를 들어, 이것은 완벽하게 잘 작동 그러나

import xlrd 
import xlsxwriter 

from os.path import expanduser 
home = expanduser("~") 

# this writes test data to an excel file 
wb = xlsxwriter.Workbook("{}/Desktop/test.xlsx".format(home)) 
sheet1 = wb.add_worksheet() 
for row in range(10): 
    for col in range(20): 
     sheet1.write(row, col, "test ({}, {})".format(row, col)) 
wb.close() 

# open the file for reading 
wbRD = xlrd.open_workbook("{}/Desktop/test.xlsx".format(home)) 
sheets = wbRD.sheets() 

# open the same file for writing (just don't write yet) 
wb = xlsxwriter.Workbook("{}/Desktop/test.xlsx".format(home)) 

# run through the sheets and store sheets in workbook 
# this still doesn't write to the file yet 
for sheet in sheets: # write data from old file 
    newSheet = wb.add_worksheet(sheet.name) 
    for row in range(sheet.nrows): 
     for col in range(sheet.ncols): 
      newSheet.write(row, col, sheet.cell(row, col).value) 

for row in range(10, 20): # write NEW data 
    for col in range(20): 
     newSheet.write(row, col, "test ({}, {})".format(row, col)) 
wb.close() # THIS writes 

, I는 그것이 I 데이터를 조작 되었기 때문에, 데이터를 판독하는 2 차원 배열로 저장하기 쉬운 것을 발견하고 또 다시 입력을 수신하고, 테스트가 끝날 때까지 Excel 파일에 쓰고 싶지 않았습니다. xlsxwriter와 마찬가지로 쉽게 할 수 있습니다. 어쨌든 .close()에 전화하기 전까지는 xlsxwriter와 마찬가지로 쉽게 할 수 있습니다.

+0

정말 같으면 참조 "매우 복잡한 구조"라고 말하지 않습니다. 이 구조는 각 시트가 셀 내용이있는 XML 파일 인 시트의 zipfile 아카이브 일뿐입니다. XlsxWriter는 ** writer **가되기 위해 액세스, 읽기 및 편집하기가 쉽습니다. ** 독자가 아니 **. –

+1

@AlexanderHuszagh 감사합니다! – dylnmc

+0

굉장한데, 지금은 훌륭한 대답입니다. +1. –