"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