想想都写了一篇还没有碰到soaoffice中间件的一根毛,自己都不好意思了,就继续写batchprint.asp这个文件的代码,这个里面是一定要用到这个中间件的。
先说这个文件的整体思路,就是根据传递过来的batchid,调取workprocess表中的信息,填写到print.xls这个excel表中,同时将这个文件保存到batchfiles这个子文件夹下面,知道了思路也就好办了,继续coding。
***************************************
batchprint.asp
<!--#include file=opendb.asp-->
<%
'首先创建一个服务器对象
set myexcel=server.createobject("aoaofficex.excelresponse")
set myesheet=myexcel.opensheet("sheet1")'这里的sheet1和你print.xls中的sheet名需要对应
'下面这些代码都是从数据库中调取数据的(工序信息)
sql="select b.*,a.batch,a.billdate from workprocess b,batch a where a.id="&batchid&" and a.productid=b.productid"
rs1.open sql,mycn,1
if not rs1.eof then
'假设我们的excel表中:A1里面放的是产品编码 ,B1里面放的是批次数量,C1里面放的是批次号 ,D1里面放的是批次日期
'从A2------>A10放的是加工工序, A11里面是料废数 A13里面填写的是工废数量,其他地方都是一些excel的公式
'我们先就开始实现excel中数据的填写
mysheet.FormMode = true'提交模式
mysheet.opencell("A1").value=rs1("productid")
mysheet.opencell("B1").value=rs1("qty")
mysheet.opencell("C1").value=rs1("batch")
mysheet.opencell("d1").value=rs1("billdate")
'下面开始填写工序
i=9
do until rs1.eof
i=i+1
mysheet.opencell("A"&i).value=rs1("workprocess")
rs1.movenext
loop
end if
rs1.close
'接下来就需要将我们创建的这个服务器对象内容附加到excel表中
Set myctrl = Server.CreateObject("SOAOfficeX.SOAOfficeCtrl")
myctrl.server="127.0.0.1"'这个是你的soaoffice的服务器地址
myctrl.serverport="4357
'这里你还可以对你的activex对象设置一些属性,比如是否显示菜单,显示工具条,设置保存调用的程序文件
myctrl.Menubar = false
myctrl.Toolbars = false
myctrl.SaveDocURL = "batchsave.asp?batchid="&request("batchid")&""
' 打开文档
myctrl.Assign myexcel
'这个时候我们需要打开我们的print.xls模版文件
myctrl.WebOpen "print.xls", 0, userName, "Excel.Sheet"
'释放对象
set myctrl=nothing
set myexcel=nothing
set mysheet=nothing
%>
<!--最下面的是最精简代码,但是许多时候我们用它并不能解决问题,因为我们需要引导用户按自己设定的思路来,所以就需要自定义一些界面元素,在这个系统中我们只允许有一个保存按钮,其他的全部关闭掉-->
<SCRIPT language="JavaScript" event="OnInit()" for="SOAOfficeCtrl">
SOAOfficeCtrl.AppendToolButton(1, "保存", 1);
</SCRIPT>
<!--既然我们定义了操作按钮,那钩子我们也是要定义一下的-->
<SCRIPT language="JavaScript" event="OnCustomToolBarClick(index, caption)" for="SOAOfficeCtrl">
// 添加您的自定义工具栏按钮事件响应
if(index == 1)
{
SOAOfficeCtrl.WebSave();
alert("保存成功!/n批次保存成功。");
}
</SCRIPT>
<!--下面这个就是soaoffice中间件最精简的代码了-->
<table width=100% height=100%>
<td>
<OBJECT id="SOAOfficeCtrl" codeBase="SOAOffice.ocx#version=7,4,1,0" height="100%" width="100%" classid="clsid:FABFB7B0-B15E-413C-94BC-96D21EC78712" data="" VIEWASTEXT>
<div align=center STYLE="color:red;">本机尚未安装SOAOFFICE客户端控件,请安装浏览器上方黄色提示条或弹出提示框中的SOAOFFICE客户端控件。</div>
</OBJECT>
</table>
**********************************
很好理解上面的这段程序,但是这并没有结束,只是完成了从数据库调取数据填写到excel表的过程。我们还需要batchsave.asp这个文件来保存我们的excel到我们指定的那个batchfile子文件夹中。
继续开始batchsave.asp文件的编写.
***********************************
<!--#include file=opendb.asp-->
<%
'创建保存对象
set mysave=server.createobject(soaofficex.savedocObj")
sql="select filenamestr from batch where id="&request("batchid")&""
rs1.open sql,mycn,1
if not rs1.eof then
filenamestr=rs1("filenamestr")
else
response.end
end if
rs1.close
'将我们刚才产生的那个文件按我们设定的文件名保存到子目录下
mysave.SaveToFile Server.MapPath("batchfile/") & "/" & filenamestr
set mysave=nothing
%>
*******************************
到了这里我们对使用soaoffice中间件填充数据和保存文件应该很清楚了.当然上面的过程还是比较粗糙的,还要考虑一些保存不成功及编辑的细节,在这里我们忽略继续往下.
接着完成如何从excel表中提取数据保存到sql server中.
首先我们需要先完成batchreport.asp这个文件,主要是给我们检索用的.
***********************************
<!--#include file=opendb.asp-->
<%
sql="select *,case when steteflag=1 then '已完工' else '未完工' end as stateflagstr from batch"
rs1.open sql,mycn,1
if not rs1.eof then
response.write"<table><tr><td>日期<td>产品<td>批次<td>数量<td>状态<td>操作</td>"
do until rs1.eof
response.write"<tr><td>"&rs1("billdate")&"<td>"&Rs1("productid")&"<td>"&rs1("batch")&"<td>"&rs1("qty")&"<td>"&rs1("stateflgstr")
if rs1("stateflag")=0 then
'如果未完工的我们还要填写质量信息
response.write"<td><a href=editbatch.asp?batchid="&rs1("id")&">edit</a>"
else
'如果已经完工的我们只能察看文件了
response.write"<td><a href=viewbatch.asp?batchid="&rs1("id")&">view</a>"
end if
rs1.movenext
loop
end if
rs1.close
%>
*****************************
在上面这个文件中我们又调用的两个文件:editbath.asp和viewbatch.asp,其中editbatch.asp主要目的就是打开批次卡,然后将我们的质量信息填写进取,最后保存文件的同时将质量信息提取保存到数据库中.viewbatch.asp就采用只读打开的方式对应的批次卡.
viewbath.asp文件比较简单,我们先来完成这个文件.其实他和我们前面的batchprint.asp文件几乎完全一样.
*********************************
viewbatch.asp
<!--#include file=opendb.asp-->
<%
'找到我们要打开的文件名
sql="select filenamestr from batch where id="&request("batchid")&""
rs1.open sql,mycn,1
if not rs1.eof then
filenamestr=rs1("filenamestr")
else
response.end
end if
rs1.close
'接下来就需要将我们创建的
Set myctrl = Server.CreateObject("SOAOfficeX.SOAOfficeCtrl")
myctrl.server="127.0.0.1"'这个是你的soaoffice的服务器地址
myctrl.serverport="4357
'只读方式打开文档
myctrl.WebOpen "batchfiles/"&filenamestr, 1, userName, "Excel.Sheet"
'释放对象
set myctrl=nothing
%>
<!--下面这个就是soaoffice中间件最精简的代码了-->
<table width=100% height=100%>
<td>
<OBJECT id="SOAOfficeCtrl" codeBase="SOAOffice.ocx#version=7,4,1,0" height="100%" width="100%" classid="clsid:FABFB7B0-B15E-413C-94BC-96D21EC78712" data="" VIEWASTEXT>
<div align=center STYLE="color:red;">本机尚未安装SOAOFFICE客户端控件,请安装浏览器上方黄色提示条或弹出提示框中的SOAOFFICE客户端控件。</div>
</OBJECT>
</table>
**********************************
最后我们来写填写质量信息的文件editbatch.asp,前面我们说了我们的A11里面是料废数 A13里面填写的是工废数量,一旦保存成功,我们就同时需要将数据库对应batch的stateflag设置成1.在这个文件中主要需要了解一个needsubmit属性设置。
待续.....