Открытие проекта С# Word 2013 из Windows Form

Я успешно создал проект С# Word 2013 (ReportGenerator), который открывает базу данных MS ACCESS и создает отчет MS WORD 2013. Результаты очень хорошие. У меня проблема в том, что на данный момент ее можно запустить только из Visual Studio. Мой босс хочет, чтобы он работал через форму Windows.

У меня есть полномочия создать новый проект (ReportRunner), который содержит форму Windows с сеткой данных, заполнить ее и поместить на нее кнопку. Чего мне не хватает, так это компетентности знать, как:

  1. Откройте код генерации отчета из ReportGenerator в событии onclick ReportRunner.
  2. Передайте переменную из ReportRunner в ReportGenerator, чтобы избежать жесткого кодирования.

Я ожидал, что смогу написать строку типа «ReportGenerator.ThisDocument.ThisDocument_Startup» в событии нажатия кнопки. Этого не происходит.

Важные фрагменты кода в моих проектах:

Генератор отчетов

    namespace ReportGenerator
    {
      public partial class ThisDocument
      {
        ReportData reportData = new ReportData();

        public void ThisDocument_Startup(object sender, System.EventArgs e)
        {
           int idToLookFor = 2;
           reportData = MyFunctionToReadAccessData(idToLookFor);
           MyFunctionToPutDataIntoReport();
        }
      }
   }

ReportRunner

using ReportGenerator; 

namespace ReportRunner
{
    public partial class Form1 : Form

      private void button1_Click(object sender, EventArgs e)
      {
          int idToLookFor = int.Parse(dataGridView1.CurrentRow.Cells[0].Value.ToString());

         //HOW DO I MAKE IT OPEN REPORT GENERATOR ThisDocument_Startup 
         // AND PASS IT THE idToLookFor
      }
}

person opc51    schedule 09.07.2015    source источник


Ответы (1)


Обновлять:

У меня возникли проблемы с пониманием вашего комментария, поэтому вот несколько обновлений:

  1. Вы можете вызвать метод из надстройки уровня документа из отдельной C# WinForm, используя предоставленную мной ссылку. Неважно, надстройка это уровня приложения или надстройка уровня документа — подход один и тот же. См. эту ссылку.

  2. Почему вы создали проект формы ReportRunner отдельно от проекта надстройки ReportGenerator? Как я сказал ниже, вы можете создать одно решение VS с двумя проектами: один — надстройка уровня документа, другой — WinForm, и вы можете просто вызвать WinForm из ленты, связанной с надстройкой.


Я предполагаю, что вы спрашиваете, как вызвать функцию из надстройки Word из Winform? Недавно я объяснил, как это сделать здесь: project/31171306#31171306">Как вызвать метод надстройки VSTO из отдельного проекта C#?

При этом я не рекомендую делать это, потому что вы можете просто упаковать свою WinForm вместе с надстройкой, а затем открыть ее с помощью ленты следующим образом:

    private void button1_Click(object sender, RibbonControlEventArgs e)
    {
            Form1 aForm = new Form1();
            aForm.Show();
person Charlie    schedule 09.07.2015
comment
Надстройка — это объект уровня приложения, функции которого применимы к нескольким объектам уровня документа. Это не то, что я сделал. Я написал объект уровня документа, который содержит предварительно написанный текст и таблицы. Пространство имен ReportGenerator считывает данные из Access и помещает их в этот документ. Моя проблема заключается в том, что мне нужно открыть этот документ из пространства имен ReportRunner, которое содержит форму со списком всех возможных наборов данных, которые могут войти в этот конкретный документ. Это означает, что кто-то может создать отчет без установки Visual Studio. - person opc51; 09.07.2015
comment
я не создаю надстройку (насколько я понимаю), у меня есть существующий отчет с текстом и пустыми таблицами. Я создал программу на С#, которая считывает данные из Access, помещает их в отчет и переименовывает. (Это прекрасно работает). - это называется ReportGenertor. Мне нужно открыть этот отчет из формы Winows. Я создаю форму в виде сетки, заполняю ее нужными мне данными. На этой форме есть кнопка. - person opc51; 10.07.2015
comment
когда я нажимаю кнопку, я хочу, чтобы она вызывала ReportGenerator, который содержит весь код для помещения данных в документ Word. Я не могу получить доступ к методу ReportGenerator thisDocument_startup из ReportRunner. Этот метод является основным методом текстового документа. Если я не могу вызвать этот метод, то я не знаю, как сообщить ReportRunner, чтобы он вызывал ReportGenerator и начинал вводить данные. - person opc51; 10.07.2015
comment
В настоящее время я запускаю ReportGenerator из Visual Studio. Я хочу, чтобы он запускался формой Windows ReportRunner, чтобы люди, не являющиеся программистами, могли заполнять отчеты данными доступа. - person opc51; 10.07.2015
comment
Вы не должны ничего помещать в thisDocument_startup. Ваш код должен быть в отдельном методе (например, CreateVstoNamedRange), как описано в приведенной выше ссылке, а также в этой ссылке. Пожалуйста, пройдите по этой ссылке и уточните, какие вопросы у вас есть. msdn.microsoft.com/en- мы/библиотека/vstudio/ - person Charlie; 10.07.2015
comment
Если вы не создали надстройку Word уровня документа, какой тип проекта Visual Studio является вашим ReportGenerator? Тот факт, что у него есть thisDocument_startup, говорит о том, что это надстройка. - person Charlie; 10.07.2015