2012-04-11 2 views
0

Это первый раз, когда я использовал ReportLab, я попытался отредактировать существующий скрипт, который делает именно то, что я хочу сделать, но при попытке и запуске я получаю следующую ошибку сценарий.ReportLab - ошибка при создании таблицы

Script -

import os, arcgisscripting, datetime, getpass, string 

from reportlab.lib.pagesizes import A4 
from reportlab.platypus import * 
from reportlab.lib import colors 
from reportlab.lib.styles import ParagraphStyle 

myWorkspace = r"W:\City.gdb" 
myReportFolder = r"W:\Reports" 
myLogosFolder = r"W:\Logos" 
OpenPDF = "true" 

gp = arcgisscripting.create(9.3) 


#setup geoprocessor 
gp.workspace = myWorkspace 
gp.toolbox = "analysis" 
gp.OverwriteOutput = 1 
mySelectedGroupsFC = myWorkspace + os.sep + "SelectedGroups" 
myNewBusinessFC = myWorkspace + os.sep + "New_Businesses" 
myBufferFC = myWorkspace + os.sep + "Buffer" 
myReportTable = myWorkspace + os.sep + "FINAL_TABLE" 

#obtain Selected groups 
mySelGroupsCursor = gp.searchcursor(mySelectedGroupsFC) 
mySelectedGroups = mySelGroupsCursor.next() 

#obtain New Business groups 
myNewBusinessCursor = gp.searchcursor(myNewBusinessFC) 
myNewBusiness = myNewBusinessCursor.next() 

#obtain Buffer 
myBufferCursor = gp.searchcursor(myBufferFC) 
myBuffer = myBufferCursor.next() 

#setup PDF doc 
Author = getpass.getuser() #gets OS user name 
pdf_file_name = myNewBusiness.POSTCODE 
pdf_file = myReportFolder + os.sep + pdf_file_name + ".pdf" 

doc = SimpleDocTemplate(pdf_file, pagesize=A4) 

#array of report elements 
parts = [] 

# 
#HEADER 
# 
parstyle = ParagraphStyle(name='Title', fontName='Helvetica', fontSize=12, alignment=1, spaceAfter=20) 
p = Paragraph('<b><u>Report</u></b>', parstyle) 
parts.append(p) 

p = Paragraph('The following community groups are located within <b><u>' + myBuffer.Buffer + 'metres of - <b><u>' + myNewBusiness.Postcode + '<\b><\u>.',parstyle) 
parts.append(p) 

# 
#TABLE 
# 

while myBuffer: 
    parstyle = ParagraphStyle(name='Title', fontName='Helvetica', fontSize=11, alignment=0, spaceAfter=15, spaceBefore =15) 
    p = Paragraph('<b><u>Community groups within ' + myBuffer.Buffer + ' metres of ' + myNewBusiness.Postcode + '</u><\b>', parstyle) 
    parts.append(p) 

    data = [] 
    parstyle = ParagraphStyle(name='Title', fontName='Helvetica', fontSize=11, alignment=0)  

    while mySelectedGroups: 
     selectedGroups_desc = 'Community ID:'+ '<i>' + mySelectedGroups.Community_ID + '<\i>' + 'Organisation Name :' + mySelectedGroups.Organisation_Name 
     p = Paragraph(selectedGroups_desc, parstyle) 
     mySelectedGroups = mySelGroupsCursor.next() 


    #build and format table 
    t=Table(data, colWidths=(100,100)) 
    t.setStyle(TableStyle([ 
     ('ALIGN',(0,0),(-1,-1),'CENTER'), 
     ('VALIGN',(0,0),(-1,-1),'TOP'), 
     ('INNERGRID', (0,0), (-1,-1), 0.25, colors.black), 
     ('BOX', (0,0), (-1,-1), 0.25, colors.black), 
     ('TOPPADDING', (0,0), (-1,-1), 10), 
     ])) 
    parts.append(t) 

myBuffer = myBufferCursor.next() 

#Footnote 
parstyle = ParagraphStyle(name='Title', fontName='Helvetica', fontSize=11, alignment=0, spaceAfter=15, spaceBefore=15) 
p = Paragraph('''Should you have any further questions **''', parstyle) 
parts.append(p) 


#Build document 
doc.build(parts) 

del mySelGroupsCursor, myNewBusinessCursor, myBufferCursor 

#Open document 
if OpenPDF == "true": 
    os.startfile(pdf_file) 

ошибка, что я получаю:

Traceback (most recent call last): 
    File "C:\Python25\Lib\site-packages\Pythonwin\pywin\framework\scriptutils.py", line 325, in RunScript 
    exec codeObject in __main__.__dict__ 
    File "H:\Report_v2.py", line 100, in <module> 
    t=Table(data, colWidths=(100,100)) 
    File "C:\Python25\Lib\site-packages\reportlab\platypus\tables.py", line 236, in __init__ 
    raise ValueError("%s must have at least a row and column" % self.identity()) 
ValueError: <[email protected] 0 rows x unknown cols>... must have at least a row and column 

Любые идеи, что мне нужно делать, как я борюсь немного.

Спасибо.

ответ

1

Из-за ошибки и кода проблема заключается в том, что data - пустой массив []. Кажется, что ReportLab захлебывается, поэтому вам просто нужно предоставить некоторые данные в таблицу t, и она должна работать.