infopath 实现进度条功能
由于infopath显示机制有些像网页,需要自刷新,然而当在表单处于脚本运行过程中,表单的界面不会显示出来的,会出现假死,卡着不动,如果此时要显示动态的进度是不可能的了,但是平时我发现数据导出excel时是实时,这就让我想起用excel做为进度条显示了。
![]()
Code
1
//********************************************************************************** 进度
2
if( Application.InfoJetService )
3![]()
{
4
XDocument.UI.Alert("Infopath方式打开才能使用导出功能!");
5
return;
6
}
7
// 创建Excel对象
8
try
9![]()
{
10
var ExcelApp = new ActiveXObject("Excel.Application");
11
var ExcelBook = ExcelApp.WorkBooks.Add();
12
}
13
catch(e)
14![]()
{
15
XDocument.UI.Alert("不能创建对象,权限太低,请在IE选项安全中‘本地intranet’自定义级别设置一下!");
16
return;
17
}
18
19
ExcelApp.Visible=true;
20
ExcelApp.DisplayAlerts = false;// excel不弹出对话框
21
22
var ExcelSheet = ExcelBook.WorkSheets.Add();
23
ExcelApp.Caption = "报表生成进度";
24
25
//**********************************************************************************
26
// 清空重复表
27
var curNode = XDocument.DOM.selectSingleNode("//my:列表");
28
var curGroupNode = XDocument.DOM.selectSingleNode("//my:组");
29
removeAll(curNode,curGroupNode);
30
31
var Group = XDocument.CreateDOM();
32
Group.loadXML("<my:组 xmlns:my='http://schemas.microsoft.com/office/infopath/2003/myXSD/2006-05-23T07:44:28'></my:组>");
33
Group.setProperty("SelectionNamespaces", 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2006-05-23T07:44:28" xmlns:xd="http://schemas.microsoft.com/office/infopath/2003"');
34
Group = Group.documentElement;
35
36
var dataNodes = XDocument.GetDOM("sj_销售订单列表").selectNodes("//my:产品列表");
37
var jindu =0 ;
38
var BT = now();
39
ExcelSheet.Cells(1,1).value = "图号总个数";
40
ExcelSheet.Cells(1,2).value = "完成统计个数";
41
ExcelSheet.Cells(1,3).value = "完成率(%)";
42
ExcelSheet.Cells(1,4).value = "开始生成时间";
43
ExcelSheet.Cells(1,5).value = "已用时间(分钟)";
44
45
ExcelSheet.Cells(2,1).value = dataNodes.length;
46
ExcelSheet.Cells(2,4).value = "'" + BT;
47
ExcelSheet.Columns("A:E").EntireColumn.AutoFit;
48
49
for(var i=0;i<dataNodes.length;i++)
50![]()
{
51
var xml = "<my:列表 xmlns:my='http://schemas.microsoft.com/office/infopath/2003/myXSD/2006-05-23T07:44:28'>";
52
xml += "<my:客户单位1>" + dataNodes[i].selectSingleNode("my:订单客户单位").text + "</my:客户单位1>";
53
xml += "<my:客户订单号1>" + dataNodes[i].selectSingleNode("my:客户订单号1").text + "</my:客户订单号1>";
54
xml += "<my:订货日期>" + dataNodes[i].selectSingleNode("my:订单日期").text + "</my:订货日期>";
55
xml += "<my:机型>" + dataNodes[i].selectSingleNode("my:机型").text + "</my:机型>";
56
xml += "<my:图号1>" + dataNodes[i].selectSingleNode("my:图号").text + "</my:图号1>";
57
xml += "<my:品名1>" + dataNodes[i].selectSingleNode("my:品名").text + "</my:品名1>";
58
xml += "<my:交货日期1>" + dataNodes[i].selectSingleNode("my:期望交货期").text + "</my:交货日期1>";
59
60
var dcount = dataNodes[i].selectSingleNode("my:数量").text;
61
var ycount = yfCount(dataNodes[i].selectSingleNode("my:客户订单号1").text,dataNodes[i].selectSingleNode("my:图号").text);
62![]()
63
var scount = parseFloat(dcount) - parseFloat(ycount);
64
65
xml += "<my:订单数量>" + dcount + "</my:订单数量>";
66
xml += "<my:已发数量>" + ycount + "</my:已发数量>";
67
xml += "<my:剩余数量>" + scount + "</my:剩余数量>";
68
69
xml += "<my:单价>" + ishave(dataNodes[i].selectSingleNode("my:单价")) + "</my:单价>";
70
xml += "<my:金额>" + ishave(dataNodes[i].selectSingleNode("my:合计金额")) + "</my:金额>";
71
xml += "<my:开票日期>" + ishave(dataNodes[i].selectSingleNode("my:开票日期1")) + "</my:开票日期>";
72
xml += "<my:发票号码>" + ishave(dataNodes[i].selectSingleNode("my:发票号码1")) + "</my:发票号码>";
73
if(XDocument.DOM.selectSingleNode("//my:计算库存").text == "true")
74![]()
{
75
xml += "<my:库存数量>" + kCount(Group,dataNodes[i].selectSingleNode("my:图号").text) + "</my:库存数量>";
76
}
77
else
78![]()
{
79
xml += "<my:库存数量></my:库存数量>";
80
}
81
xml += "<my:备注>" + dataNodes[i].selectSingleNode("my:备注").text + "</my:备注>";
82
xml += "</my:列表>";
83
84
appendNode(Group,xml);
85
jindu++;
86
87
88
ExcelSheet.Cells(2,2).value = jindu;
89
ExcelSheet.Cells(2,3).value = Math.round(jindu / dataNodes.length * 100);
90
ExcelSheet.Cells(2,5).value = Math.round(diffdays(BT,now()) * 100) * 0.01;
91
}
92
ExcelApp.Quit();
1
//********************************************************************************** 进度2
if( Application.InfoJetService )3

{4
XDocument.UI.Alert("Infopath方式打开才能使用导出功能!");5
return;6
}7
// 创建Excel对象8
try9

{10
var ExcelApp = new ActiveXObject("Excel.Application");11
var ExcelBook = ExcelApp.WorkBooks.Add();12
}13
catch(e)14

{15
XDocument.UI.Alert("不能创建对象,权限太低,请在IE选项安全中‘本地intranet’自定义级别设置一下!");16
return;17
}18
19
ExcelApp.Visible=true;20
ExcelApp.DisplayAlerts = false;// excel不弹出对话框21
22
var ExcelSheet = ExcelBook.WorkSheets.Add();23
ExcelApp.Caption = "报表生成进度";24
25
//**********************************************************************************26
// 清空重复表27
var curNode = XDocument.DOM.selectSingleNode("//my:列表");28
var curGroupNode = XDocument.DOM.selectSingleNode("//my:组");29
removeAll(curNode,curGroupNode);30
31
var Group = XDocument.CreateDOM();32
Group.loadXML("<my:组 xmlns:my='http://schemas.microsoft.com/office/infopath/2003/myXSD/2006-05-23T07:44:28'></my:组>");33
Group.setProperty("SelectionNamespaces", 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2006-05-23T07:44:28" xmlns:xd="http://schemas.microsoft.com/office/infopath/2003"');34
Group = Group.documentElement;35
36
var dataNodes = XDocument.GetDOM("sj_销售订单列表").selectNodes("//my:产品列表");37
var jindu =0 ;38
var BT = now();39
ExcelSheet.Cells(1,1).value = "图号总个数";40
ExcelSheet.Cells(1,2).value = "完成统计个数";41
ExcelSheet.Cells(1,3).value = "完成率(%)";42
ExcelSheet.Cells(1,4).value = "开始生成时间";43
ExcelSheet.Cells(1,5).value = "已用时间(分钟)";44
45
ExcelSheet.Cells(2,1).value = dataNodes.length;46
ExcelSheet.Cells(2,4).value = "'" + BT;47
ExcelSheet.Columns("A:E").EntireColumn.AutoFit;48
49
for(var i=0;i<dataNodes.length;i++)50

{51
var xml = "<my:列表 xmlns:my='http://schemas.microsoft.com/office/infopath/2003/myXSD/2006-05-23T07:44:28'>";52
xml += "<my:客户单位1>" + dataNodes[i].selectSingleNode("my:订单客户单位").text + "</my:客户单位1>";53
xml += "<my:客户订单号1>" + dataNodes[i].selectSingleNode("my:客户订单号1").text + "</my:客户订单号1>";54
xml += "<my:订货日期>" + dataNodes[i].selectSingleNode("my:订单日期").text + "</my:订货日期>";55
xml += "<my:机型>" + dataNodes[i].selectSingleNode("my:机型").text + "</my:机型>";56
xml += "<my:图号1>" + dataNodes[i].selectSingleNode("my:图号").text + "</my:图号1>";57
xml += "<my:品名1>" + dataNodes[i].selectSingleNode("my:品名").text + "</my:品名1>";58
xml += "<my:交货日期1>" + dataNodes[i].selectSingleNode("my:期望交货期").text + "</my:交货日期1>";59
60
var dcount = dataNodes[i].selectSingleNode("my:数量").text;61
var ycount = yfCount(dataNodes[i].selectSingleNode("my:客户订单号1").text,dataNodes[i].selectSingleNode("my:图号").text);62

63
var scount = parseFloat(dcount) - parseFloat(ycount);64
65
xml += "<my:订单数量>" + dcount + "</my:订单数量>";66
xml += "<my:已发数量>" + ycount + "</my:已发数量>";67
xml += "<my:剩余数量>" + scount + "</my:剩余数量>";68
69
xml += "<my:单价>" + ishave(dataNodes[i].selectSingleNode("my:单价")) + "</my:单价>";70
xml += "<my:金额>" + ishave(dataNodes[i].selectSingleNode("my:合计金额")) + "</my:金额>";71
xml += "<my:开票日期>" + ishave(dataNodes[i].selectSingleNode("my:开票日期1")) + "</my:开票日期>";72
xml += "<my:发票号码>" + ishave(dataNodes[i].selectSingleNode("my:发票号码1")) + "</my:发票号码>";73
if(XDocument.DOM.selectSingleNode("//my:计算库存").text == "true")74

{75
xml += "<my:库存数量>" + kCount(Group,dataNodes[i].selectSingleNode("my:图号").text) + "</my:库存数量>";76
}77
else78

{79
xml += "<my:库存数量></my:库存数量>";80
}81
xml += "<my:备注>" + dataNodes[i].selectSingleNode("my:备注").text + "</my:备注>";82
xml += "</my:列表>";83
84
appendNode(Group,xml);85
jindu++;86
87
88
ExcelSheet.Cells(2,2).value = jindu;89
ExcelSheet.Cells(2,3).value = Math.round(jindu / dataNodes.length * 100);90
ExcelSheet.Cells(2,5).value = Math.round(diffdays(BT,now()) * 100) * 0.01;91
}92
ExcelApp.Quit();
浙公网安备 33010602011771号