打印实现方式:做好打印的模板.程序打开此模板,用替换的方式把要打印的字段写入.生成一个新的WORD文件,实现方式.
存在问题: 当在打印的模板中找不到要替换的内容时.把整个文件内容全给替换了.
请问如何判断查找成功?
源码:
Private Sub FreeForm_DataBin(ByVal strRybh As String)
Dim oleAppDoc As New Word.ApplicationClass
Dim oleDoc As Word.Document
Dim oleTmp As Word.Document
Dim DV As New DataView
Dim aryl_Value As New ArrayList
Dim strSql, strbt, strFileName, strTempFName, strTableName As String
Dim strwh, strTemp, strWinCaption As String
Dim i As Integer
strSql = "select b.alias,b.name,b.ename,b.dosetype,b.MAKERNAME,b.specs,a.QualityStd,a.BatchNo,b.passno,to_char(a.ValidDate,'yyyy-mm-dd'),a.outcheck,a.ProcesverbalNo,to_char(a.makerdate,'yyyy-mm-dd'),c.provname,to_char(a.PurDate,'yyyy-mm-dd'),a.PurQty,a.checker,to_char(a.CheckDate,'yyyy-mm-dd'),a.Qty,a.findplace,to_char(a.FindDate,'yyyy-mm-dd'),a.Reason,a.Checker,to_char(a.Fdate,'yyyy-mm-dd'),a.QCNotion,a.QCSigner,to_char(a.QCSignDate,'yyyy-mm-dd'),a.MgrNotion,a.MgrSigner,to_char(a.MgrSignDate,'yyyy-mm-dd'),a.qcmgr,a.qcmgrnotion,to_char(a.qcmgrsigner,'yyyy-mm-dd') from GSP_UneligiblePhysicNotify a left join Goodses b on a.GoodsID=b.GoodsID left join providers c on a.provno=c.provno where a.billno='" & Request("r_no") & "'"
PuFun.GetFirstRow(strSql, aryl_Value, conn)
If aryl_Value.Count > 0 Then
strFileName = CStr(Now.Year) & CStr(Now.Month) & CStr(Now.Day) & CStr(Now.Hour) & CStr(Now.Minute) & CStr(Now.Second)
strFileName = strFileName & ".doc"
Try
'-------------------生成word文档---------------------
oleTmp = oleAppDoc.Documents.Open(Server.MapPath("template.doc"))
oleAppDoc.Selection.WholeStory()
oleAppDoc.Selection.Copy()
oleDoc = oleAppDoc.Documents.Add()
strWinCaption = oleAppDoc.ActiveWindow.Caption
oleAppDoc.Selection.Paste()
oleTmp.Close() Dim ii As Integer
Dim str As String
For ii = 0 To aryl_Value.Count - 1
str = aryl_Value(ii)
If str.Trim = "" Or str Is Nothing Then
str = " "
End If
oleAppDoc.Selection.WholeStory()
oleAppDoc.Selection.Find.ClearFormatting()
oleAppDoc.Selection.Find.Replacement.ClearFormatting()
oleAppDoc.Selection.Find.Text = CStr("《" & ii & "》")
oleAppDoc.Selection.Find.Replacement.Text = ""
'问题在这段,找不到相应的内容,就把全文给替换了,如何控制?
oleAppDoc.Selection.Find.Execute()
oleAppDoc.Selection.TypeText(str) Next oleDoc.ActiveWindow.ActivePane.View.Zoom.Percentage = 100
oleDoc.SaveAs(Server.MapPath(strFileName))
oleDoc.Close()
Catch ex As Exception
Dim kk As String = ex.Message.ToString
Response.Write(ex.Message)
Finally
oleAppDoc.Quit()
oleAppDoc = Nothing
End Try
End If Try
Dim strFilePath As String
strFilePath = Path.GetDirectoryName(Server.MapPath(Request.FilePath))
strFilePath = Replace(strFilePath, "\", "\\") strFilePath = "<script language=javascript> " + vbCrLf _
& " document.body.onload = delexcel('" & strFilePath & "\\" & strFileName & "','" & strFileName & "');" + vbCrLf _
& "</script>"
Page.RegisterStartupScript("strFilePath", strFilePath)
Catch ex As Exception
Dim kk As String = ex.Message.ToString
Finally
aryl_Value = Nothing
End Try End Sub
存在问题: 当在打印的模板中找不到要替换的内容时.把整个文件内容全给替换了.
请问如何判断查找成功?
源码:
Private Sub FreeForm_DataBin(ByVal strRybh As String)
Dim oleAppDoc As New Word.ApplicationClass
Dim oleDoc As Word.Document
Dim oleTmp As Word.Document
Dim DV As New DataView
Dim aryl_Value As New ArrayList
Dim strSql, strbt, strFileName, strTempFName, strTableName As String
Dim strwh, strTemp, strWinCaption As String
Dim i As Integer
strSql = "select b.alias,b.name,b.ename,b.dosetype,b.MAKERNAME,b.specs,a.QualityStd,a.BatchNo,b.passno,to_char(a.ValidDate,'yyyy-mm-dd'),a.outcheck,a.ProcesverbalNo,to_char(a.makerdate,'yyyy-mm-dd'),c.provname,to_char(a.PurDate,'yyyy-mm-dd'),a.PurQty,a.checker,to_char(a.CheckDate,'yyyy-mm-dd'),a.Qty,a.findplace,to_char(a.FindDate,'yyyy-mm-dd'),a.Reason,a.Checker,to_char(a.Fdate,'yyyy-mm-dd'),a.QCNotion,a.QCSigner,to_char(a.QCSignDate,'yyyy-mm-dd'),a.MgrNotion,a.MgrSigner,to_char(a.MgrSignDate,'yyyy-mm-dd'),a.qcmgr,a.qcmgrnotion,to_char(a.qcmgrsigner,'yyyy-mm-dd') from GSP_UneligiblePhysicNotify a left join Goodses b on a.GoodsID=b.GoodsID left join providers c on a.provno=c.provno where a.billno='" & Request("r_no") & "'"
PuFun.GetFirstRow(strSql, aryl_Value, conn)
If aryl_Value.Count > 0 Then
strFileName = CStr(Now.Year) & CStr(Now.Month) & CStr(Now.Day) & CStr(Now.Hour) & CStr(Now.Minute) & CStr(Now.Second)
strFileName = strFileName & ".doc"
Try
'-------------------生成word文档---------------------
oleTmp = oleAppDoc.Documents.Open(Server.MapPath("template.doc"))
oleAppDoc.Selection.WholeStory()
oleAppDoc.Selection.Copy()
oleDoc = oleAppDoc.Documents.Add()
strWinCaption = oleAppDoc.ActiveWindow.Caption
oleAppDoc.Selection.Paste()
oleTmp.Close() Dim ii As Integer
Dim str As String
For ii = 0 To aryl_Value.Count - 1
str = aryl_Value(ii)
If str.Trim = "" Or str Is Nothing Then
str = " "
End If
oleAppDoc.Selection.WholeStory()
oleAppDoc.Selection.Find.ClearFormatting()
oleAppDoc.Selection.Find.Replacement.ClearFormatting()
oleAppDoc.Selection.Find.Text = CStr("《" & ii & "》")
oleAppDoc.Selection.Find.Replacement.Text = ""
'问题在这段,找不到相应的内容,就把全文给替换了,如何控制?
oleAppDoc.Selection.Find.Execute()
oleAppDoc.Selection.TypeText(str) Next oleDoc.ActiveWindow.ActivePane.View.Zoom.Percentage = 100
oleDoc.SaveAs(Server.MapPath(strFileName))
oleDoc.Close()
Catch ex As Exception
Dim kk As String = ex.Message.ToString
Response.Write(ex.Message)
Finally
oleAppDoc.Quit()
oleAppDoc = Nothing
End Try
End If Try
Dim strFilePath As String
strFilePath = Path.GetDirectoryName(Server.MapPath(Request.FilePath))
strFilePath = Replace(strFilePath, "\", "\\") strFilePath = "<script language=javascript> " + vbCrLf _
& " document.body.onload = delexcel('" & strFilePath & "\\" & strFileName & "','" & strFileName & "');" + vbCrLf _
& "</script>"
Page.RegisterStartupScript("strFilePath", strFilePath)
Catch ex As Exception
Dim kk As String = ex.Message.ToString
Finally
aryl_Value = Nothing
End Try End Sub
> oleAppDoc.Selection.TypeText(str)虽然我不懂,但是看楼主的代码好像是先执行查找,然后通过模拟输入字符的方式替换掉查找到的字符串。没有直接Replace查找到的字符串的函数么?另外可以找一找Office编程的书籍。我以前在www.verycd.com上好像见到过这方面的书。