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 释放对象.