Cargar archivos de Office 2007 en un Formulario de Windows en C#
Algunas veces, tenemos la necesidad de mostrar cierta información contenida en algunos documentos de Office y lo que por lo regular hacemos en crear un objeto de aplicación Windows y que nos abra el office, cierto?. Pero como lo dice el nombre de este post, hoy vamos a ver como mostrar dichos documentos dentro del mismo formulario, sin abrir el ambiente de office 2007.
- Primero creamos un aplicación de Windows con C# a la que llamaremos OfficeWindows.
- Agregamos un control WebBowser y colocamos su propiedad Dock en Fill.
- Agregamos un control OpenFileDialog y un MenuStrip en donde colocamos la instucción de Abrir Archivo de Office para explorar el archivo que vamos a abrir.
El formulario debe quedar como se muestra en la siguiente figura:
Ahora vamos a agregar un poco de código para que esto función, el código es el siguiente:
namespace OfficeWindows { public partial class Form1 : Form { public Object oDoc; public string FileName; public Form1() { InitializeComponent(); this.webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted); } private void Form1_Load(object sender, EventArgs e) { openFileDialog1.Filter = "Documentos de Office (*.docx, *.xlsx, *.pptx)|*.docx;*.xlsx;*.pptx" ; openFileDialog1.FilterIndex = 1; } private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { oDoc = e.GetType().InvokeMember("Document", BindingFlags.GetProperty, null, e, null); Object oApplication = e.GetType().InvokeMember("Application", BindingFlags.GetProperty, null, oDoc, null); } private void abrirDocumentoDeOfficeToolStripMenuItem_Click(object sender, EventArgs e) { openFileDialog1.FileName = ""; openFileDialog1.ShowDialog(); FileName = openFileDialog1.FileName; if (FileName.Length != 0) { Object refmissing = System.Reflection.Missing.Value; oDoc = null; webBrowser1.Navigate(FileName); } } } }
Este es el código que va dentro del formulario, tomando en cuenta que dejaron los nombres por default a los controles. Y el resultado es el siguiente:
Ahora solo si quieren manipular los eventos que se hagan dentro del office, tendrán que crear un objeto de Word, Excel, etc. para manejarlos, espero que les sea de utilidad y nos escribimos en otro post.







He intenatdo con varias opciones pero al abrir el docuemnto de exel siempro me lo abre en el ambiente de office, no dentro del webBrowser, Porfa me podria colaborar en que estoy fallando?
Que tal jcb,
lo que tienes que hacer es modificar una parte del registro de Windows, para poder abrirlo desde un Web Bowser, tienes hacer algo cómo esto
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Word.Document.8]
“BrowserFlags”=dword:80000024
cambias el valor q tiene por el de arriba, algo mejor seria crear un modulo que te cambie automaticamente los registros segun en donde lo quieras abrir, en el ambiente de office o en un web browser, para poder abrirlo desde el formulario.
Espero te ayude amigo.
Saludos!!!
en dónde cambio eso???
se me olvidaba,
dices que trabajas excel, aqui estan los valores para la version 2003 y 2007
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.Sheet.8]
“BrowserFlags”=dword:80000A00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.Sheet.12]
“BrowserFlags”=dword:80000A00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.SheetMacroEnabled.12]
“BrowserFlags”=dword:80000A00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.SheetBinaryMacroEnabled.12]
“BrowserFlags”=dword:80000A00
hola amigo, disculpa explicaste esto para excel pero como se debe modificar el registro para word y powerpoint? gracias.
Que tal Jesus,
cierto, perdon por el detalle. Aquí coloco todos los cambios para Word, Excel y PowerPoint
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Word.Document.8]
“BrowserFlags”=dword:80000024
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Word.RTF.8]
“BrowserFlags”=dword:80000024
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Word.Document.12]
“BrowserFlags”=dword:80000024
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Word.DocumentMacroEnabled.12]
“BrowserFlags”=dword:80000024
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.Sheet.8]
“BrowserFlags”=dword:80000A00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.Sheet.12]
“BrowserFlags”=dword:80000A00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.SheetMacroEnabled.12]
“BrowserFlags”=dword:80000A00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.SheetBinaryMacroEnabled.12]
“BrowserFlags”=dword:80000A00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PowerPoint.Show.8]
“BrowserFlags”=dword:800000A0
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PowerPoint.Show.12]
“BrowserFlags”=dword:800000A0
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PowerPoint.ShowMacroEnabled.12]
“BrowserFlags”=dword:800000A0
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PowerPoint.SlideShow.8]
“BrowserFlags”=dword:800000A0
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PowerPoint.SlideShow.12]
“BrowserFlags”=dword:800000A0
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PowerPoint.SlideShowMacroEnabled.12]
“BrowserFlags”=dword:800000A0
Saludos.
buenas amigos una pregunta y como se pueden cambiar los registros de office desde c# si alguien me puede ayudar con un ejemplo o la forma de hacerlo saludos
Que tal Antonio,
Aquí un ejemplo que acabo de escribir sobre como modificar los registros de Office desde código C#
http://mspnor.wordpress.com/2009/01/13/modificar-los-registros-de-office-con-c/
Espero que te sea de ayuda.
Saludos.
Chido ese nor, muy buen material, aunq no le entiendo mucho al c# me late mas el VB
pero esta chido
Se podría cargar un archivo office en un webform? El archivo se encuentra en la maquina del cliente. Alguien tiene idea de como hacer esto? Muchas gracias.
Que tal Jorge Diego Crespo,
como se observa en el ejemplo se utiliza un control WebBrowser que es un cotrol para Windows Form, para poder explorar en internet dentro de un form, lo que comentas sobre un Webform no es posible ya que este control no se aplica a un Webform, sin embargo si en la maquina cliente modificas los registros, es posible abrir un documento de Office (Word, Excel y PP) dentro de el internet explorer. De esta manera será posible abrir un archivo tal vez en un ContentPlaceHolder.
Saludos.
Hola norber,
he probado el codigo que has dejado para modificar los registros usando c#, pero mi aplicacion me sigue abriendo una ventana externa para mostrar el .docx.
que tal Holland
que te parece si haces una prueba, y comienzas a editar los registros directamente desde el regedit, yo así indage para poder abrir el documento de office en un formulario de windows, creo que las opciones existentes es abrir en la instancia de office, abrir en web y abrir en patanlla completa, la verdad no recuerdo los numeros para esto, pero recomiendo que pruebes con varios. lo peor q puede pasar es que no abra los documentos, pero recuerda que numero es el unicial lo vuelves a poner y listo.
Ya lo he conseguido y funciona correctamente. Ahora intentare hacerlo correr en un WebForm, a ver si saco algo…
Muchas gracias.
ESPERO Y ME AYUDES ESQUE NO LOGRO CONSEGUIR QUE OFFICE LO MUESTRE DENTRO DEL FORMULARIO
Tras tocar el registro y conseguir abrir un documento office en un WebForm, ahora se me plantea otra pregunta…se podria abrir una aplicación office, el Word por ejemplo, en un aspx? Me explico, no quiero abrir un archivo .doc, sino abrir la aplicación sin ningún documento cargado. Lo que he conseguido es abrir la aplicación office en la maquina del cliente, pero no dentro del navegador. Alguien tiene alguna idea de como hacerlo?
Muchas gracias.
Que tal Holland,
al parecer esto aun no es posible, solo se puede abrir el documento de Office desde la maquina cliente. Una de las nuevsa novedades que se deja ver en la nueva versión de Office es precisamente lo que tu planteas, ahora vamos a poder abrir, modificar y compartir documentos de Office desde cualquier navergador, algo excelente. Esto lo anunciaron los en del PDC del año pasado, aqui un post donde comente al respecto.
http://mspnor.wordpress.com/2008/10/28/office-14-office-web-applications/
Saludos.
Norber, muchas gracias por ponerme al día en este aspecto;)
Hay alguna forma de visualizar el objeto Microsoft.Office.Interop.Word._Application dentro de un panel y no en el WebBrowser como propones en el post
Que ta Ingeniero,
Hasta el momento y que yo sepa, esta es la unica menara.
Saludos!!!
Hola men! esta super tu articulo, pero sabes ami no me abre el documento dentro del WebBrowser :S quiero abrir el de Office 2007,y bueno cambie esos 2 registros que son para Word y nada, lo sigue abriendo aparte :S, que crees que sea?? no me sale ningun error en tiempo de compilacion ni ejecucion.. :S!! espero puedas darme una manito, gracias!!
Salu2,
Hola, sorry ya me salio, y bueno no solo tenia que modificar los registros que mostrastes, bueno almenos conmigo no funciono asi, tuve que modificar eleran los Word.Document.12, Word.Document.8, y el Word.DocumentMacroEnabled.12, nuevamente gracias por el articulo!! genial!!, solo un detalle como se puede acoplar el 2do articulo que publicastes sobre “Modificar los Registros de Office con C#” pero aplicandolo dentro de este articulo, nuevamente gracias!!
salu2,
que tal Ricardo,
perdon pero por vacaciones apenas voy revisando los comentarios, me da gusto leer que te sirvio, ahora lo de los registros de pende de las necesidades de la aplicación, ya que puede ser desde un simeple método dento de tu formulario de tipo privado, auque recomendaria que fuera con una clase, ya sabes para tener todo en orden y con estetica. Aunque te digo que depende de muchas cosas.
Si te puedo ayudar en algo no dudes en comentar.
Saludos!!
una pregunta urgente, man lo tuyo me sirvio perfectamente y gracias ahora loq ue necesito es como saber cuando clickee en el boton guardar del word q abri en el webbrowser para poder depurar gracias
Necesito hacer lo mismo pero abriendo word en visual basic 2005
pueden ayudarme con esto porfa gracias
Que tal Jota,
Para poder hacer esto desde Visual Studio 2005 necesitas instalar una extension para el mismo que se llama Visuarl Studio tools for Office en su version 3.0, puedes goolgearlo así y seguro lo encontraras, este extensión solo cuenta con plantillas para documentos de Word y Excel, los demas son complementos como crear tu propia cinta de opciones para el office.
Te recomiendo usar Visual Studio 2008 en cualquiera de sus versiones ya que cuando lo instalas por default te coloca todas estas platnillas para la creación de proyectos para Office.
Puedes echarle un vistazo a: http://msdn.microsoft.com/en-us/office/default.aspx
Saludos!!
Amigo he intentado cambiando las claves de registro a dword y colocando el valor como exadecimal pero nada pasa continuan abriendose en otra ventana…
Alguna sugerencia.
saludos.
tu codigo me da el siguiente error
uso visual studio 2008
El nombre ‘BindingFlags’ no existe en el contexto actual
dime xq
Beto,
seguramente es porque el BindingFlags lo estas escribiendo sin las comillas, y te marca el error porque VS piensa que es una variable la cual no se define aun, otro posible error es que no tengas instalado el Office, pero estoy casi seguro que solucionas el primero colocandolo entre comillas.
Saludos
hola k tal saludos OK
me funciono todo correctamente, pero tengo un problema,tengo un formulario padre y dentro tengo a word y excel como formularios hijos, todo estas bien hasta ahi, cuando ejecuto el programa sale bien todo, pero a la hora de darle clic a la barra de herramentas de word desaparece y la barra de herremientas de excel no estan, quisiera saber si puedo poner la barra de herramientas de word y excel en el formulario padre. todo lo desarrolo en office 2007 y visual basic.net 2008. agradeceria mucho si me responde. Me urge. gracias
Que tal Mason,
esto no es posible, el problema que ocurre es el modo en que windows interpreta el como abrir los archivos de word y excel, esto tiene que ver con los registros que modificaste, lo que yo hice, es ir cambiando los registros aleatoriamente, a ver en cual funcionaba bien, esa es la unica forma que se me ocurre que funcione, pero no es recomendable. Lo que dices si en el formulario padre es posible poner el menu, esto no es posible, porque no puedes manipular el ribbon de office separa u homologarlo para diferentes tipos de archivos, para que funcione por separado. Si lo puedes manupular y crear tu propio menu, pero solo dentro de cada documento. Para esto necesitas algo que se llama Visual Studio Tools for Office que va en su version 3.0 me parece
Muchas Gracias. Me ayudo esto Ok.
Otra duda norber me podrias decir donde puedo descargar algun tutorial o que puedas prestar alguno.
Para humologar ribbon office como le haria???
bueno que cada vez que le en el formulario de texto la barra de word aparezca cuando le de en el formulario de excel aparezca la barra de excel
muchas gracias por la informacion, si quieres el codigo a donde te lo mando o lo pongo aqui.
Que tal Mason,
mmm, la verdad es que yo batalle con lo mismo, casi no hay info para trabajar con Office, menos con el ribbon, pero la poca que existe la encuentras en http://msdn.microsoft.com/en-us/vsto/default.aspx y en los foros de MSDN.
Sobre lo que comentas, es necesario trabajar con una aplicación, por ejemplo con Word, y en el ribbon colocas botones de Excel, Power, etc, que estos los manejas como los objetos que se agregan normalmente en el Office, ya que para hacer lo mencionas creo que seria complicado, ya que cada libreria de Office es diferente y pasa lo mismo con el ribbon.
Aunque me agradaria ayudarte, puedes mandar el código o tu aplicación a mi correo: norberto@student-partners.com y vemos que podemos hacer.
Saludos.
Justamente lo que buscaba pero aplica a VB.NET, me fue de gran ayuda, al principio me abria los archivos de word en otra ventana pero modificando los registros como lo dijo NORBER todo funciona correctamente, les agradezco mucho su ayuda, sigan asi.
Hola, útil es el artículo. Tengo dos curiosidades:
¿Cómo crear un nuevo documento de Word y visualizarlo en un formualrio?
Si en el nuevo documento agrego marcadores, como pasarlos a un DataGridView haciendo referencia a la colección Bookmarks?
que onda Roberto
1.- Para crear un documento Necesitas la libreria Microsoft.Office.Interop.Word (version 12 de preferencia, para office 2007), luego basta con importarla a la aplicación y escrbir algo asi:
dim word = new Microsoft.Office.Interop.Word.Application
dim documento = new word.document()
‘Aqui comienzas a manipular el documento tiene muchas propiedas, como los marcadores que comentas, para importarlo se me ocurre hacer un arreglo o crear un datatable para poder importarlo al grid,
por la tarde coloco este ejemplo que resulta interesante, pore el momento puedes comenzar con lo que te digo, espero que te ayude…
Saludos..
Hola, gracias por su respuesta.
Lo de crear un documento de Word lo sé. Lo que no logro es visualizar el nuevo documento de Word dentro del formulario.
Saludos
Hola norber, esta muy bueno el post, pero no lo puedo compilar, me sale el mismo error que beto: El nombre ‘BindingFlags’ no existe en el contexto actual
Le respondiste que va entre comillas, lo he intentado, pero no lo soluciona, como podria solucionar esto?, estoy usando visual studio 2008
aquí esta la respuesta
using System.Windows.Forms;
using System.Reflection;
using System.IO;
hola alguien me puede ayudar estoy ocupendo VSTO pero quiero abrir ese documento en teimpo de ejecucion desde un proyecto
Hola porfa podrias colgar el ejemplo?
Hola .. tengo una peque preg… ¿Por que hay que modificar el registro de win?
por que el registro es quien indica a office la manera en que debe abrirse, si es con Microsoft Office o con Internet Explorer, esto lo indica segun el valor en el registro.
compañero le faltaron los using
using System.Reflection;
using System.IO;
Pregunta, desde el Formulario, Abrir Documentos de Office como puedo hacer para cuando yo le de click en este me abra directamente un rachivo que este en una ruta del Disco Duro, obviamente conservando el codigo anterior, pero cual seria la linea que me lleve a un archivo especifico sin tener que buscar la ruta manualmente.
gracias por la ayuda
dejo mi correo por si alguien me desea colabora con esto
la_pollapunk@hotmail.com
que tal Sebeas,
en el evento click el menu item, creo que el webBrowser1 tiene un método de Source o algo asi en donde pones la ruta, por ejemplo @”misdocumentos\miarchivo.docx”. con esto debe de funcionar.
Saludos.
hola,por favor si me puedes enviar lo que te he pedido
…te lo agradezceria…gracias
Hola… que tal… solo quiero aportar un poco espero y les sirva!!
a mi me funciono bien… solo que hay que tener la vercion de office 2003 con la 2007 no funciona…
oDoc = e.GetType().InvokeMember(“Document”,System.Reflection.BindingFlags.GetProperty, null, e, null);
Object oApplication = e.GetType().InvokeMember(“Application”, System.Reflection.BindingFlags.GetProperty, null, oDoc, null);
saludos…
hola …una consulta,cual es el codigo para poder abrir word desde un formulario con su menu en Visual .Net.
Tambien si se podria hacer lo mismo con los demas componentes de Office 2007.
Espero que me ayudes…lo necesito lo mas prontisimo posible.
De antemano….gracias
Hola…..por favor si me pueden ayudar en lo que estoy pidiendo.
si me lo pueden enviar a mi correo seria de gran utilidad…pero envianme el codigo completo para analizarlo(recuerden que es de affice 2007).
O si es que pueden graben el procedimiento con camtasia y me lo envian,ya de ahi lo analizo…gracias por todo.
e-mail: boyfelix2000@hotmail.com
Hola, necesitaba que me orientes un poco, ya que copie el código que figura, compila, pero no me muestra el documento en el WebBowser, lo abre pero afuera de el.
Agradezco tu ayuda.
Melisa
hola melisa,
esto pasa porque debes modificar los registros de office para poder abrirlos en el webbrowser, revisa los primeros comentarios y ahi vienen los datos de los registros a modificar.
Saludos.
Hola a todos. Muchas gracias por este dato, me es de mucha utilidad. Solo quisiera saber como es bien que se debe modificar el registro. Porque al llegar a la parte en donde tengo que modificar en BrowserFlags tengo dos cosas para modificar. Uno es si le doy doble click o boton derecho y ‘Modificar’, aca me aparece solo una ‘a’ o lo otro es si le doy boton derecho y ‘cambiar datos binarios’, aca me aparece una ventana con ’0000 0A 00 00 00′. Agradecería mucho que me expliquen esta parte.
Hola, nuevamente. Quiero decir que la duda que tenia con el registro ya la solucione. se debe agregar ese dato en ‘Modificar’. Pero ahora tengo otras dudas y quisiera que me den una manito. Primero, siempre cuandro abro un documento me dice si lo quiero abrir o guardar. Se puede hacer algo para que ese mensaje no aparezca y que abra el archivo de una?. Y otra cosa un poco mas compleja es como hago para controlar el scroll que aparece a la derecha del webBrowser desde el codigo. Yo lo quiero para reproducir pps. Desde ya muchas gracias.-
Hola, tengo Visual Studio 2005 y W7 con IE 8, he modificado las claves del registro y no me funciona el codigo, me abre en un excel aparte, una vez logré hacer que me abriera en el mismo webbrowser, pero no mostraba la paleta de herramientas del office. Quisiera me dijeran 2 cosas.
1. Como lograr que el doc abra dentro del WebBrowser.
2. Como hacer que el doc se muestro del del WevBrowser y con todos su menú
Saludos
AHG
Hola, tengo Visual Studio 2005 y W7 con IE 8, he modificado las claves del registro y no me funciona el codigo, me abre en un excel aparte, una vez logré hacer que me abriera en el mismo webbrowser, pero no mostraba la paleta de herramientas del office. Quisiera me dijeran 2 cosas.
1. Como lograr que el doc abra dentro del WebBrowser
2. Como hacer que el doc se muestro del del WebBrowser y con todos su menú
Utilizo VS2005 W7 y IE8
Saludos
AHG
Ah, se me olvidaba, utilizo Microsoft Office 2010 Beta
hola.tengo un problema,como puedo abrir un archivo de excel en una aplicacion wpf de vb 2008
Hola, necesito abrir dentro de mi aplicación desarrollada en VB.NET 2005, documentos de tipo: docx, xlsx, pdf, tif, gif, entre otros.
Si mal no recuerdo en versiones anteriores de VB se utiilzaba un control de objetos OLE, para no tengo conocimiento de cómo hacerlo en VB.NET 2005.
Muchas gracias.
mm espero y me puedas ayudar me marca error en el codigo que pusistes y la verdad no encuentro el erro me dice que no puede encontrar el WebBrowserDocument y me manda un mensaje que no se puede conectar a internet abre el archivo de office pero lo manda fuera del formulario
hola a todos me podrian ayudar hice el ejemplo de arriba pero cuando corro mi aplicacion me marca una advetrencia “your current security settings do not allow this file to be downloaded” en Español “la configuración de seguridad actual no permite descargado este archivo” y no me muestra nada, me podrian ayudar a resolver este problema.
Hola disculpa no se si me puedas ayudar ha hacer lo mismo pero con visual basic net 2005. De antemano agradesco tu ayuda
no me muestra el word 2007 en el formulario me aparece fuera del formulario ya modifique los registros del word que otra cosa puedo haceer para que me aparesca
Hola amigo,
tengo una pregunta
Estoy cargando archivos .pptx (Power Point) y quiero que cada vez que aprieto “enter” pase a la siguiente diapositiva. He intentado en los eventos “keypress” del formulario pero no ha sido exitosa la prueba.
¿tienes alguna idea de cómo hacerlo?
Gracias
OScar
oye como haria para mostrar un documento de word guardado en base de datos en el WebBowser
hola amigo te cuento que estado tratando de ejecutar el codigo que publicas pero me salta una excepcion
“Method ‘System.Windows.Forms.WebBrowserDocumentCompletedEventArgs.Document’ not found.”
en esta linea:
oDoc = e.GetType().InvokeMember(“Document”, BindingFlags.GetProperty, null, e, null);
y luego no me muestra los ribbon solo abre la hoja de excel , alguien sabe por que puede ser gracias de antemano.
como hago para cargar en este caso un pdf??
por desgracia nunca lo he intentado diego,
pero te dejo este link http://social.msdn.microsoft.com/Forums/es/vcses/thread/5e82bf75-822d-4e49-af8b-d2109aab2db9 y esta apuntado como el proximo post.
Saludos.
El programa funciona bien, lo abre y todo. El problema esta en que los cambios si se pueden guardar, todas las modificaciones. Como corrijo el error?