从 Word 文档返回 x 页并用它们创建一个新文档

问题描述 投票:0回答:1

这是计划 - 这是一个很好的计划,但是存在众所周知的砖墙。我在数据库上以 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
wpf office-interop
1个回答
0
投票

解决方案是在应用程序打开目标文件且在 .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
© www.soinside.com 2019 - 2024. All rights reserved.