Как встроить Word в WinForms или веб-страницу

понедельник, 13 апреля 2009 г.,

Word, Excel, Visio, PowerPoint можно встроить в Windows Forms Application или веб-страницу с помощью DSOFramer (это ActiveX), который входит в состав Microsoft Developer Support Office Framer Control 1.3 Sample (KB 311765).

После установки примеров (C:\DsoFramer) надо: 1) в Visual Studio создать новый проект (Windows Forms Application); 2) В References добавить ссылку на C:\DsoFramer\dsoframer.ocx (в результате будет создан файл Interop.DSOFramer.dll; в References появится DSOFramer); 3) Добавить в проект класс:
public class Fcc : AxHost
{
    public Fcc()
        : base("00460182-9E5E-11d5-B7C8-B8269041DD57")
    {
    }
}
4) Код конструктора Form1 заменить на следующий:
this.Size = new Size((int)(SystemInformation.WorkingArea.Width * .90f), 400);
this.Shown += delegate
{
    var fcc = new Fcc();
    fcc.Dock = DockStyle.Fill;
    fcc.Parent = this;

    var ocx = fcc.GetOcx() as FramerControl;
    ocx.Titlebar = false;
    ocx.Toolbars = false;
    ocx.Menubar = false;
    ocx.EventsEnabled = true;

    ocx.Open(@"C:\Temp\Test.docx", Missing.Value, Missing.Value, Missing.Value, Missing.Value);
    ocx.Activate();
};
Метод ocx.Open также можно вызвать следующим способом:
typeof(_FramerControl).GetMethod("Open").Invoke(ocx, new object[] { @"C:\Temp\Test.docx", Missing.Value, Missing.Value, Missing.Value, Missing.Value });
5) Заменить "C:\Temp\Test.docx" на путь к файлу с расширением: .docx | .doc | .pptx | ... Нажать F5.


Чтобы самому не создавать наследника AxHost, можно сделать следующее: 1) Открыть Form1.cs в дизайнере (= в контекстном меню выбрать View Designer); 2) Открыть Toolbox (Ctrl+W, X); 3) В контекстном меню Toolbox'а выбрать Choose Items... - COM Components; 4) В списке найти DSO Framer Control Object, включить checkbox; 5) DSO Framer Control Object перетащить с Toolbar'а и сбросить над формой.
В результате будет создан файл AxInterop.DSOFramer.dll, а в References появится AxDSOFramer.

Пример встраивания офисных документов в веб-страницу находится в папке C:\DsoFramer\Samples\WebTest

Подробности использования DSOFramer приведены в статье "Visual C++ ActiveX Control for hosting Office documents in Visual Basic or HTML".

1 комментарий:

Unknown комментирует...

Здравствуйте!

У меня есть попутный вопрос по данной тематике. Как сделать так чтобы в ocx.Open можно было использовать объекты, созданные при помощи VSTO.

Как пример...
using Excel = Microsoft.Office.Interop.Excel;
...
Excel.Application oXL;
Excel._Workbook oWB;
Excel._Worksheet oSheet;

...

oXL = new Excel.Application();
oXL.Visible = true;

oWB = (Excel._Workbook)(oXL.Workbooks.Add( Missing.Value ));
oSheet = (Excel._Worksheet)oWB.ActiveSheet;

...

ocx.Open(oSheet)

или COM...
string sAppProgID = "Excel.Application";
object oExcel = Marshal.GetActiveObject(sAppProgID);
ocx.Open(oExcel)