나는 약간 다른 접근 방식을 취했으며 웹 응용 프로그램에서 xls 출력을 생성 할만큼 충분히 잘 작동하고있었습니다.
xlswriter 항목을 재정의하는 대신 Facelade 개체를 개발했습니다.이 개체는 내가하려는 작업과 일치했으며 기본 xlswriter 자산을 호출하여 작업을 수행했습니다.
import xlsxwriter
class ExcelWriter(object):
def getColFormatInfo(self, fieldname):
#some app-specific stuff...
f = FieldFormat.factory(self.rdb, fieldname)
# width = 30
label = f.SHORTNAME
width = max(f.LENGTH, len(label))
return width, label
def __init__(self, rdb, title):
self.rdb = rdb
self.fnp = "/tmp/%s.xlsx" % (title)
wb = self.workbook = xlsxwriter.Workbook(self.fnp)
#http://xlsxwriter.readthedocs.org/en/latest/format.html#set_bg_color
self.fmt_title = wb.add_format(dict(bold=True))
self.fmt_title.set_bg_color("#F5F5F5")
self.fmt_title.set_border(1)
self.fmt_colheader = wb.add_format(dict(bold=True))
self.fmt_colheader.set_bottom(2)
self.fmt_link = wb.add_format({'color': 'blue', 'underline': 1})
def add_worksheet(self, wsname):
return self.workbook.add_worksheet(wsname)
def write_title(self, ws, row, col, s):
ws.write(row, col, s, self.fmt_title)
def write_colheader(self, ws, row, col, s):
ws.write(row, col, s, self.fmt_colheader)
def write(self, ws, row, col, s):
ws.write(row, col, s)
def write_url(self, ws, row, col, url, s):
ws.write_url(row, col, url, self.fmt_link, s)
당신이 볼 수 있듯이, 내가 무엇을하고 있었던 것은 일부 XLS 포맷을 미리 계산하고 write_colheader 같은 것들을 그들 사용하는 것이다.
그러나 복잡한 xlswriter 작업을 수행하기 위해 사용자 친화적 인 간단한 함수를 만들 수있는 방법을 일반화 할 수 있습니다.
내가 사용하고있는 코드를 찾을 수 없지만 충분히 잘 작동합니다. 유일한 것은 많은 수작업 이었다는 것입니다. xyz을 쓰고 있던 코드의 1,13에 입력하십시오. 내 웹 응용 프로그램의 정상, html, 측면은 django-tables2을 사용하여 html을 생성했으며 훨씬 적은 코드였습니다.
그래서 내 계획은보고를 다시 작성하여보고 기반 프런트 엔드를 작성하여 ExcelWriter에 전달할 모든 핵심적인 명령을 처리 할 것입니다. 여전히 ExcelWriter가 필요합니다. API의 종류는 대략 비슷합니다.
아, 그리고 선언적 변경 사항을 제외하고는 즉시 새 구현에서 변경해야 할 사항 중 하나는 Json 파일에 배경색 # F5F5F5와 같은 서식 상수를 저장하고이를 초기화시 ExcelWriter에 전달하는 것입니다. : 추천
뭔가 다음 OPS에 관해서
self.fmt_title.set_bg_color(
self.j_config.get("fmt_title",{}).get("bg_color", "F5F5F5")
)
변수에 전달하는 것에 대한 언급 여기 가능한 해결 일부 업데이트 기능 인증 된 정의이다.
def add_worksheet(self, wsname):
ws = self.current_ws = self.workbook.add_worksheet(wsname)
return ws
#you'd also need to have a set_current_ws function
def write_url(self, row, col, url, s, ws=None, fmt=None):
ws = ws or self.current_ws
fmt = fmt or self.fmt_link
ws.write_url(row, col, url, fmt, s)
나는 이것이 해결책이라고 생각하지만 이것이 차트, 형식 등을 사용할 때 많은 다른 것들을 발견 할 것이라고 확신하는 첫 번째 장애물이므로 많은 노력이 필요합니다. 나는 여전히 다른 클래스를 만들고 기존 메소드를 오버라이드하는 대신에 새로운 메소드를 추가하는 대신에 다른 솔루션이 있기를 바란다. 어쩌면 나는 다른 방법이 없다는 가혹한 진리에 직면해야한다. –