2015-05-19 151 views
3

我想創建一個出口在我的Django以Excel功能如下:日期時間問題xlsxwriter

def export_myreport(request, sd, ed): 
    from xlsxwriter.workbook import Workbook 
    import cStringIO as StringIO 
    from django.utils.encoding import smart_str 

    # create a workbook in memory 
    output = StringIO.StringIO() 

    wb = Workbook(output) 

    bg = wb.add_format({'bg_color': '#9CB640', 'font_color': 'black'}) 
    bg2 = wb.add_format({'bg_color': '#FFFFFF', 'font_color': 'black'}) 

    ws = wb.add_worksheet('My Report') 

    row_num = 0 

    summary = MyModel.objects.filter(time__range = (sd, ed)).select_related() 

    row_num += 2 
    row = [ 
     smart_str(u"Time"), 
     smart_str(u"Item"), 
     smart_str(u"User") 
    ] 
    for col_num in xrange(len(row)): 
     ws.write(row_num, col_num, row[col_num], bg) 

    for s in summary: 
     row_num += 1 
     row2 = [ 
      s.time, 
      s.model_name, 
      s.user.first_name 
     ] 
     for col_num in xrange(len(row2)): 
      ws.write(row_num, col_num, row2[col_num], bg2) 

    wb.close() 

    output.seek(0) 
    response = HttpResponse(output.read(), content_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") 
    response['Content-Disposition'] = "attachment; filename=myreport.xlsx" 

    return response 

但我正在逐漸與日期時間格式的一些問題!也許我在這裏想念的東西?

以下是錯誤我得到:

TypeError at /myapp/export_myreport/2015-05-01/2015-05-19 
can't subtract offset-naive and offset-aware datetimes 

編輯:

這就是我如何調用我的HTML鏈接:

<a href="export_myreport/{{begindate}}/{{enddate}}" class="btn btn-default pull-right" role="button">Export to XLSX</a> 

這裏{{begindate}}{{enddate}}屬於角變量。

+0

我發送他們在我的網址 – Abhishek

+0

請發佈完整的回溯。 – alecxe

+0

完成!發佈追蹤 – Abhishek

回答

1

Excel和XlsxWriter不支持日期/時間中的時區。

所以你需要在將它傳遞給XlsxWriter之前從日期時間中刪除或調整時區。

像這樣的東西從pytz文檔:

dt = datetime(2005, 3, 1, 14, 13, 21, tzinfo=utc) 
naive = dt.replace(tzinfo=None) 

也許這將更好地在Django處理雖然不是調整之前將它傳遞給XlsxWriter所有datetime數據。也許其他人可以添加一個建議。

+0

我在看這個..會很有用嗎? http://xlsxwriter.readthedocs.org/en/latest/working_with_dates_and_time.html – Abhishek

+0

不幸的是,這不會幫助你。您正在使用的'worksheet.write()'方法調用'worksheet.write_datetime()',以便得到相同的結果。您需要從Django返回的日期時間對象中移除/調整時區以使其正常工作。 – jmcnamara

+0

您好,我使用pytz解決了錯誤。我從tzinfo中刪除了UTC。但是現在日期以一種奇怪的格式出現。像這樣的東西... 42136.9037856372 ...不知道傳達什麼 – Abhishek