Printing Excel Reports via a Word Document
Using Microsoft Excel & Word
This post will detail the process of establishing a simple database in excel and then linking that to a Standard Report in word and saving the data as a new Word file.
Why use Word?
Some organisations will only accept files in Word format and may have specific formats which are used internationally (International shipping I’m looking at you!)
In these cases although you may be able to setup an Excel file to look exactly like its Word equivalent. But if they wont accept it…
You have to change.
Requirements:
+ A database source in Excel
+ A Word file (to be used as a template, not to be confused with a Word template)
The Process
The process is simply a matter of:
+ Setup a Control sheet
+ Setup a Transfer Sheet
+ Setup a Word template
+ Run the Report
This process will be explained step by step with the help of a worked example: 2007/10 Sample or 1997/03 Sample
This tutorial will only be using the 2007/10 files as examples but feel free to follow along if you are using previous versions.
The 2007/10 Sample has been tested on both Office 2007 & 2010
The 1997/03 Sample has been tested on Office XP (and I make no claim that it will work in prior versions but it might/should)
Open the example workbook (Production records.xlsm from the above links) or your own data file.
Notice that there are 3 worksheets in the workbook:
+ Control: The master sheet which allows selection of your filter or summation criteria and a button to execute a macro
+ Transfer: The transfer sheet, the entry or summation here will be transferred to word
+ Data: The database
Setup a Control Sheet
The control sheet is a simple data validation or selection tool and a button which will run a macro.
It can be as simple or as complex as you need to make it.
Example
In the example above there is simply a Data Validation cell which is linked to a list of shipment numbers and a Button to run the reports VBA subroutine.
You can make yours as simple or as complex as you need to extract the data from your data source.
The Produce Word Report button is linked to the MergeMe VBA subroutine.
Setup a Transfer Sheet
The Transfer sheet requires 2 rows
Row 1: Has a list of field names, These will be used in Word later so use something meaningful.
Row 2: Has a list of the records which will be transferred to Word. The cells will contain sufficient formulas to extract the relevant records from the Data sheet using the Data validation on the Control Sheet.
You need to setup sufficient fields to ensure that all records required in Word are setup or retrieved.
The order of the fields isn’t important as the field names are used for the transfer not the order.
Also you don’t have to use all the fields in Word, but if the Field isn’t made here you can’t retrieve it later.
The format or layout doesn’t matter as this is controlled in Word.
Example
Notice on the Transfer sheet that the Top Row is a list of field names
The second row uses an Index(Match( )) combination to retrieve the relevant records from the Data sheet.
Save the Excel file.
In the sample file I have made a simple retrieval of a matching records and associated fields, but the Transfer sheet could have just as easily sumarised multiple rows of data from your data source.
Setup a Word template
Setup in word a file which will be used as a template for the import.
Leave gaps where your fields values will go.
Save the file
Example
Open the example file (Shipping Template.docx)
If this is the first time you have opened the example file it may prompt you
“Opening this file will run the following SQL File …”
This is ok so accept Yes
You can either accept that and then follow the links to connect the file to the Production records.xlsm file
It will then prompt you for the Data Table which in our case is Transfer$ ie: the Sheet Name with a $ sign at the end
If it didn’t prompt you above or you answered No to the “Opening this file will run the following SQL File …” prompt we will connect again later anyway.
Now setup the file in word with all the text graphics, lines colors etc required for your form/report.
Leave gaps for the fields which we will add next.
Adding fields
Use mail merge to open the data source (Production records.xlsm)
Goto Mailings, Select Recipients, Use Existing List…
Navigate to the Production Records.xlsm file after which it will prompt you for the table which in our case is Transfer$ ie: the Sheet Name with a $ sign at the end (as discussed above)
Move to the 4 missing Field Locations as per the following table and insert the Field Names using the
Mailings, Insert Merge Field tab
Insert Fields as per the following table and highlights above:
| Location | Field Name (from Production Records.xlsm) |
| Shipment No : | Shipment_No |
| Material : | Cargo |
| Tonnes : | Tonnes |
The other fields Destination, Form and Date have already been pre-entered and are shown in Blue
You can format the fields as required, select the entire field and change the font, colors etc to suit.
You can view the field values using the Preview Results Button, see below
Make any other changes to the file
Save the file as a Word File Shipping Template.docx (not as a Word Template *.dotx)
Close Word
Run the Report
In the Production records.xlsm file we will now link the macro to the button on the control sheet
We need to check 3 lines in the macro before we execute it.
Goto VBA using Alt F11
Select the Production Records.xlsm, Modules on the left and find the
Sub MergeMe() Subroutine on the right
Near the top of the subroutine are 2 lines which list both the file which Word will use as a template and what the new file will be saved as after merging.
‘ Setup filenames
Const WTempName = “Shipping Template.docx“ ‘This is the Word Templates name, Change as req’d
Const NewFileName = “New Certificate.docx” ‘This is the New Word Documents File Name, Change as req’d
Change these values as appropriate
The code will overwrite the existing output file if it exists so once executes save it to another name/location.
If you are using your own data file copy this subroutine to your own VBA Module and edit as above.
You can now go back to Excel (Alt F11) and execute the macro using the button on the control page.
You should now have a new file called New Certificate.docx in the same directory as the Sample files.
Future Extensions
The above macro which does this transfer is a simple and easily scalable to 50+ fields without any modification.
Future enhancements would be:
+ Sourcing the New Word File name from the Control sheet
+ Incremental numbering of the word document each time the transfer is done
+ Numbering of the word document based on a Field value each time the transfer is done
+ Export of Multiple records at one time
+ Conditional formatting in Word based on field values
+ Improved error checking
If you are interested I encourage you to modify and post these enhancements here for all to benefit.
Macro
You can copy the Macro into any Excel file and save it as an *.xlsm file and link it to a Button and be up and running in minutes
The macro has a very small number of changes that need making internally to work anywhere.
What have been your Excel to Word transfer experiences ?
What have been your Excel to Word transfer experiences, let us know in the comments below:
What do you think of this approach to data transfer ?





















12 Responses to “29 Excel Formula Tips for all Occasions [and proof that PHD readers truly rock]”
Some great contributions here.
Gotta love the Friday 13th formula 😀
Great tips from you all! Thanks a lot for sharing! bsamson, particularly you helped me on a terribly annoying task. 🙂
(BTW, Chandoo, it's not exactly "Find if a range is normally distributed" what my suggestion does. It checks if two proportions are statistically different. I probably gave you a bad explanation on twitter, but it'd be probably better if you fix it here... 🙂 )
Great compilation Chandoo
For the "Clean your text before you lookup"
=VLOOKUP(CLEAN(TRIM(E20)),F5:G18,2,0)
I would like to share a method to convert a number-stored-as-text before you lookup:
=VLOOKUP(E20+0,F5:G18,2,0)
@Peder, yeah, I loved that formula
@Aires: Sorry, I misunderstood your formula. Corrected the heading now.
@John.. that is a cool tip.
Hey Chandoo,
That p-value formula is really great for a statistics person like me.
What a p-value essentially is, is the probability that the results obtained from a statistical test aren't valid. So for example, if my p value is .05, there's a 5% probability that my results are wrong.
You can play with this if you install the Data Analysis Toolpak (which will perform some statistical tests for you AND provide the P Value.)
Let's say for example I've got two weeks of data (separated into columns) with the number of hours worked per day. I want to find out if the total number of hours I worked in week two were really all the different than week one.
Week1 Week2
10 11
12 9
9 10
7 8
5 8
Go to Data > Data Analysis > T-Test Assuming Unequal Variances > OK
In the Variable 1 Box, select the range of data for week 1.
In the Variable 2 Box, select the range of data for week 2.
Check "Labels"
In the Alpha box, select a value (in percentage terms) for how tolerant you are of error.
.05 is the general standard; that is to say I am willing to accept a 95% level of confidence that my result is accuarate.
Select a range output.
Excel calculates a number of results: Average (mean) for each week's data, etc.
You'll notice however that there are two P Values; one-tail and two-tail. (one tail tests are for > or .05), the number of hours I worked in week two is statistically equivalent to the number of hours I worked in week one.
So here’s a way you might want to use this. You put up a new entry on your blog. You think it’s the best entry ever! So you pull your webstats for this week and compare it to last week. You gather data for each week on the length of time a visitor spends on your website. The question you’re trying to prove statistically is whether there’s an average increase in the amount of time spent on your website this week as compared to last week (as a result of your fancy new blog post). You can run the same statistical test I illustrated above to find out. Incidentally, it matters very little to the stat test whether the quantity of visitors differs or not.
Anyhow, the Data Analysis toolpack doesn't perform a lot of stat tests that folks like me would like to have access to. In those cases I have to either use different software, or write some very complicated mathematical formulas. Having this p-value formula makes my life a LOT easier!
Thanks!
Eric~
Fantastic stuf..One line explanation is cool.
Thanks to all the contributors
OS
Take FirstName, MI, LastName in access (you can fix it to work in excel) capitalize first letter of each and lowercase the rest and add ". " if MI exists then same for last name:
Full Name: Format(Left([FirstName],1),">") & Format(Right([FirstName]),Len([FirstName])-1),"") & ". ","") & Format(Left([LastName],1),">") & Format(Right([LastName],Len([LastName])-1),"<")
I teach excel, access, etc etc for a living and i have my access students build this formula one step at a time from the inside out to show how formulas can be made even if it looks complicated. Yes I know I could just do IsNull([MI]) and reverse the order in the Iif() function but the point here is to nest as many functions as possible one by one (also I illustrate how it will fail without the Not() as it is)
Extract the month from a date
The easiest formula for this is =MONTH(a1)
It will return a 1 for January, 2 for February etc.
if in a column we write the value of total person for eg. 10 if we spent 1.33 paise each person then how we get total amount in next column and the result will in round form plzzzzz solve my problem sir................... thank u
@Anjali
If the value 10 is in B2 and 1.33 paise is in C2 the formula in D2 could be =B2*C2
If the values are a column of values you can copy the formula down by copy/paste or drag the small black handle at the bottom right corner of cell D2
kindly share with me new forumulas.
How to convert a figure like 870.70 into 870 but 871.70 into 880 using excel formula ? Please help.