Create word document and add image from .NET app - c#

I need a way of generating a word document (from a template or something) and inserting an image at a specific place. Does anyone have any pointers on the best way to do this?
I worked on a project that used Office Automation in .NET 1.1 a few years ago, and it was really unspeakably poor. I'm assuming OA has either been improved or been superceeded by a better solution, but I'm not finding much advice on google.
Edit to clarify, this will be running on a web or sharepoint server

Alternatively, and if you do not need to generate word documents that will work with versions prior to Word 2007, you could use the OpenXML SDK to create your Word Document. It's all managed code and way easier in my opinion to use than OA.

Having done something very similar, I would advise against it. Office Automation within a server environment is buggy. Further the COM Interop requires an interactive user, i.e. there is no 'headless' mode.
Use OpenXML as suggested by Gimly, this would be cleaner approach.

Following line would add the image to word document.
wordDoc.InlineShapes.AddPicture(filePath, ref link, ref save, ref range);
Here, link should be false and save should be true. Range should be the location where you need to add image.
This link should help out dealing with the Interop.

Related

Automate Excel items to Word template

Hi Stack overflow Gurus
I'm trying to help my work automate some of the things we do here.
Scenario,
We work with excel a lot (dealing with tons of number). When all calculations are done, we have a word document we need to copy some of the numbers/ other info to. This document is then shared.
Hope,
I want to create an Add-in in Excel such that once the calculations are done for any of the spreadsheets, anyone on the team should just be able to click a button in the toolbar to auto-create the final document. (I would like it to open the file browser, so we can pick from different templates)
My basic knowledge,
Using bookmarks in the word template seems to be the way to go for creating tags to eventually replace.
I want the add-in to be installed in Excel
I have been reading up on Office Web add-ins, VSTO, VBA and not entirely sure which to go with. What i have learned so far
VBA seems to be at the document level, but i want this to be an add-in as it will apply to different external spreadsheets we will be getting. Not sure if my research is fully accurate though.
I am thinking I will have to use VSTO or the new Web add-ins. I'm not entirely sure if the new Web add-ins are supposed to be updated versions of VSTOs or they have different use cases. Could anyone shed some light on this for me please
Lastly, would VSTO or the new Web add-ins be able to accomplish what I'm trying to do?
Sorry for the noob questions, I'm very new to all of this and I'm trying to teach myself all of this.
Thank you.
Here is a quick example which allows you to get data from a cell (Excel) in Word:
Dim o As Object
Dim pgh As Paragraph
dim temp as string
Set o = CreateObject("excel.application")
o.Workbooks.Open ("c:\temp\test.xlsx")
o.ActiveWorkbook.Worksheets.Add.Name = "x"
o.ActiveWorkbook.Worksheets("x").Activate
temp = o.ActiveWorkbook.Worksheets("sheet1").Cells(3, 3)
o.Quit
Once the data is in Word it is fairly easy to put it where you want. You an do it the opposite way by having Excel place the data in Word.
Yes, VSTO is the right tool for adding custom functionality to an Office document – like reading a database into your workbooks and/or docking an interactive “Action Pane” beside your Word document. But before you get too deep into the woods with VSTO, maybe all you need is VB, Visual Studio, and Aspose.Cells and maybe Aspose Words for .Net. They have many well documented examples, the product can be downloaded and used before buying any license, and their sample code is a great way to get started with automating Office documents. Enjoy!

Complex reports from C# programatically into office Word

First of all I want to say hi to the programming community, what I am looking for is a way to generate a report from my Windows Forms Application in word preferably, this report is basically a list of pre-configured days in a tour creation software I am creating.
I have searched everywhere and I cant seem to find information on how to start creating the report, I have all the information saved into a database, I just need to be able to get this information into word and ordered as it should be ordered.
I just want to be pointed in the right direction so I can research on it even further.
The exact thing I want to create is a word file that I wish I could share here so you can actually see what I mean.
Thank you for all your attention and help if possible.
I can point you in the right direction. Word documents are stored in a format called OpenXml which can be created and manipulated without actually using Word directly. That's good because you don't want to deal with code that actually starts an instance of Word and automates it (Interop.) It sort of works but it's not something I recommend dealing with ever.
OpenXml isn't fun either, but it's better. You can create your document "normally" using Word, save it, and then have your application use it as a template, opening a copy, populating some data, and then saving it.
Here's the reference for OpenXml with Word. I'm not saying it's pretty. It's not. The documentation is lacking. This page on adding text isn't linked from the previous page, even though many other topics are.
There are some nuget packages like this one that can help.
I once did a POC that did exactly what you're describing by opening and altering a document used a template using OpenXml. I'll see if I can dig up the code. But this is definitely a good direction to look in if Word is an absolute requirement.
This is a long shot, but can you output in HTML? If you can that's an even easier alternative.
Can you use Excel? That's also OpenXml but there's easier-to-use tools like EPPlus that simplify dealing with it, because it's not just the friendliest thing to work with.
An option that I would suggest is Crystal Reports. You can download the Crystal Reports add-in for Visual Studio for free from here. Crystal Reports is an easy way to perform reporting from various data sources including SQL. There are also a lot of free tutorials online for learning how to use CR. The syntax is a little strange, but it is easy enough to use.
The add-in allows you to create reports for your application and also build applications that can display, print, and export Crystal Reports.
You can export reports to .RTF (Rich Text Format) files. MS Word can open, edit, and convert RTF documents. It does a fairly decent job, but special formatting might take some work. This route is a ton easier than trying to write XML or anything else. I've written several reports designed for export to RTF. My boss runs the report, exports it, then edits it in Word. He loves the reports.
If you are planning on developing a lot of reports, purchasing the full version of Crystal Reports is well worth it. I believe they are on version 2016 currently.
If you do want to deal with automating Word, Microsoft's guide "Automating Applications Using the Office Object Model" Word-specific task content is here: https://msdn.microsoft.com/en-us/library/78whx7s6(v=vs.80).aspx
A larger example: https://support.microsoft.com/en-us/kb/316384
To begin, simply add an assembly reference to your project file for the correct Office Object Library (example: "Microsoft Word ##.0 Object Library"). Note that you must have Office installed to take this approach.
Good luck!

Code to read Word docs

I need a script (or other code, C#, etc.) that will fetch every paragraph/sentence containing a particular word in a set of Word 2007 documents and move them to a new Word document, recording the filename of the original (source) document they were extracted from.
What about using a document indexer, such as dtSearch to index your documents (word, pdf, etc), and then tap into their API to do your unique searches that way. From what it sounds that might be the fastest way to accomplish this. Granted indexers like dtSearch cost money (not a whole lot), but sometimes it may be worth the cost compared to the hours you will spend trying to write your own code to do the same thing.
Some articles that I have found that might lead you in the right direction if you don't want to use an indexer are:
http://omegacoder.com/?p=555
and
http://weblogs.asp.net/guystarbuck/archive/2008/05/13/automated-search-and-replace-in-multiple-word-2007-documents-with-c.aspx
Edit
To find a sentence that contains a specific word, you can try this link http://msdn.microsoft.com/en-us/library/bb546163.aspx
This might give you a start: http://msdn.microsoft.com/en-us/library/ff834910.aspx
Office Interop is an option but beware: it is not supported by MS in server-like scenarios (like ASP.NET or Windows Service or similar) - see http://support.microsoft.com/default.aspx?scid=kb;EN-US;q257757#kb2 !
You will need to use some library to achieve what you want:
MS provides the OpenXML SDK V 2.0 (free)
Aspose.Words (commercial)

Is there a way to generate word documents dynamically without having word on the machine

I am planning on generating a Word document on the webserver dynamically. Is there good way of doing this in c#? I know I could script Word to do this but I would prefer another option.
I've worked at a company in the past that really wanted generated word documents, in the end they were perfectly satisfied with RTF docs that had a ".doc" extension. Word has no problem recognizing and opening them.
The RTF docs were generated with iText.net (free .net library), the API is pretty easy to use, performs extremely well, you don't need word on the machine, also, you could extend to generating PDF, HTML, and Text docs in the future with very little effort. After four years the solution I created is still in place, so that's a little testimony in iText.net's favor.
It looks like the official iText page suggests that iText Sharp is the best .Net choice right now, so that's another option
You'd be better off generating an rtf file, which word will know how to open.
If want to generate Office 2007 documents check the Open XML File Formats, they're simple zipped XML files, check this links:
Open XML File Formats: What is it, and how can I get started?
Introducing the Office (2007) Open XML File Formats
Edit: Check this project, can serve you as a good starting point:
DocumentMaker
Seems very simple and customizable, look this code snippet:
Paragraph p = new Paragraph();
p.Runs.Add(new Run("Text can have multiple format styles, they can be "));
p.Runs.Add(new Run("bold and italic",
TextFormats.Format.Bold | TextFormats.Format.Italic));
doc.Paragraphs.Add(p);
Word will quite happily open a HTML with a .doc extension. If you include an internal style sheet, you can have it fully formatted. There was previous post on this subject:
Export to Word Document in C#
Creating the old .DOC files (pre-Word 2007) is nigh-impossible without Word itself. The format is just too complex. Microsoft has released the format description, but it's enough to reduce a grown programmer to tears. There is a reason for that too (historical), but that doesn't make things better.
The new .DOCX would be easier, although quite a bit of hassle still. However depending on which Word versions you are targeting, there are some other options too.
For one, there is the classic .RTF. The format is pretty complex still, yet well documented and has strong support across many applications and platforms. And you might use some string-replacing into template files to make things easier (it's non-binary).
Then there are the "old" Word XML files. I think they worked starting with Word XP. Kinda the predecessors of .DOCX. I've used them, not bad. And the documentation is pretty OK.
Finally, the easy way that I would choose, is to make a simple HTML. Word can load HTML files just fine starting with version 2000. In the simplest way just change the extension of a HTML file to .DOC and you have it. You can also add a few word-specific tags and comments to make it look even better in Word. Use the Word's Save As...HTML option to see what they are.
There are third party libraries about that will do the job.
Doing a quick google came up with this one, for example.
I haven't tried any, so I can't give you specific advice, I'm afraid!
Let us know how you get on...
In Office 2007 Microsoft introduced a new file format called the Microsoft Open Office XML Format (.docx). This format is not compatible with older versions of Microsoft Word. Since this is XML you can create or read with out having a Word installed.
Here is the component that generates document based on the custom template. The documents are generated from the sharepoint list ... so the data is pulled from the list item into the document on the fly:
http://store.sharemuch.com/products/generate-word-documents-from-sharepoint-list
Hope that helps,
Yaroslav Pentsarskyy
Blog: www.sharemuch.com

Do I need to have MS Word installed for creating Word documents from asp.net?

See title...
No.
You can use WordML (Word XML)
Word 2007 version
You can create Word 2007 documents using its XML format without the need of installing Word in your server.
This can be a starting point.
I've already +1'd Mitch's reply, but as an aside: Word isn't even supported for use in service applications; it is designed to be user-interactive. So installing Word, even if it worked, wouldn't leave you in a great place.
If you're just generating the documents from scratch the solutions so far proposed work well. My situation was that I had an existing template that I needed to use and substitute in my own text in a few places (mail merge, if you will). This was several years ago - prior to Office 2007 - but we ended up going with the Aspose library of components for this. I've used the Words and Cells (Excel) components to generate documents from templates and spreadsheets on the fly to download from web sites. The interfaces are a little clunky and can be inconsistent between the various products. The installer, frankly, is awful, but the products work pretty well and made it much easier to do what needed to be done.
Word recognizes rtf as intrinsic, and if your intended document can be constructed as whatever.rtf - which for all of its fancy formatting is plain ASCII markup - then you shd be able to write the document without Word installed.
To get the picture, create an example document and save it as an rtf file. Then view that file with an ascii text editor (like Notepad). You'll have to learn rtf syntax, but there's at least one handbook around on that.
AS
Just to add another potential solution for you, OfficeWriter is a Word/Excel API that lets you create documents and spreadsheets in ASP.NET without using Office:
http://www.officewriter.com

Categories