Question

I'm calling a Python function that uses XlsxWriter to write some data out to excel through Ajax in my Django app. I used jQuery to bind the onclick method of one of my buttons to call this function. However, when I call it, Django gives me an error that says 'exportHistoExcel is not defined'. This is confusing me because all my other functions in the same script are recognized and are running, but that one function isn't defined for some reason. Could anyone help me out?

Here's my python script:

from xlsxwriter.workbook import Workbook

def exportHistoExcel(SE_filelocation, VTfile_location, filename):

    print('anything?')
    #new getFiringRates return statement:
    #    if generating_excel_file: return [bins, spikeanglebins, headanglebins, times, firingrates]
    #   else: return True
    #new getFiringRates parameter:
    #   generating_excel_file = False

    data = getFiringRates(SE_filelocation, VTfile_location, generating_excel_file = True)
    print(data)

    workbook = Workbook(filename)
    worksheet = workbook.add_worksheet()
    worksheet.write('A1', 'Bin (degrees)')
    worksheet.write('B1', '# of Spikes')
    worksheet.write('C1', '# of Samples')
    worksheet.write('D1', 'Time (sec)')
    worksheet.write('E1', 'Firing Rate')

    worksheet.write_column('A2', data[0])
    worksheet.write_column('B2', data[1])
    worksheet.write_column('C2', data[2])
    worksheet.write_column('D2', data[3])
    worksheet.write_column('E2', data[4])
    worksheet.write('A62', 360); worksheet.write('B62', '=$B$2')
    worksheet.write('C62', '=$C$2'); worksheet.write('D62', '=$D$2');   worksheet.write('E62', '=$E$2')


    histo = workbook.add_chart({'type': 'line'})
    histo.set_title({'name': 'Firing Rates'})
    histo.set_x_axis({'name': 'Bin (degrees)'})
    histo.set_y_axis({'name': 'Firing rate (sec^-1)'})
    histo.add_series({'values': '=Sheet1!$E$2:$E$61',
                      'line': {'color': 'black'},
                     'categories': '=Sheet1!$A$2:$A$61'})
    histo.set_legend({'delete_series': [0]})
    worksheet.insert_chart('F2', histo)


    workbook.close()

And here's my ajax.py file:

from django.utils import simplejson
from dajaxice.decorators import dajaxice_register
from hipercic.apps.NeuroCiC import models
from django.core.files import storage
import file_analysis
import sys

@dajaxice_register
def export_excel_file(request, id):
  print 'TRIAL ID', id

  try:
    trial = models.Trial.objects.get(pk=id)
  except:
    'Could not find trial.'
  else:
    print 'Found Trial'
    print('~/hipercic/apps/NeuroCiC/uploads/' + trial.spikes_file.url)
    SE_loc = '~/hipercic/apps/NeuroCiC/uploads/' + trial.spikes_file.url
    VT_loc = '~/hipercic/apps/NeuroCiC/uploads/' + trial.led_file.url
    print(SE_loc)
    print(VT_loc)
    exportHistoExcel(SE_loc, VT_loc, "demo.xlsx")
    return

The print statements in ajax are all printing to the terminal, but all the ones in exportHitoExcel are not. Why isn't it recognizing my python function?

Was it helpful?

Solution

It worked when I changed the

exportHistoExcel(SE_loc, VT_loc, "demo.xlsx")

line to this:

return simplejson.dumps({'scatter_data': file_analysis.exportHistoExcel("test.xlsx") })
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top