2010-02-18 115 views
3

我希望用戶能夠上傳Word文檔,然後我的程序將文檔解析爲單獨的文檔文檔。問題是分割將需要手動,因爲所有的單詞文檔沒有以相同的方式格式化。我最初的想法是在用戶上傳之前,用戶使用開始和結束標記(某種可能是評論)來標記段,然後我的程序可以解析並將文檔分解爲單獨的文檔。 (這也需要爲.doc和.docx工作,因此需要常見解決方案)將Word文檔拆分成更小的文檔

Ex。輸入:

文檔1

第1章

等等等等等等

第2章

等等等等

/結束文檔1

Ex。輸出:

文檔1

第1章

等等等等等等

/結束文檔1

文檔2

第2章

等等等等

/結束文檔2

任何想法?我一直在努力一段時間

+1

我的僱主需要相當多的doc和docx修改。問題是兩者的解決方案都非常困難。在docx中,最好的辦法是將文檔解壓縮爲一個zip文件,然後您可以使用裏面的XML文件進行播放。您可以使用樣式或自定義樣式知道何時分割文檔或讓用戶添加一些自定義標籤。不幸的是,優雅的解決方案非常困難。 – 2010-02-18 22:30:35

+0

對,我絕對不認爲自動化解決方案是可行的。如果用戶可以對捲進行標記,然後根據上傳之前標記的內容進行分割。 – Holograham 2010-02-18 22:45:49

回答

4

你想做的事情並不重要!我已經做了我的文檔操作,是說,如果你是一個DOCX這些天是不是太糟糕,由於支持圖書館工作的公平共享,請參見:

http://openxmldeveloper.org/

舊版本變得更加困難,你需要爲此提供一個庫,或者建議使用宏。

「程序」是一個網站嗎?如果是的話確保你不要使用COM互操作!

+0

是它的一個網站 – Holograham 2010-02-19 01:29:15

0

我會說你最好的選擇是調查VSTO或VBA宏來完成這個。兩者都將使您可以在文檔的任何版本中完全訪問對象模型。

0

可能有幫助的是HTML Transit。它是非常舊的軟件,價格非常昂貴,而且從最初的搜索開始,它可能不再被支持。但是,它確實能夠獲取一個Word文檔,並將其分解爲更小的片段(當然,它也將其轉換爲HTML)。也許有東西需要研究。谷歌「HTML運輸」爲更多的研究和免費演示。

0

我在Aspose.Words的文檔操作和生成方面取得了巨大的成功。

0

VBA宏將文件分成多個子文件

子UpdateDocuments()

Application.ScreenUpdating = False 
    Dim strFolder As String, strFile As String, wdDoc As Document 
    strFolder = GetFolder 
    If strFolder = "" Then Exit Sub 
    strFile = Dir(strFolder & "\*.doc", vbNormal) 
    While strFile <> "" 
     Set wdDoc = Documents.Open(FileName:=strFolder & "\" & strFile,  AddToRecentFiles:=False, Visible:=False) 
     With wdDoc 
      'Call your other macro or insert its code here 
      'BreakOnSection 
      wdDoc.Activate 

     ActiveDocument.ActiveWindow.View.Type = wdOutlineView 
      Selection.WholeStory 
     Selection.Copy 
      ActiveDocument.Subdocuments.AddFromRange Range:=Selection.Range 
      ActiveDocument.SaveAs "C:\Data\Split\" & ActiveDocument.Name 

      ActiveDocument.Close SaveChanges:=True 
    End With 
    strFile = Dir() 
    Wend 
    Set wdDoc = Nothing 
    Application.ScreenUpdating = True 
End Sub 

Function GetFolder() As String 
    Dim oFolder As Object 
    GetFolder = "" 
    Set oFolder = CreateObject("Shell.Application").BrowseForFolder(0,  

"Choose a folder", 0) 
    If (Not oFolder Is Nothing) Then GetFolder = oFolder.Items.Item.Path 
    Set oFolder = Nothing 
End Function