Cell插件利用xml上传表格数据于服务器的B/S操作
引言
随着XML技术发展,XML技术的广泛运用,用友华表cell插件在XML上的运用也取得很大发展,用友华表cell插件可以很方便的将客户端cell报表数据以XML形式发送给服务器,服务器再接受xml数据,通过解析xml数据流将cell报表数据入库或做相应处理。下例方案演示客户端的组织发送,以及服务器的接收解析入库。
正文:(本文以ASP ,客户端JavaScript,服务器端VbScript,Access数据库为例)
用友华表Cell插件推荐的xml格式是(实际运用根据业务逻辑):
<Workbook>
<DocumentProperties>
<Created>2004-06-11T00:55:04Z</Created>
<Version>03.1015</Version>
</DocumentProperties>
<Worksheet Name="第1页">
<Table>
<Row Index="3">
<Cell Index="2">
<Data Type="Number">1234</Data>
</Cell>
<Cell Index="3">
<Data Type="Number">4567</Data>
</Cell>
</Row>
<Row Index="4">
<Cell Index="2">
<Data Type="String">asd</Data>
</Cell>
< Cell Index="3">
<Data Type="String">ASDF</Data>
</Cell>
</Row>
</Table>
</Worksheet>
<Worksheet Name="第2页">
<Table>
<Row Index="1">
< Cell Index="1">
<Data Type="Number">1234</Data>
</Cell>
<Cell Index="2">
<Data Type="Number">4567</Data>
</Cell>
</Row>
</Table>
</Worksheet>
</Workbook>
客户端的操作
1.SaveToXML()
利用cell插件的SaveToXML()函数,返回报表数据的xml字符集,通过该函数将报表数据写入xml结构 xmldoc=cellweb.SaveToXml(xml_dom)
2.MSXML2.DOMDocument
创建MSXML2.DOMDocument的ActiveX对象Objxml,利用该对象的loadxml方法将xml文档导入到对象(上面的xmldoc)
objxml=new ActiveXObject("MSXML2.DOMDocument");
objxml.loadXML(xmldoc);
3.Microsoft.XMLHTTP
通过创建Microsoft.XMLHTTP的xmlhttp对象objS来实现xml数据流的发送
objS=new ActiveXObject("Microsoft.XMLHTTP");
发送xml数据流前先用open 方法打开,形式如下:
objS.open("post","http://127.0.0.1/upload_xml.asp",false);
objS.send(objxml); //向服务器发送xml数据流。
服务器端的操作
1.创建MSXML2.DOMDocument对象Objxml接收xml数据流
set Objxml=Server.CreateObject("MSXML2.DOMDocument")
利用对象load()方法接收发来的数据流,将数据流导入到Objxml对象里
Objxml.load(Request)
利用save方法把xml数据流保存一份xml文件以便验证
Objxml.save(Server.MapPath("temp.xml"))
2.创建ADO的连接对象connection和recordset记录集对象通过对xml的解析,利用记录集Addnew方法将数据写入Access数据库
set rootlist = Objxml.documentElement.getElementsByTagName("Table") '得到Objxml对象所有"Table"Node,注意xml是区分大小的
set conn = Server.CreateObject("ADODB.Connection") '注意xml是区分大小的
connstr="××××××"
conn.Open connstr '建立数据库的连接
set Objrs = Server.CreateObject("ADODB.Recordset")
Objrs.Open "tcell",conn,1,3 '打开tcell表,将数据写入数据库
for i=0 to (rootlist.length-1) '遍历表节点
for j=0 to (rootlist.Item(i).childNodes.length-1) '遍历行节点
for k=0 to (rootlist.Item(i).childNodes.Item(j).childNodes.length-1) '遍历列节点
Objrs.AddNew
Objrs(1)="第"+CStr(i+1)+"页"+CStr(j+1)+"行"+CStr(k+1)+"列" '定位cell上的单元格
Objrs(2)=rootlist(i).childNodes(j).childNodes(k).Text '写入单元格数据
Objrs(3)=rootlist(i).childNodes(j).childNodes(k).childNodes(0).attributes.getNamedItem("Type").value '写入单元格数据类型
Objrs.Update
next
next
next
set Objrs=nothing
set Conn=nothing
释放对象.

浙公网安备 33010602011771号