PowerPoint To OneNote
PP2One is a simple application that automates the importing of PowerPoint presentations into Microsoft OneNote. It copies the presentation into a new OneNote page (in a user-designated section), so note-takers can associate their own notes with the presentation. It is released free-of-charge (but donations are welcome), and the author takes no responsibility for it (but will be happy to discuss it or potential improvements to it). |
Background
I have been using OneNote for a while (see my previous blog entries for a summary of some of my experiences). A very frequent note-taking opportunity is during a presentation, and quite often, the presenter will make the PowerPoint file available. (This has certainly been the case during my MBA experience at UCLA's Anderson school.) I wanted the ability to use OneNote to collect and organize my notes.It is possible to cut-and-paste slides from a PowerPoint presentation into OneNote. It automatically converts the slide into a picture, to preserve formatting and pictures. I pasted the slides on the left side of a page, and there was plenty of room on the right to take notes associated with the page.
This worked really nicely, but there were two key problems. First, some presentation consist of many slides. It requires an annoying amount of effort to copy and paste slides one-by-one. (The conversion did not work for multiple slides.) Second, all slide text was lost, which meant that the slide content could not be searched.
With the release of OneNote Service Pack 1 Preview, the OneNote development team included a way of importing content into the program. I wrote PP2One to make it faster to import a PowerPoint presentation, and allow the presentation content to be searched.
I seriously considered making this an add-in for PowerPoint. But, because the most common usage scenario (for me) is to dump in a presentation without looking at it, it did not seem to be justified. I did structure the code in such a way that it should be relatively straightforward to convert it into an add-in.
Installation
PP2One requires several things:- OneNote Service Pack 1
- Microsoft PowerPoint. PP2One was developed and tested with PowerPoint XP, but other versions (97 or greater) will probably work. Your mileage may vary.
- Microsoft .Net run-time. I believe that OneNote installs that by default, but if not, then it is available for free from Microsoft
- PP2One executable package, available here. (Original version: here)
I chose not to make an installer package, because this is just a toy and its requirements are rather small.
Simply extract the zip file into a directory of your choice. To start the program, run PP2One.exe.
Use
Choose the OneNote section file that you want to hold the presentation, by entering a filename in the topmost text entry box. PP2One will set this to default to OneNote section that you most recently edited.Next, choose the PowerPoint file to import. The new OneNote page title will default to the PowerPoint file name, but you can change it if you like.
Check or uncheck the "Add slide text" option. The slide text will be added to the OneNote page, but this may clutter the page.
Press the "Add to OneNote" button. This will do the work, but may take some time (especially for large presentations, and if OneNote needs to be opened).
Limitations
The formatting of the presentation text is not particularly good, as there isn't a great way of converting it into HTML (that I know). I would have preferred to have the text hidden (as the slide images are sufficient), but I couldn't find a good way of hiding it and still being able to search it.The program seems to work on the set of PowerPoint presentations that I have on my computer, but there it hasn't been tested on a huge number of things. Nor has it been tested on anything other than PowerPoint 97.
There seems like OneNote file sizes do not decrease when large pages are added and deleted. During the course of testing this application, my "test" note section grew to be over a gigabyte. Be careful.
Comments about the implementation
Because the OneNote CSimpleImporter API is about a week old (to the OneNote savvy public at least), there aren't a lot of examples out there. I implemented this using the Visual Studio .Net 2003 IDE, with C# as a programming language. I haven't done a huge amount of coding with C#, and found it to be adequate in a Java-like way. (I suppose that my style will improve as time goes on.) I will post the source code in case anyone is interested.In the venerable tradition of Omar of Microsoft, I even created an icon for the program.
The CSimpleImporter API was intentionally terse, in order to make it available in the SP1 Preview. As such, it was a great inclusion in the product, because it allows people like me to write little toys like this. But I hope that this does not signal the direction that an eventual full OneNote API would take. Creating an XML text string and passing it into a short function may be a bit simpler from the API perspective, but it really minimizes some of the great development tools that Microsoft has developed over the years. It makes it difficult to pinpoint the cause of an error, if something breaks within the Import function. (This particular release of the API just throws "unknown" errors when something fails inside the function. It took me about an hour to track down the fact that I had forgotten to close an element in my XML.) And I question if this style of API really ends up requiring less testing and documentation, as the functionality just ends being pushed into XML strings rather than function call arguments. (It probably requires more testing and general knowledge out of the user/developer!)
Changelog
- 1.0 - Initial release
- 1.1 - Added ability to read in text from the slide notes page. Also added some extra error checking.
- 1.2 - Updated for the program for the release version of SP1. Please note that the older executable will not work with SP1 release. (A copy of the older version is available here if you still have the SP1 preview installed.)
- 2.0 - Now works with OneNote 2007, .Net 2.0 framework, and many other improvements. See updates.
Comments
Cool toy. Would love to talk to you about expanding it slightly and about linking to it from my sites....
Posted by: Kathy Jacobs | May 3, 2004 09:44 AM
This is very cool. Great job....what are you doing getting an MBA? You should be getting an MS CS. Thanks for sharing!
Posted by: Davd | May 13, 2004 03:53 PM
Hi,
this sounds interesting, but I get persistent security warnings from the .NET framework. I can't even get a fileselect box to open. the application is claimed to be running in a "partially trusted mode".
Any ideas??
Thanks,
Holger
Posted by: Holger Karl | May 16, 2004 09:26 AM
Any .NET code that runs from a network share instead of a physical drive on the machine will run in a partially trusted mode. You can either give it more permissions using the .NET configuration or .NET wizard or you an simply copy it to your physical drive and run it there.
Posted by: Paul | May 26, 2004 09:58 AM
Paul's hint actually fixed that for me, thanks!
However, I get some interesting behavior: For some presentation designs, it works flawlessly. For others, the figures are inserted correctly, but as text, only the master slide's "Click to edit text" blabla is inserted. (I am sure the slides make correct use of the master; they do not have the text in any wierd fashion...)
Thanks again,
Holger
Posted by: Holger Karl | May 26, 2004 11:37 AM
Brilliant... worked like a dream.. had to turn off the text options to import larger files..
Posted by: Tim Willoughby | July 14, 2004 03:04 PM
Hi, this sounds like a great tool! Unfortunately I wasn't able to run it. I got an "application error" when I tried to run the installation file. "applicatoin failed to run properly (0xc0000135). Can some one please help me? This tool would make a huge difference for me!
Posted by: Gary | July 28, 2004 09:19 AM
Love this little toy and used it with SP1 Preview. Notice that I get an error now with the final release of OneNote SP1.
Here's the error text. Thought you'd like to know.
Thanks,
WC
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
System.Runtime.InteropServices.COMException (0x80041001): Exception from HRESULT: 0x80041001.
at OneNote.CSimpleImporterClass.Import(String bstrXml)
at PP2One.CPP2One.convertPPintoOne(Presentation oPP)
at PP2One.frmPP2One.btGo_Click(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Loaded Assemblies **************
mscorlib
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/microsoft.net/framework/v1.1.4322/mscorlib.dll
----------------------------------------
PP2One
Assembly Version: 1.0.0.0
Win32 Version: 1.0.0.0
CodeBase: file:///C:/Program%20Files/PP2One/PP2One.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/assembly/gac/system.windows.forms/1.0.5000.0__b77a5c561934e089/system.windows.forms.dll
----------------------------------------
System
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/assembly/gac/system/1.0.5000.0__b77a5c561934e089/system.dll
----------------------------------------
System.Drawing
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/assembly/gac/system.drawing/1.0.5000.0__b03f5f7f11d50a3a/system.drawing.dll
----------------------------------------
Accessibility
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/assembly/gac/accessibility/1.0.5000.0__b03f5f7f11d50a3a/accessibility.dll
----------------------------------------
Interop.PowerPoint
Assembly Version: 2.7.0.0
Win32 Version: 2.7.0.0
CodeBase: file:///C:/Program%20Files/PP2One/Interop.PowerPoint.DLL
----------------------------------------
Interop.Microsoft.Office.Core
Assembly Version: 2.2.0.0
Win32 Version: 2.2.0.0
CodeBase: file:///C:/Program%20Files/PP2One/Interop.Microsoft.Office.Core.DLL
----------------------------------------
System.Xml
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/assembly/gac/system.xml/1.0.5000.0__b77a5c561934e089/system.xml.dll
----------------------------------------
Interop.OneNote
Assembly Version: 1.0.0.0
Win32 Version: 1.0.0.0
CodeBase: file:///C:/Program%20Files/PP2One/Interop.OneNote.DLL
----------------------------------------
CustomMarshalers
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/assembly/gac/custommarshalers/1.0.5000.0__b03f5f7f11d50a3a/custommarshalers.dll
----------------------------------------
************** JIT Debugging **************
To enable just in time (JIT) debugging, the config file for this
application or machine (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.
For example:
When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the machine
rather than being handled by this dialog.
Posted by: Warner Crocker | July 28, 2004 04:36 PM
Thanks for making this great program! It really helps with professors who give us slideshows ahead of class, in terms of keeping notes organized.
I wonder -- in a future revsion, would you consider giving users the option of adjusting how large to make the PPT images appear in OneNote, or how wide the text will be? On my laptop (12" screen, 1024x768 resolution) the converted PPT slides plus text extend past the edge of the OneNote screen, even with all the sidebars collapsed.
Just an idea... I'm sure that you've got plenty of other things to be working on. ;o)
Thanks again for your help with this tool!
Posted by: Tony | August 30, 2004 09:07 PM
Great tool! Thanks much! This will help me out in my college classes.
Posted by: Tim | September 23, 2004 01:58 PM
I am a PowerPoint addict and currently starting to use OneNote. So I was very happy when Kathy pointed me to your tool. But alas, I use a German version of Office 2003 - and get an error message stating something like "Error - could not call remote procedure." ("Error: Der Remoteprozeduraufruf ist fehlgeschlagen" in German). I guess, there is some language specific part in your code. Is there a possibility to make it work in a Non-English version, too. Thanks in advance.
Posted by: Ute Simon | September 24, 2004 11:20 AM
Great tool!
Found a small bug, though: the converter for text doesn't seem to support international character set, i.e. German characters like "" do not appear.
Posted by: Russell Green | October 8, 2004 05:41 AM
Jeff,
I have read the commentary regarding your PP2One add in and I am anxious to use it. However, I get the error message below when I try to run. I am running WIN XP Pro, One Note SP1, and Office 2003. Any suggestions?
Thanks,
Chad
Error:
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
System.IO.FileNotFoundException: File or assembly name Interop.PowerPoint, or one of its dependencies, was not found.
File name: "Interop.PowerPoint"
at PP2One.frmPP2One.btGo_Click(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
=== Pre-bind state information ===
LOG: DisplayName = Interop.PowerPoint, Version=2.7.0.0, Culture=neutral, PublicKeyToken=null
(Fully-specified)
LOG: Appbase = C:\Documents and Settings\Chad\Desktop\
LOG: Initial PrivatePath = NULL
Calling assembly : PP2One, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Post-policy reference: Interop.PowerPoint, Version=2.7.0.0, Culture=neutral, PublicKeyToken=null
LOG: Attempting download of new URL file:///C:/Documents and Settings/Chad/Desktop/Interop.PowerPoint.DLL.
LOG: Attempting download of new URL file:///C:/Documents and Settings/Chad/Desktop/Interop.PowerPoint/Interop.PowerPoint.DLL.
LOG: Attempting download of new URL file:///C:/Documents and Settings/Chad/Desktop/Interop.PowerPoint.EXE.
LOG: Attempting download of new URL file:///C:/Documents and Settings/Chad/Desktop/Interop.PowerPoint/Interop.PowerPoint.EXE.
************** Loaded Assemblies **************
mscorlib
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///c:/windows/microsoft.net/framework/v1.1.4322/mscorlib.dll
----------------------------------------
PP2One
Assembly Version: 1.2.0.0
Win32 Version: 1.2.0.0
CodeBase: file:///C:/Documents%20and%20Settings/Chad/Desktop/PP2One.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///c:/windows/assembly/gac/system.windows.forms/1.0.5000.0__b77a5c561934e089/system.windows.forms.dll
----------------------------------------
System
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///c:/windows/assembly/gac/system/1.0.5000.0__b77a5c561934e089/system.dll
----------------------------------------
System.Drawing
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///c:/windows/assembly/gac/system.drawing/1.0.5000.0__b03f5f7f11d50a3a/system.drawing.dll
----------------------------------------
************** JIT Debugging **************
To enable just in time (JIT) debugging, the config file for this
application or machine (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.
For example:
When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the machine
rather than being handled by this dialog.
Posted by: Chad | October 24, 2004 05:29 PM
I really want to use this tool, but I get this error. It says Convertion error
Error: Object reference not set to an instance of an object
Do you have any idea what this means? I am not the most tech savvy girl. Thanks!
Posted by: Maid | March 12, 2005 11:25 PM
Jeff,
Can you help? I have done everything required for PP to one note but I get an error message: Interop Power Point. Can you tell me what I can do to fix this? I really need this capability. Thank you
Posted by: Greg Wyatt | November 17, 2005 08:42 AM
Jeff,
Are you planning to update your great tool to work with Office 2007? (I'll admit upfront that I haven't tried it yet, but thought I would ask first....)
Posted by: Kathy Jacobs | May 26, 2006 05:41 PM
Jeff,
I'm in dental school and the program rocks. I have one hopefully simple request. Can the size of the slides being imported be adjusted? It would be nice if it was scaled ~130%. A lot of my slides are graphs with fine details. So I find myself re-scaling just about every slide. Your program should be bought by Microsoft. I'm sure you already have a marketing plan in the works. Thanks again, Jason
Posted by: Jason | November 29, 2006 07:48 PM
I have windows vista, and not getting a go with the program. Any moves to make it compatible? Or am I doing something wrong?
Thanks
Posted by: Tarra | March 28, 2007 11:45 AM
Tarra - While I haven't used it (or tested!) it on Vista myself, I know of others who have. Any error messages?
Posted by: Jeff | March 28, 2007 09:38 PM
I'm interested in knowing how you imported/parsed the powerpoint file.
Posted by: Paul | September 19, 2007 04:04 PM
Paul - Nothing terribly fancy. I used the PowerPoint COM object model. There is a function to export a picture of the slide (as WMF), and there are functions to grab the slide text.
Posted by: Jeff | September 19, 2007 09:44 PM
Hi Jeff, I have been using your PP2One and I absolutely love it!! However, recently, I upgraded my Onenote to 2007 version. It still works, but I need to adjust the size of each slide. Can you please please help all of us by creating PP2One2007??
I'm willing to pay for it if I have to!
Thank you, always.
N
Posted by: NU | September 26, 2007 01:05 PM
Quick fix for a major problem. This application will enable me to incorporate "all" of my materials into one single searcheable file. Thank you so much!
Posted by: Jill | November 3, 2007 07:21 PM
It's a great tool . but,I got a error message when I open pp2one . What can I do ?
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
System.NullReferenceException: Object reference not set to an instance of an object.
at PP2One.frmPP2One.findOneNoteDir()
at PP2One.frmPP2One.frmPP2One_Load(Object sender, EventArgs e)
at System.Windows.Forms.Form.OnLoad(EventArgs e)
at System.Windows.Forms.Form.OnCreateControl()
at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
at System.Windows.Forms.Control.CreateControl()
at System.Windows.Forms.Control.WmShowWindow(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at System.Windows.Forms.ContainerControl.WndProc(Message& m)
at System.Windows.Forms.Form.WmShowWindow(Message& m)
at System.Windows.Forms.Form.WndProc(Message& m)
at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Loaded Assemblies **************
mscorlib
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/microsoft.net/framework/v1.1.4322/mscorlib.dll
----------------------------------------
PP2One
Assembly Version: 1.2.0.0
Win32 Version: 1.2.0.0
CodeBase: file:///C:/Documents%20and%20Settings/Monmo/桌面/PP2One/PP2One/PP2One.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/assembly/gac/system.windows.forms/1.0.5000.0__b77a5c561934e089/system.windows.forms.dll
----------------------------------------
System
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/assembly/gac/system/1.0.5000.0__b77a5c561934e089/system.dll
----------------------------------------
System.Drawing
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/assembly/gac/system.drawing/1.0.5000.0__b03f5f7f11d50a3a/system.drawing.dll
----------------------------------------
************** JIT Debugging **************
To enable just in time (JIT) debugging, the config file for this
application or machine (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.
For example:
When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the machine
rather than being handled by this dialog.
This is my environment:
OS:Windows XP
Onenote:Onenote 2007
And I ignore the err or and click " continue " on dialog box .
next,input the fields in pp2one. but I got another err msg :
Error:Exception from HRESULT:0x80041005
Hope for your reply . :)
Posted by: Monmo | November 19, 2007 07:17 PM
I'm trying to get it to work and get the same errors that many people are getting above. All the debug errors come up when I try to open the program. Anyone figure out a fix?
Posted by: Austin | January 10, 2008 01:17 PM
Hey Jeff,
Just wanted to let you know that I love this little program! I am taking anatomy and physiology and this little program will save my butt!
Just so you know, i got the weird .net error with the updated client, so i used the original instead. Worked like a charm, despite me having SPed1 my Onenote!
Posted by: Brad | May 28, 2008 07:29 PM
I'm getting an error like above. It was working one day in class. I had converted one PP file, but when I tried to convert another, I got this: "Error:Exception from HRESULT:0x80041005". It has since then not worked at all with that same error. Not sure what happened in the 2 minutes I was using PP2One. If someone knows how to fix it, I would appreciate it. I've been printing PP to OneNote but I like the way PP2One is formatted. Thanks.
Using Vista SP1 and OneNote 2007
Posted by: Kim | June 16, 2008 10:04 PM
Kim -
Have you tried the updated version for ON2007?
http://www.borlik.net/blog/archives/000179.html
Posted by: Jeff | June 17, 2008 07:32 AM
Yes, I have been using that version. I fiddled around with it last night. Before I got the error, I had kept slide text off but note text on, until I got a PP with a lot of notes. So I unchecked add notes since I didn't need all that stuff and thats when I got the error. If I unclick both slide text and note text, it will not work. If I choose only slide text, it will not work. If I chose only note text it will work. So to make it convert, I need to always select add note text.
This happened awhile ago so I forgot I unchecked add notes but I'm happy I got it working again! BTW thanks for making this converter.. it's an awesome tool. I wish I found it earlier. It would have made my decision about buying a Tablet PC much easier :)
Posted by: Kim | June 17, 2008 11:33 AM
Hey there,
First of all, let me say that I love your tool! I have been using it for several weeks now. However, it suddenly stopped working.
I now get an error message that says:
"Unhandled exception has occurred in your application..."
"Value cannot be null.
Parameter name: item."
Any ideas?
Thanks again for the tool. I hope it starts working again... I've come to rely on it quite heavily.
-BJ
Posted by: BJ | August 31, 2008 08:38 PM