« Elizabeth Swim Competition | Main | Reagan Farewell »

PowerPoint To OneNote

PP2OnePP2One 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.

Main PP2One window

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.

Ads

TrackBack

TrackBack URL for this entry:
http://www.borlik.net/cgi-bin/blog/mt-tb.cgi/97

Listed below are links to weblogs that reference PowerPoint To OneNote:

» re: OneNote PowerToys from Chris_Pratley's WebLog
TITLE: re: OneNote PowerToys URL: http://weblogs.asp.net/chris_pratley/archive/2004/05/02/124894.aspx IP: 66.129.67.203 BLOG NAME: Chris_Pratley's WebLog DATE: 05/02/2004 09:42:48 PM [Read More]

» re: Importing Content into OneNote 2003 SP1 Preview from Andrew May's WebLog
TITLE: re: Importing Content into OneNote 2003 SP1 Preview URL: http://blogs.msdn.com/andrew_may/archive/2004/05/02/124896.aspx IP: 66.129.67.203 BLOG NAME: Andrew May's WebLog DATE: 05/02/2004 09:45:28 PM [Read More]

» PP2One: PowerPoint to OneNote powertoy from tfosorciM.org
One of the issues which interests me as part of the vision I have of OneNote as a repository for all, or almost all, of my research information is the issue of importing data from various sources. Kathy Jacobs, one... [Read More]

» My Favorite OneNote Tricks... from Adventures In Evangelism
I thought I would share some of my favorite OneNote tricks for you OneNote lovers out there –  ... [Read More]

Comments

Cool toy. Would love to talk to you about expanding it slightly and about linking to it from my sites....

This is very cool. Great job....what are you doing getting an MBA? You should be getting an MS CS. Thanks for sharing!

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

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.

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

Brilliant... worked like a dream.. had to turn off the text options to import larger files..

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!

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.

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!

Great tool! Thanks much! This will help me out in my college classes.

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.

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.

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.

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!

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

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....)

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

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

Tarra - While I haven't used it (or tested!) it on Vista myself, I know of others who have. Any error messages?

I'm interested in knowing how you imported/parsed the powerpoint file.

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.

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

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!

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 . :)

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?

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!

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

Kim -

Have you tried the updated version for ON2007?

http://www.borlik.net/blog/archives/000179.html


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 :)

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

Post a comment

(If you haven't left a comment here before, you may need to be approved by the site owner before your comment will appear. Until then, it won't appear on the entry. Thanks for waiting.)