这是计划 - 这是一个很好的计划,但是存在众所周知的砖墙。我在数据库上以 Byte() 形式存储了 Word 文档 - 我需要提取选定的文档并将其作为 Word 文档保存到临时目录中。那已经完成并且正在工作。接下来,我需要根据原始文档的前 x 页创建一个新文档,将其保存到临时目录 - 通过电子邮件发送新文件并删除临时目录的内容。
我唯一坚持的部分是按页码拆分文件。作为示例,返回页数...
Public Function ReturnWordPages(FileName As String) As Integer
Try
Dim WordApp As ApplicationClass = New ApplicationClass()
Dim vFilename As Object = FileName
Dim [readonly] As Object = False
Dim isVisible As Object = True
Dim oMissing As Object = System.Reflection.Missing.Value
Dim wDoc As Document = WordApp.Documents.Open(vFilename, oMissing, [readonly], oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, isVisible)
Dim vStat As WdStatistic = WdStatistic.wdStatisticPages
Dim vNum As Integer = wDoc.ComputeStatistics(vStat, oMissing)
Return vNum
Catch ex As Exception
EmailError(ex)
Return 0
End Try
End Function
如有任何指点,我们将不胜感激。
========更新===============
我还有一点 - 能够复制选定的页数并保存新文件,但在此过程中 Word 会弹出一个弹出窗口 - originalFile.docx 已被 localComputerName 锁定以进行编辑 - 你想打开只读副本吗,创建为本地副本....
如何在没有提示以及打开和关闭文件的情况下运行整个过程?此外,它不会复制页码(页脚)。
我尝试将可见设置为 false - 没有效果
Public Function ReturnSplitDocument(FileName As String, vPages As Integer, outputPath As String) As Boolean
Try
Dim WordApp As ApplicationClass = New ApplicationClass()
Dim BaseDoc As Document
Dim DestDoc As Document
Dim vWhat As Object = WdGoToItem.wdGoToPage
Dim vWhich As Object = WdGoToDirection.wdGoToFirst
Dim vCount As Object = 1
Dim vFilename As Object = FileName
Dim [readonly] As Object = False
Dim isVisible As Object = True
Dim oMissing As Object = System.Reflection.Missing.Value
BaseDoc = WordApp.Documents.Open(FileName)
WordApp.Documents.Open(vFilename, oMissing, [readonly], oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, isVisible)
Dim vStartRange As Range = WordApp.Selection.GoTo(vWhat, vWhich, vCount, oMissing)
Dim vCount2 As Object = CInt(vCount) + vPages
Dim vEndRange As Range = WordApp.Selection.GoTo(vWhat, vWhich, vCount2, oMissing)
vEndRange.SetRange(vStartRange.Start, vEndRange.End - 1)
vEndRange.Select()
WordApp.Selection.Copy()
DestDoc = WordApp.Documents.Add
DestDoc.Activate()
WordApp.Selection.PasteAndFormat(WdRecoveryType.wdFormatOriginalFormatting)
DestDoc.SaveAs2(outputPath)
DestDoc.Close()
DestDoc = Nothing
WordApp.Quit()
WordApp = Nothing
Return True
Catch ex As Exception
EmailError(ex)
Return False
End Try
End Function
解决方案是在应用程序打开目标文件且在 .activate 之前添加另一个 .visible = false。
Public Function ReturnSplitDocument(FileName As String, vPages As Integer, outputPath As String) As Boolean
Try
Dim WordApp As ApplicationClass = New ApplicationClass()
WordApp.Visible = False
Dim BaseDoc As Document
Dim DestDoc As Document
Dim vWhat As Object = WdGoToItem.wdGoToPage
Dim vWhich As Object = WdGoToDirection.wdGoToFirst
Dim vCount As Object = 1
Dim vFilename As Object = FileName
Dim [readonly] As Object = True
Dim isVisible As Object = False
Dim oMissing As Object = System.Reflection.Missing.Value
BaseDoc = WordApp.Documents.Open(vFilename)
WordApp.Documents.Open(vFilename, oMissing, [readonly], oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, isVisible, oMissing, oMissing, oMissing, oMissing)
Dim vStartRange As Range = WordApp.Selection.GoTo(vWhat, vWhich, vCount, oMissing)
Dim vCount2 As Object = CInt(vCount) + vPages
Dim vEndRange As Range = WordApp.Selection.GoTo(vWhat, vWhich, vCount2, oMissing)
vEndRange.SetRange(vStartRange.Start, vEndRange.End - 1)
vEndRange.Select()
WordApp.Selection.Copy()
DestDoc = WordApp.Documents.Add
WordApp.Visible = False '<------------- Solution
DestDoc.Activate()
WordApp.Selection.PasteAndFormat(WdRecoveryType.wdFormatOriginalFormatting)
DestDoc.SaveAs2(outputPath)
DestDoc.Close()
DestDoc = Nothing
BaseDoc.Close()
BaseDoc = Nothing
WordApp.Quit()
WordApp = Nothing
Return True
Catch ex As Exception
EmailError(ex)
Return False
End Try
End Function