2012-07-11 2 views
0

나는 VB.NET에서 즉시 워드 문서를 만들려고 노력하고 있으며,이 모든 문서는 매우 드문 것처럼 보입니다. 지금 당장 내 프로그램은 데이터베이스 테이블을 반복하여 작동하고 각 행에 대해 변수를 추출합니다. 그런 다음 프로그램은 템플리트 단어 doc를 반복하고 구문 분석하여 해당 템플리트의 변수를 데이터베이스의 변수로 바꾸고 새 문서로 저장합니다.파일 시스템에 저장하지 않고 Word 문서에 Word 문서 추가

대신에, 내가 만들려는 "새로운 문서"마다 테이블에 1000 개의 행을 파싱 할 때마다 다른 문서에 추가하려고합니다. 파일 시스템에 1000 개의 다른 워드 문서를 저장하십시오.

나는 이것에 관해서 아무 것도 찾을 수 없을 것 같습니다. 모든 문서에 병합 (실제로 병합하지 않고 추가하려는 경우) 또는 문서를 추가 (삽입) 할 수있는 유일한 방법은 WordApplication.Selection.InsertFile(newWordDocument.FullName)을 사용하는 것입니다. 이 작동하지만, 나를 삽입하기 전에 파일 시스템에 newWordDocument을 저장해야합니다.

메모리에있는 동안 WordApplication 객체에 newWordDocument을 추가 할 수 있습니까? 여기

내가 지금

For each row in TableOfVariables 
Dim WordApplication as New Word.Application 
Dim tempDoc as New Word.Document 
tempDoc = WordApplication.Documents.Add 
tempDoc = fillVariablesOfTheDocument(tempDoc, row) 
tempDoc.Save() 'This is the problem - it saves as a new file rather than appending into WordApplication 
Next 
+0

각 페이지를 별도의 문서로 취급 할 때 자신이 원하는 것을 원하지 않는 것으로 생각하지 않습니다. 내용의 사본을 만들어 문서에 추가하십시오 (단 하나!). –

+0

그건 기본적으로 내가 "문서"를 메모리에 갖게함으로써 얻은 것입니다. "콘텐츠 사본을 만들어 내 문서에 추가하면 어떨까요?"내가하고 싶은 일은 정확히 수행 할 수있는 방법이 없습니다. – Boeckm

+0

Word 자동화를 많이 사용하지는 않았지만'ActiveDocument.Select'와 같이해서는 안됩니다.'Selection.Copy'' Selection.GoTo what : = wdGoToPage, which : = wdGoToLast'' Selection.Paste'? –

답변

0

에서

Dim Word As Word.Application 
Dim Doc As Word.Document 
'Start Word and open the document template. 
Word = CreateObject("Word.Application") 
Word.Visible = True 
Doc = Word.Documents.Add 

를 작동하는 동안 걸렸지 만 어떻게 든 난 아무 생각이 존재하지 있던 약 MailMerge을 발견했다. 간단히 말해서, 변수가있는 템플릿 문서를 가질 수 있으며 입력 문서를 Excel로 가져올 수 있습니다. Excel 문서에는 변수 이름이 포함 된 머리글 행이 있으며 Excel 문서의 각 개별 셀은 문서에 들어갈 변수를 나타냅니다. MailMerge을 실행하면 템플릿이 n 페이지 수로 대체됩니다 (여기서 n은 Excel 행 수). 이것은 하나의 큰 엑셀 문서에 여러 문서를 추가하는 제 문제를 해결합니다. 필자는 Excel 문서에서 1,000 행을 테스트했으며 완벽하게 작동했습니다.

여기에 내가 함께 종료 코드는 다음과 같습니다

 Dim wrdSelection As Word.Selection 
     Dim wrdMailMerge As Word.MailMerge 
     Dim wrdMergeFields As Word.MailMergeFields 

     ' Create an instance of Word and make it visible. 
     wrdAppMailMrg = CreateObject("Word.Application") 
     wrdAppMailMrg.Visible = True 

     ' Add a new document. 
     wrdDocMailMrg = wrdAppMailMrg.Documents.Open("Template.docx") 
     wrdDocMailMrg.Select() 

     wrdSelection = wrdAppMailMrg.Selection() 
     wrdMailMerge = wrdDocMailMrg.MailMerge() 

     'Open Data Source 
     wrdDocMailMrg.MailMerge.OpenDataSource("InputVariables.xlsx", SQLStatement:="SELECT * FROM [Sheet1$]") 

     ' Perform mail merge. 
     wrdMailMerge.Destination = _ 
        Word.WdMailMergeDestination.wdSendToNewDocument 
     wrdMailMerge.Execute(False) 

     ' Close the original form document. 
     wrdDocMailMrg.Saved = True 
     wrdDocMailMrg.Close(False) 

     ' Release References. 
     wrdSelection = Nothing 
     wrdMailMerge = Nothing 
     wrdMergeFields = Nothing 
     wrdDocMailMrg = Nothing 
     wrdAppMailMrg = Nothing 

지금 난 그냥 빨리 실행하고 UI를 정리하기 위해 그것을 조정할 필요가 있지만, 기능이 완전히있다.

0

당신은 할당,

objWordApp.Documents.Add (tempDoc) 그냥 성명을 발표하지 않았다 무슨의 의사의 '이것은 어디 문제는!

Dim wordApp as new Microsoft.Office.Interop.Word.Application 
wordApp.Visible = true 
Dim doc as Word.Document 
doc = wordApp.Documents.Add 

당신이 좋은 준비가 될 때까지 당신이 그것을 저장할 필요가 없습니다. 이것은 또한 http://support.microsoft.com/kb/316383

+0

GrayFox374, 오해 한 것에 대해 유감스럽게 생각합니다. 제 코드에는 실제로 간결함을위한 질문에서 제외시킨 선언이 있습니다. 내 코드가 제대로 작동하는 것 같다. (모든 것이 제대로 선언되었다.) 메모리에 Word.Document를 선언하고 Word.Application에 데이터를 추가하는 방법을 알고 싶다. – Boeckm

+0

그게 내가 처리 한 것이다. objWordApp.Documents.Add (tempDoc)는 문제라고 말하면서 tempDoc = objWordApp.Documents.Add가 솔루션입니다. 나는 doc을 채우고 그것을 어플리케이션에 추가하는 데 문제가 없으며, 먼저 어플리케이션에 doc을 추가 한 다음 그것을 채우는 데 문제가 없다. – GrayFox374

+0

나는 내 질문을 크게 편집하여 이해하기 쉽게 만들었습니다. – Boeckm