python操作excel性能问题求助
http://bbs.chinaunix.net/thread-1586782-1-1.html
我刚刚用python写了一段操作excel的脚本,目的是把一个excel文件按照某一列中的字段拆分成多个文件,例如按照城市或者省份等,但是发现处理一个1700行的文件拆分成40多个文件时要运行30分钟左右,性能太慢,请高手帮忙看看怎么才能优化性能,谢谢。
新手写的脚本,请不要见笑,如下:
'''
Created on 2009-9-25
@author: vidon
'''
#_*_ coding:UTF-8 _*_
import os, sys, time
import win32com.client
xls=win32com.client.Dispatch("Excel.Application")
xls.Visible=False
source_path = input('请输入要操作的文件名路径与名称(例如:D:\ABC\BOOK.XLS):').replace('\r','')
target_path = input('请输入存放数据处理结果的目录(例如:D:\BACK\):').replace('\r','')
x=int(input("请输入表头的行数:").replace('\r',''))
y=int(input("请输入作为拆分数据的依据所在列的号码:").replace('\r',''))
if not os.path.exists(target_path):
os.mkdir(target_path)
print("已经创建指定的目录,准备创建文件,请稍等······")
else:
print("准备创建文件,请稍等······")
#读取原始文件
book=xls.Workbooks.Open(source_path)
sheet=book.ActiveSheet
length = sheet.UsedRange.Rows.Count
y_length = sheet.UsedRange.Columns.Count
keyArray = []
for i in range((x+1),length):
keyArray.append(sheet.Cells(i,y).Value)
#根据指定的列中的字段创建新文件
ll = len(keyArray)
for j in range(1,ll):
filename = target_path + str(keyArray[j]) + ".xls"
if os.path.exists (filename):
continue
else :
sheet.Range(sheet.Cells(1,1),sheet.Cells(x,y_length)).select
sheet.Range(sheet.Cells(1,1),sheet.Cells(x,y_length)).copy
newbook = xls.Workbooks.Add()
&nb
相关文档:
1. Building an Application with PyGTK and Glade
2. Creating a GUI using PyGTK and Glade
3. A Beginner's Guide to Using pyGTK and Glade
4. Is there a walkthrough on getting PyGTK2 and libglade2 to work on win32 ......
过量的参数
在运行时知道一个函数有什么参数,通常是不可能的。另一个情况是一个函数能操作很多对象。更有甚者,调用自身的函数变成一种api提供给可用的应用。
对于这些情况,python提供了两种特别的方法来定义函数的参数,允许函数接受过量的参数,不用显式声明参数。这些“额外”的参数下一步再解释。
注意a ......
既然选择了远方,就必须日夜兼程 http://wrsuifeng.javaeye.com
Python代码
# Filename: excel.py
import os,sys,time
import win32com.client
import traceback
excel = win32com.client.Dispatch(" ......
关键字: python com 报告
http://appofis.javaeye.com/blog/417446
python 操作ms office 生成报告相关总结
I. 项目中需要生成word和excel报告,通常有两种方法:基于字符串拼接以及COM调用。
1) 字符串拼接生成office文档的原理: office文档本身可以体现为xml文件格式,尤其是MS Excel
2003,我们可以自己将一 ......