"Daniel Bowett" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] >I am trying to create an excel document that displays a table of data. It does >exactly what I want but takes a long time. I am >writing around 1000 rows and it takes around a second to do each row. > > Is there a quicker way to write this? The reason I want excel is this needs > to read and manipulated by management. > > The function I am using is: > > def createExcel(data): > xlApp = Dispatch("Excel.Application") > wb = xlApp.Workbooks.Add() > xlApp.Visible = 1 > ws = wb.Worksheets[0]; > > headers = ["Sales Rank", "UPC", "Description", "Stock", "Manifest Stock", > "Total Stock", "Week Sales", "Price", "Total Price", > "Days Cover"] > > column = 1 > for each in headers: > xlApp.ActiveSheet.Cells(1, column).Value = each > column = column + 1 > > row = 1 > for eachline in data: > xlApp.ActiveSheet.Cells(row, 1).Value = row > xlApp.ActiveSheet.Cells(row, 2).Value = eachline[0] > xlApp.ActiveSheet.Cells(row, 3).Value = eachline[1] > xlApp.ActiveSheet.Cells(row, 4).Value = eachline[2] > xlApp.ActiveSheet.Cells(row, 5).Value = eachline[3] > xlApp.ActiveSheet.Cells(row, 6).Value = eachline[4] > xlApp.ActiveSheet.Cells(row, 7).Value = eachline[5] > xlApp.ActiveSheet.Cells(row, 8).Value = eachline[6] > xlApp.ActiveSheet.Cells(row, 9).Value = eachline[7] > xlApp.ActiveSheet.Cells(row, 10).Value = eachline[8] row = row + 1 >
If you preformat the data including the row number, you can insert it en masse using a Range object. This runs in just a couple of seconds: from win32com.client import Dispatch data=[(x,'data1','data2','data3','data4','data5','data6','data7','data8','data9') for x in xrange(1000)] def createExcel(data): xlApp = Dispatch("Excel.Application") wb = xlApp.Workbooks.Add() xlApp.Visible = 1 ws = wb.Worksheets[0]; headers = ["Sales Rank", "UPC", "Description", "Stock", "Manifest Stock", "Total Stock", "Week Sales", "Price", "Total Price", "Days Cover"] column = 1 for each in headers: xlApp.ActiveSheet.Cells(1, column).Value = each column = column + 1 xlApp.ActiveSheet.Range("A2:J1001").Value=data createExcel(data) Roger ----== Posted via Newsfeeds.Com - Unlimited-Unrestricted-Secure Usenet News==---- http://www.newsfeeds.com The #1 Newsgroup Service in the World! 120,000+ Newsgroups ----= East and West-Coast Server Farms - Total Privacy via Encryption =---- -- http://mail.python.org/mailman/listinfo/python-list