lzj_ykds 发表于 2012-7-19 14:43 
在look优化代码的基础上,我改为一行数据一个table,然后给excel整行赋值的方式,速度有很大的提升
impor ...
考虑可以用2维table来赋值进一步提高速度,因为下面的代码可以执行
import com
import com.excel
var excel = com.excel( true )
excel.visible=true
var wkbook=excel.workbooks.add()
var sheet=wkbook.sheets(1)
var row={}
var rows={}
table.push(row,1,2,3)
table.push(rows,row)
row={}
table.push(row,3,4,5)
table.push(rows,row)
sheet.Range("A1:C2").value2=rows
于是写了如下代码,但是报如下错误,不知有什么好的办法
---------------------------
aardio:运行时错误
---------------------------
文件:[string "import win..."]
错误行号:#60
错误:stack overflow (There was not enough memory to complete the operation)
---------------------------
确定
---------------------------
代码如下
import win
import com;
import com.excel
import time.ole;
import string
import time.performance
var t1=time.performance.tick()
var connstr="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Documents and Settings\Administrator\桌面\Database2.accdb;Persist Security Info=False"
var conn = com.CreateObject("ADODB.Connection");
conn.Open(connstr);
var rs = com.CreateObject("ADODB.RecordSet") ;
rs.Open("select * from khzl",conn);
var excel = com.excel( true )
excel.visible=true
var wkbook=excel.workbooks.add()
var sheet=wkbook.sheets(1)
sheet.Cells.NumberFormatLocal = "@"
var count=rs.Fields.Count
var row={}
var rows={}
for(j=1;count;1){
table.push(row,rs.Fields.Item(j-1).Name)
}
table.push(rows,row)
i=2
while(!rs.eof){
row={}
for(j=1;count;1){
var fldvle;
if(rs(j-1).value==null){
table.push(row,"")
continue ;
}
select(rs.Fields.Item(j-1).type) {
case 131 {
fldvle=string.format("%.0f",rs(j-1).value);
}
case 7 {
var tbl=rs(j-1).value;
tbl.format ="%Y/%m/%d %H:%M:%S";
fldvle=tostring(tbl);
}
}
table.push(row,fldvle)
}
table.push(rows,row)
i++
rs.movenext()
}
rs.close()
conn.close()
sheet.Range("A1:C"++(i-1)).value2=rows
var t2=time.performance.tick()
import console
console.log(t2-t1)
win.msgbox("ok")
|