Home |
Search |
Today's Posts |
|
#1
Posted to microsoft.public.word.docmanagement
|
|||
|
|||
How to Merge data from an ascii file into a Word Doc
I want to merge fields from an ascii file into a word document.
The ascii file has a word or phrase on each line. Each line will be a merged field. There will be approx 20 lines to be merged into various places in the document. How do you set up the word doc to receive these fields? |
#2
Posted to microsoft.public.word.docmanagement
|
|||
|
|||
How to Merge data from an ascii file into a Word Doc
I assume that the list will be merged into various places in the same
document, rather than one place in 20 different documents? That being the case, you will need first to convert the list to a merge data format. This is probably simplest to do in Excel. Open the text file in Excel then transpose the list so that the entries are all in one row. insert a header row and name the columns A, B, C etc will work. Save the file as an Excel document and use that as a merge data source for a letter merge. Insert the 20 fields where you want them. Merge to a new document. If the list is to be merged into the same place in 20 documents, open the list in Word convert the text to a one column table. Add a row at the top and give the column a name. Save as a document and use that as a merge data source. The principles of mail merge are covered at http://www.gmayor.com/mail_merge_lab...th_word_xp.htm or http://www.gmayor.com/merge_labels_with_word_2007.htm -- Graham Mayor - Word MVP My web site www.gmayor.com Word MVP web site http://word.mvps.org Bernie wrote: I want to merge fields from an ascii file into a word document. The ascii file has a word or phrase on each line. Each line will be a merged field. There will be approx 20 lines to be merged into various places in the document. How do you set up the word doc to receive these fields? |
#3
Posted to microsoft.public.word.docmanagement
|
|||
|
|||
How to Merge data from an ascii file into a Word Doc
Hi Graham,
Your first paragraph is correct. Can you tell me what a "merge data format" looks like? Then I could add that to my ascii file. I need to automate this process so going thru Excel is not a choice. Also, can you give me the steps for specifying how to create the merge field into the Word doc and how do I specify to Word, to get the data from my ascii file. Thanks in advance for your help. Bernie "Graham Mayor" wrote: I assume that the list will be merged into various places in the same document, rather than one place in 20 different documents? That being the case, you will need first to convert the list to a merge data format. This is probably simplest to do in Excel. Open the text file in Excel then transpose the list so that the entries are all in one row. insert a header row and name the columns A, B, C etc will work. Save the file as an Excel document and use that as a merge data source for a letter merge. Insert the 20 fields where you want them. Merge to a new document. If the list is to be merged into the same place in 20 documents, open the list in Word convert the text to a one column table. Add a row at the top and give the column a name. Save as a document and use that as a merge data source. The principles of mail merge are covered at http://www.gmayor.com/mail_merge_lab...th_word_xp.htm or http://www.gmayor.com/merge_labels_with_word_2007.htm -- Graham Mayor - Word MVP My web site www.gmayor.com Word MVP web site http://word.mvps.org Bernie wrote: I want to merge fields from an ascii file into a word document. The ascii file has a word or phrase on each line. Each line will be a merged field. There will be approx 20 lines to be merged into various places in the document. How do you set up the word doc to receive these fields? |
#4
Posted to microsoft.public.word.docmanagement
|
|||
|
|||
How to Merge data from an ascii file into a Word Doc
Find more information on mail merge data sources at
http://word.mvps.org/FAQs/MailMerge/...DataSource.htm. Note that comma-delimited text can be used (section 5 of that article). -- Suzanne S. Barnhill Microsoft MVP (Word) Words into Type Fairhope, Alabama USA http://word.mvps.org "Bernie" wrote in message ... Hi Graham, Your first paragraph is correct. Can you tell me what a "merge data format" looks like? Then I could add that to my ascii file. I need to automate this process so going thru Excel is not a choice. Also, can you give me the steps for specifying how to create the merge field into the Word doc and how do I specify to Word, to get the data from my ascii file. Thanks in advance for your help. Bernie "Graham Mayor" wrote: I assume that the list will be merged into various places in the same document, rather than one place in 20 different documents? That being the case, you will need first to convert the list to a merge data format. This is probably simplest to do in Excel. Open the text file in Excel then transpose the list so that the entries are all in one row. insert a header row and name the columns A, B, C etc will work. Save the file as an Excel document and use that as a merge data source for a letter merge. Insert the 20 fields where you want them. Merge to a new document. If the list is to be merged into the same place in 20 documents, open the list in Word convert the text to a one column table. Add a row at the top and give the column a name. Save as a document and use that as a merge data source. The principles of mail merge are covered at http://www.gmayor.com/mail_merge_lab...th_word_xp.htm or http://www.gmayor.com/merge_labels_with_word_2007.htm -- Graham Mayor - Word MVP My web site www.gmayor.com Word MVP web site http://word.mvps.org Bernie wrote: I want to merge fields from an ascii file into a word document. The ascii file has a word or phrase on each line. Each line will be a merged field. There will be approx 20 lines to be merged into various places in the document. How do you set up the word doc to receive these fields? |
#5
Posted to microsoft.public.word.docmanagement
|
|||
|
|||
How to Merge data from an ascii file into a Word Doc
My second paragraph explains what a merge data format looks like - the
simplest format is a table with a header row, but it could be a comma delimited file with a header row. My last paragraph has links to tutorials for the mail merge process. As we don't know what Word version you have and as this is an ASCII file the following macro contains more code than strictly necessary, but it should create a data file in Word Doc or Docx format from your list without altering the ASCII file. You can then use that data file in connection with a mail merge. The fields are named Field_1 to Field_n where n is the number of rows in your list and reflect the order in which they appear in the list. Insert the fields in your document where you want the data to appear. Sub CreateDataFormat() Dim lNum As Long Dim i As Long Dim fNum As Long lNum = 0 fNum = 0 With Selection .HomeKey wdStory .Find.Execute findText:="^13^13", _ ReplaceWith:="", _ Forward:=True, _ Replace:=wdReplaceAll For i = 1 To ActiveDocument.Characters.Count If ActiveDocument.Characters(i) = Chr(13) Then lNum = lNum + 1 End If Next i .Find.Execute findText:="^13", _ ReplaceWith:=", ", _ Forward:=True, _ Replace:=wdReplaceAll .EndKey wdStory .Find.Execute findText:=", ", _ ReplaceWith:="", _ Forward:=False, _ Replace:=wdReplaceOne .HomeKey wdStory For i = 1 To lNum fNum = fNum + 1 .TypeText "Field_" & fNum If i lNum Then .TypeText ", " Next i .TypeParagraph End With ActiveDocument.Select WordBasic.TextToTable ConvertFrom:=2, NumColumns:=lNum, NumRows:=2, _ InitialColWidth:=wdAutoPosition, Format:=0, Apply:=1184, AutoFit:=0, _ SetDefault:=0, Word8:=0, Style:="Table Grid" strDocName = Split(ActiveDocument.FullName, ".") If Application.version = 12 Then ActiveDocument.SaveAs _ FileName:=strDocName(0) & ".docx", _ FileFormat:=16 Else ActiveDocument.SaveAs _ FileName:=strDocName(0) & ".doc", _ FileFormat:=0 End If End Sub http://www.gmayor.com/installing_macro.htm -- Graham Mayor - Word MVP My web site www.gmayor.com Word MVP web site http://word.mvps.org Bernie wrote: Hi Graham, Your first paragraph is correct. Can you tell me what a "merge data format" looks like? Then I could add that to my ascii file. I need to automate this process so going thru Excel is not a choice. Also, can you give me the steps for specifying how to create the merge field into the Word doc and how do I specify to Word, to get the data from my ascii file. Thanks in advance for your help. Bernie "Graham Mayor" wrote: I assume that the list will be merged into various places in the same document, rather than one place in 20 different documents? That being the case, you will need first to convert the list to a merge data format. This is probably simplest to do in Excel. Open the text file in Excel then transpose the list so that the entries are all in one row. insert a header row and name the columns A, B, C etc will work. Save the file as an Excel document and use that as a merge data source for a letter merge. Insert the 20 fields where you want them. Merge to a new document. If the list is to be merged into the same place in 20 documents, open the list in Word convert the text to a one column table. Add a row at the top and give the column a name. Save as a document and use that as a merge data source. The principles of mail merge are covered at http://www.gmayor.com/mail_merge_lab...th_word_xp.htm or http://www.gmayor.com/merge_labels_with_word_2007.htm -- Graham Mayor - Word MVP My web site www.gmayor.com Word MVP web site http://word.mvps.org Bernie wrote: I want to merge fields from an ascii file into a word document. The ascii file has a word or phrase on each line. Each line will be a merged field. There will be approx 20 lines to be merged into various places in the document. How do you set up the word doc to receive these fields? |
#6
Posted to microsoft.public.word.docmanagement
|
|||
|
|||
How to Merge data from an ascii file into a Word Doc
If you have to resort to using a macro, the following approach might be
simpler: Run the following macro to transfer each line into a "document variable" so that variable "line1" contains the first line from your file, variable "line2" contains the second line, and so on. Then you can insert (say) the 3rd line using a field like { DOCVARIABLE line3 } Sub TransferTextRowsToVariables() Dim iCount As Integer Dim strLine As String ' use your file name here Open "c:\a\ascii.txt" For Input As 1 iCount = 0 While Not EOF(1) Line Input #1, strLine iCount = iCount + 1 On Error Resume Next ActiveDocument.Variables("line" & iCount).Delete Err.Clear On Error GoTo 0 ActiveDocument.Variables.Add "line" & iCount, strLine Wend Close #1 End Sub Peter Jamieson http://tips.pjmsn.me.uk Visit Londinium at http://www.ralphwatson.tv Bernie wrote: Hi Graham, Your first paragraph is correct. Can you tell me what a "merge data format" looks like? Then I could add that to my ascii file. I need to automate this process so going thru Excel is not a choice. Also, can you give me the steps for specifying how to create the merge field into the Word doc and how do I specify to Word, to get the data from my ascii file. Thanks in advance for your help. Bernie "Graham Mayor" wrote: I assume that the list will be merged into various places in the same document, rather than one place in 20 different documents? That being the case, you will need first to convert the list to a merge data format. This is probably simplest to do in Excel. Open the text file in Excel then transpose the list so that the entries are all in one row. insert a header row and name the columns A, B, C etc will work. Save the file as an Excel document and use that as a merge data source for a letter merge. Insert the 20 fields where you want them. Merge to a new document. If the list is to be merged into the same place in 20 documents, open the list in Word convert the text to a one column table. Add a row at the top and give the column a name. Save as a document and use that as a merge data source. The principles of mail merge are covered at http://www.gmayor.com/mail_merge_lab...th_word_xp.htm or http://www.gmayor.com/merge_labels_with_word_2007.htm -- Graham Mayor - Word MVP My web site www.gmayor.com Word MVP web site http://word.mvps.org Bernie wrote: I want to merge fields from an ascii file into a word document. The ascii file has a word or phrase on each line. Each line will be a merged field. There will be approx 20 lines to be merged into various places in the document. How do you set up the word doc to receive these fields? |
#7
Posted to microsoft.public.word.docmanagement
|
|||
|
|||
How to Merge data from an ascii file into a Word Doc
Good thinking - That has the makings of a plan
I have taken the liberty of making a couple of minor changes to cover the issue of one or more empty lines in the text file and to remove all relevant docvariables in the document that may have been created by a previous longer file, for I have the feeling that this is going to be a repeat requirement. I have also added a message box at the end so the user knows how many variables are present. If the file is always going to be of the same length, this message box can be omitted. Sub TransferTextRowsToVariables() Dim iCount As Integer Dim strLine As String Dim vVar As Variant Dim oVars As Variables Set oVars = ActiveDocument.Variables For Each vVar In oVars If InStr(1, vVar.name, "line") Then vVar.Delete End If Next vVar ' use your file name here Open "c:\a\ascii.txt" For Input As 1 iCount = 0 While Not EOF(1) Line Input #1, strLine iCount = iCount + 1 On Error Resume Next 'ActiveDocument.Variables("line" & iCount).Delete Err.Clear On Error GoTo 0 If Len(strLine) 0 Then ActiveDocument.Variables.Add "line" & iCount, strLine Else iCount = iCount - 1 End If Wend Close #1 MsgBox "Variables line1 to line" & iCount & " created" End Sub -- Graham Mayor - Word MVP My web site www.gmayor.com Word MVP web site http://word.mvps.org Peter Jamieson wrote: If you have to resort to using a macro, the following approach might be simpler: Run the following macro to transfer each line into a "document variable" so that variable "line1" contains the first line from your file, variable "line2" contains the second line, and so on. Then you can insert (say) the 3rd line using a field like { DOCVARIABLE line3 } Sub TransferTextRowsToVariables() Dim iCount As Integer Dim strLine As String ' use your file name here Open "c:\a\ascii.txt" For Input As 1 iCount = 0 While Not EOF(1) Line Input #1, strLine iCount = iCount + 1 On Error Resume Next ActiveDocument.Variables("line" & iCount).Delete Err.Clear On Error GoTo 0 ActiveDocument.Variables.Add "line" & iCount, strLine Wend Close #1 End Sub Peter Jamieson http://tips.pjmsn.me.uk Visit Londinium at http://www.ralphwatson.tv Bernie wrote: Hi Graham, Your first paragraph is correct. Can you tell me what a "merge data format" looks like? Then I could add that to my ascii file. I need to automate this process so going thru Excel is not a choice. Also, can you give me the steps for specifying how to create the merge field into the Word doc and how do I specify to Word, to get the data from my ascii file. Thanks in advance for your help. Bernie "Graham Mayor" wrote: I assume that the list will be merged into various places in the same document, rather than one place in 20 different documents? That being the case, you will need first to convert the list to a merge data format. This is probably simplest to do in Excel. Open the text file in Excel then transpose the list so that the entries are all in one row. insert a header row and name the columns A, B, C etc will work. Save the file as an Excel document and use that as a merge data source for a letter merge. Insert the 20 fields where you want them. Merge to a new document. If the list is to be merged into the same place in 20 documents, open the list in Word convert the text to a one column table. Add a row at the top and give the column a name. Save as a document and use that as a merge data source. The principles of mail merge are covered at http://www.gmayor.com/mail_merge_lab...th_word_xp.htm or http://www.gmayor.com/merge_labels_with_word_2007.htm -- Graham Mayor - Word MVP My web site www.gmayor.com Word MVP web site http://word.mvps.org Bernie wrote: I want to merge fields from an ascii file into a word document. The ascii file has a word or phrase on each line. Each line will be a merged field. There will be approx 20 lines to be merged into various places in the document. How do you set up the word doc to receive these fields? |
#8
Posted to microsoft.public.word.docmanagement
|
|||
|
|||
How to Merge data from an ascii file into a Word Doc
Having far too much time on my hands today and having created all those
variables in the document, a quick and easy means of inserting the associated fields in the document would not be a bad idea so the following macro will do that. Each time it is run it inserts the next numbered docvariable field at the cursor (so run it from a toolbar button of keyboard shortcut). It requires a further mod to Peter's macro, which is included that counts the available fields and prevents the user from adding more docvariable fields than he has docvariables. Re-run that macro if necessary to add the extra variable that stores the count. Sub InsertLineVariable() Dim oVars As Variables Dim vVar As Variant Dim aNum As Integer Dim bNum As Integer Dim bExists As Boolean Dim varExists As Boolean Set oVars = ActiveDocument.Variables bExists = False varExists = False For Each vVar In oVars If vVar.name = "numVars" Then varExists = True Exit For End If Next vVar For Each vVar In oVars If vVar.name = "varCount" Then bExists = True Exit For End If Next vVar If varExists = False Then MsgBox "There are no variables in the document" & _ " associated with this macro", vbCritical, "Error" Exit Sub End If If bExists = False Then oVars("varCount").Value = 0 End If oVars("varCount").Value = oVars("varCount").Value + 1 aNum = oVars("varCount").Value bNum = oVars("numVars").Value If aNum bNum Then MsgBox "There are no more variables to insert", _ vbInformation, "Insert Variables" Exit Sub End If Selection.Fields.Add Selection.Range, _ wdFieldDocVariable, "line" & _ oVars("varCount").Value, False End Sub Sub TransferTextRowsToVariables() Dim iCount As Integer Dim strLine As String Dim bExists As Boolean Dim vVar As Variant Dim oVars As Variables Set oVars = ActiveDocument.Variables bExists = False For Each vVar In oVars If InStr(1, vVar.name, "line") Then vVar.Delete End If Next vVar ' use your file name here Open "D:\My Documents\Test\Versions\filename.txt" For Input As 1 iCount = 0 While Not EOF(1) Line Input #1, strLine iCount = iCount + 1 On Error Resume Next 'ActiveDocument.Variables("line" & iCount).Delete Err.Clear On Error GoTo 0 If Len(strLine) 0 Then oVars.Add "line" & iCount, strLine Else iCount = iCount - 1 End If Wend Close #1 'MsgBox "Variables line1 to line" & iCount & " created" For Each vVar In oVars If vVar.name = "numVars" Then bExists = True oVars("numVars").Value = iCount Exit For End If Next vVar If bExists = False Then oVars.Add "numVars", iCount End If End Sub -- Graham Mayor - Word MVP My web site www.gmayor.com Word MVP web site http://word.mvps.org Graham Mayor wrote: Good thinking - That has the makings of a plan I have taken the liberty of making a couple of minor changes to cover the issue of one or more empty lines in the text file and to remove all relevant docvariables in the document that may have been created by a previous longer file, for I have the feeling that this is going to be a repeat requirement. I have also added a message box at the end so the user knows how many variables are present. If the file is always going to be of the same length, this message box can be omitted. Sub TransferTextRowsToVariables() Dim iCount As Integer Dim strLine As String Dim vVar As Variant Dim oVars As Variables Set oVars = ActiveDocument.Variables For Each vVar In oVars If InStr(1, vVar.name, "line") Then vVar.Delete End If Next vVar ' use your file name here Open "c:\a\ascii.txt" For Input As 1 iCount = 0 While Not EOF(1) Line Input #1, strLine iCount = iCount + 1 On Error Resume Next 'ActiveDocument.Variables("line" & iCount).Delete Err.Clear On Error GoTo 0 If Len(strLine) 0 Then ActiveDocument.Variables.Add "line" & iCount, strLine Else iCount = iCount - 1 End If Wend Close #1 MsgBox "Variables line1 to line" & iCount & " created" End Sub Peter Jamieson wrote: If you have to resort to using a macro, the following approach might be simpler: Run the following macro to transfer each line into a "document variable" so that variable "line1" contains the first line from your file, variable "line2" contains the second line, and so on. Then you can insert (say) the 3rd line using a field like { DOCVARIABLE line3 } Sub TransferTextRowsToVariables() Dim iCount As Integer Dim strLine As String ' use your file name here Open "c:\a\ascii.txt" For Input As 1 iCount = 0 While Not EOF(1) Line Input #1, strLine iCount = iCount + 1 On Error Resume Next ActiveDocument.Variables("line" & iCount).Delete Err.Clear On Error GoTo 0 ActiveDocument.Variables.Add "line" & iCount, strLine Wend Close #1 End Sub Peter Jamieson http://tips.pjmsn.me.uk Visit Londinium at http://www.ralphwatson.tv Bernie wrote: Hi Graham, Your first paragraph is correct. Can you tell me what a "merge data format" looks like? Then I could add that to my ascii file. I need to automate this process so going thru Excel is not a choice. Also, can you give me the steps for specifying how to create the merge field into the Word doc and how do I specify to Word, to get the data from my ascii file. Thanks in advance for your help. Bernie "Graham Mayor" wrote: I assume that the list will be merged into various places in the same document, rather than one place in 20 different documents? That being the case, you will need first to convert the list to a merge data format. This is probably simplest to do in Excel. Open the text file in Excel then transpose the list so that the entries are all in one row. insert a header row and name the columns A, B, C etc will work. Save the file as an Excel document and use that as a merge data source for a letter merge. Insert the 20 fields where you want them. Merge to a new document. If the list is to be merged into the same place in 20 documents, open the list in Word convert the text to a one column table. Add a row at the top and give the column a name. Save as a document and use that as a merge data source. The principles of mail merge are covered at http://www.gmayor.com/mail_merge_lab...th_word_xp.htm or http://www.gmayor.com/merge_labels_with_word_2007.htm -- Graham Mayor - Word MVP My web site www.gmayor.com Word MVP web site http://word.mvps.org Bernie wrote: I want to merge fields from an ascii file into a word document. The ascii file has a word or phrase on each line. Each line will be a merged field. There will be approx 20 lines to be merged into various places in the document. How do you set up the word doc to receive these fields? |
#9
Posted to microsoft.public.word.docmanagement
|
|||
|
|||
How to Merge data from an ascii file into a Word Doc
Jolly good, Graham.
One thing to be careful of when dealing with Doc variables is what happens to stuff like LF characters etc. when you insert them using DOCVARIABLE fields. I can't remember off the top of my head what the problem is (there's a difference between Word 2007/2003 or some such too) but didn't think it was likely to be a problem for the current prooblem. For a more general solution you might have to modify the strings before they go in the Variables. Peter Jamieson http://tips.pjmsn.me.uk Visit Londinium at http://www.ralphwatson.tv Graham Mayor wrote: Good thinking - That has the makings of a plan I have taken the liberty of making a couple of minor changes to cover the issue of one or more empty lines in the text file and to remove all relevant docvariables in the document that may have been created by a previous longer file, for I have the feeling that this is going to be a repeat requirement. I have also added a message box at the end so the user knows how many variables are present. If the file is always going to be of the same length, this message box can be omitted. Sub TransferTextRowsToVariables() Dim iCount As Integer Dim strLine As String Dim vVar As Variant Dim oVars As Variables Set oVars = ActiveDocument.Variables For Each vVar In oVars If InStr(1, vVar.name, "line") Then vVar.Delete End If Next vVar ' use your file name here Open "c:\a\ascii.txt" For Input As 1 iCount = 0 While Not EOF(1) Line Input #1, strLine iCount = iCount + 1 On Error Resume Next 'ActiveDocument.Variables("line" & iCount).Delete Err.Clear On Error GoTo 0 If Len(strLine) 0 Then ActiveDocument.Variables.Add "line" & iCount, strLine Else iCount = iCount - 1 End If Wend Close #1 MsgBox "Variables line1 to line" & iCount & " created" End Sub |
Reply |
Thread Tools | |
Display Modes | |
|
|
Similar Threads | ||||
Thread | Forum | |||
Merge data from an ascii file into a Word doc | Microsoft Word Help | |||
word mail merge - each row of data to a new file | Microsoft Word Help | |||
Attach ASCII-file to Word document | Microsoft Word Help | |||
How can I merge data into a form from the keyboard vs data file? | Mailmerge | |||
Save file as .doc having all data in ascii character set | Microsoft Word Help |