PowerPoint version compilation - c#

Let's say I am using SharpDevelop/VS to develop an app that uses PowerPoint.
Do I need to recompile the app so there is a build for each version of MS Office?
I have MS Office 2007, but I would also like the app to work with Office 2003 and later, without having to recompile the app for each version.
Do I just need to install the appropriate Office Interop redistributable package/msi on the client machine, and ship my app as is?
Thanks in advance for your help.

If you're using the Microsoft.Office.Interop libraries you just need the 2007 version, it will be backwards compatible with older docs

I have found that you should build against the oldest MS Office you have. We still use MS Office 2000.
The the thought behind this:
Everything MS Office 2000 can do any later version of MS Office can do.
A lot of things MS Office 2007 can do is impossible to do in earlier versions
of MS Office.

I absolutely agree with Nifle. Use the OLDEST ones you can find. If you use 2007, there is a very good chance it will not work with older versions.
Since I did not want to install the oldest Office version on my development PC, I used Virtual PC to create a "final build" environment. I develop with my regular PC then move the source files over to the Virtual PC with Office 2003 and VS installed, and create the final customer build there.
You will need to edit the CSPROJ file to reference the older Office libraries with this method. You can do that by just opening VS on the build virtual PC, removing the references to Office and adding them again.

Just to confirm this with anybody that is trying this. I have a .NET 4 project that references the 15.0 PowerPoint Interop library and the Office 15.0 library (Office 2013). I setup the project to "Embed the Interop Types".
I setup a virtual machine with Office 2007 Ultimate on and ran the application (without copying any additional DLLs). It correctly interacted with PowerPoint to extract the data my application was looking for.
The Interop libraries are backwards compatible from my experience.

Related

Development of Office 2016 Add ons

I have already developed Oulook Add on using Visual Studio 2010 with VSTO
It works for OFFice 2007, 2010 and 2013
Now Office 2016 has been released. is the same application will work for 2016?
Is there any changes in VSTO and PIA Version for Office 2016? is those has been released?
if not when will be released? is there any web page to track the release?
If any, Whether i need to install those?
Appreciated for getting a development guidance in Office 2016
It doesn't matter what PIA version you use in the project. The add-in should work correctly until you use members introduced in newer Office versions. Read more about that in the Running Solutions in Different Versions of Microsoft Office article.
Note, you can use the late-binding technology for accessing properties, methods and events in newer Office versions even when using older PIAs. See Type.InvokeMember .
There is no separate installer for Office 2016 PIAs. You can install them as a part of Office 2016. See How to: Install Office Primary Interop Assemblies for more information.

c# - Office 2016 interop dlls [duplicate]

I had to import an older project (in .Net 2) into Visual Studio 2013, it makes use of the Microsoft Primary Interop Assemblies.
Visual Studio said that I need to add references to the project. Now I went and did some reading and apparently Microsoft has only released the PIA for office 2010? (I have Office 2013)
Now what I would like to know is.
Can I get it to work with office 2013 and be backward compatible?
And if so is this a good route to go for the future? Is it going to be compatible? Because I see you need .Net 2 (at the latest) and Windows 8 comes with 4.5 and not 3 (by default) and most new computers are going to have Office 2012 or 2013.
PIAs are a historical artifact, required only by old .NET versions (before v4). They have been thoroughly and elegantly replaced by the "Embed Interop Types" feature, also known as the "No PIA" feature. Supported since Visual Studio 2010, you'll find it back in the Properties window when you select a reference assembly. It defaults to True. A good video that covers the underlying technology is available here.
Which is the reason that Microsoft doesn't publish the PIAs for Office 2013, they expect you to embed the interop types instead.
The feature is very desirable, it avoids your customer having to install the PIAs on his machine and for you to include them with your installer. Solving the issue when neither takes care of it, an entirely too common mishap. In addition, the PIAs for Office are very large, the great advantage of embedding the interop types is that your assembly only contain the types that you actually use. Many megabytes reduced to a few kilobytes.
The workflow is a little different. Instead of adding a reference to the Microsoft.Office.Interop assemblies as available in the Add Reference dialog, .NET Framework tab, you now use the COM tab. And pick, say, "Microsoft Excel 15.0 Object Library" to generate the interop types for a program that uses Excel. If you load an old project that previously used PIAs then just remove those reference assemblies and add them back from the COM tab.
Do note that a feature is lost, intentionally targeting an old version of Office that you don't actually have installed on your dev machine is more difficult. If that's a requirement then you still need the PIAs for that version, force the Embed Interop Types to True in the Properties window. Actually doing this is questionable, Microsoft has a hard time keeping new Office versions completely compatible with old versions. They've kept it up for 15 years now but it has been running out of steam. A worst-case scenario is targeting a newer version than you have installed on your machine, that's liable to make your program crash with very hard to diagnose exceptions like AccessViolationException.
Do note that you have to make small modifications to your code to allow it to work. The synthetic "XxxxClass" classes are not embedded, just the "Xxxx" interfaces. Simply remove the word "Class" from the new statement.
VS 2015 Community with Office 365 - for whatever reason the Add from the COM object does not work. The solution is go into the GAC and find the interop assemblies, copy them to a temp directory, then add to your project like any DLL.
Also, if you don't know by now, Windows 8 does have older versions of .NET Framework but they aren't installed by default. Go to Program Features ---> Add features to Windows ----> and the first check box should be .NET 3.0 and maybe 2.0. Note, if you are on a WSUS server you will need to tell Windows to grab the files from the Windows Update servers. Hope it helps!
Officially there is no backward compatibility of the PIA for Office. In fact it works.
For backward compatibility reasons I'm using the PIA for Office XP since several years and it works fine with Office XP, 2003, 2007 and 2010 (not yet tested with 2013) and on Windows XP, Vista, 7 and 8.
For compatibility with the different versions of Windows I'm using the .NET framework 3.5.
For the future... it depends of what you are doing with the PIA. If possible it is far better to directly deal with the Open XML files or to create an add-in for word/excel.
I just found out that the Visual Studio 2013 express does not have office-support anymore. So you need at least the pro-version to make it work.

Differences between Office Interop libraries

I am working on a C# .NET v4.0 application which includes generation of Word documents. The application uses the version 14.0.0.0 of the Microsoft Office Interop Word library.
My computer is running Office 2010 (Office14) and I am wondering what are the differences between the versions 14.0.0.0 and the 15.0.0.0 for the library?
Is there any obligation to use one or the other of these two libraries depending on which version of Office I am running?
If you link your app to the version 14.0.0.0 (Word 2010), it will work with Word 2013 (version 15) if you use the "Embed Interop Types" feature in Visual Studio.
If you link to 15.0.0.0, it will not work with Word 2010.
Linking to 15.0.0.0 will let you access to new functionality of 2013 if any.
If you don't need any automation of the application (Word) itself then I would recommand to use the offical Open XML SDK 2.5 for Microsoft Office to process any xlsx docx or pptx.
Download Open XML SDK
Update
I think it does not matter which version. More important is that your implementation works with the version that the customer has currently installed! Maybe or maybe not there could be some breaking changes between the interop interfaces between major versions.

Excel parsing C# without interop

What is best way and practics parsing excel files without using COM interop or OLEDB connection
You could use NetOffice, im currently using it in my project. Its pretty cool,
Code Sample for Excel
Features
Office integration without version limitations
All features of the Office versions 2000, 2002, 2003, 2007, 2010, 2013 are included
Active support in version independent development (please scroll down)
Syntactically and semantically identical to the Microsoft Interop Assemblies
No training if you already know the Office object model, use your existing PIA code
Reduced and more readable code with automatic management of COM proxies
Usable with .NET version 2.0 or higher
Easy Addin Development
No deployment hurdles, no registration
No dependencies, no interop assemblies, no need for VSTO
Visual Studio Project Templates and Wizards available Photo Gallery
I have had good success with ClosedXML.

The application requires that assembly office Version 14.0.0.0 be installed in the GAC first

I have an application which uses the Word and Excel interop references. I have a copy of MS Office 2003 and the client machines use Office 2007, and I get this prompt when clients try to install/run the application.
There are a few articles on this however the solutions either seemed specific to the particular issue or were just unresolved. How can I resolve this?
The referenced Office PIA must be installed and is therefor a requirement to this particular program.
This would happen if running any version of Office, say 2007, if the correctly versioned PIA was not installed. In any case, if the development machine has Office 2003 and the Office 14 PIAs this error would not occur because the "version 14" PIAs can be found in the development environment -- even if Office 2010 itself was not installed.
See the Office 2010 PIA redistributables. I think the "version 14" PIAs might be installed automatically with Office 2010, but I am not certain.
Keep in mind that using PIA methods/properties which are not supported by the wrapped COM for the particular Office version will throw a COMException at runtime. That is, even if the Office 2003 environment has the 2010 PIAs installed, using 2007+ features might cause other runtime issues.
Happy coding.

Categories